VBA - Simplification "copier/coller" Excel

Résolu
Utilisateur anonyme -  
 Utilisateur anonyme -
Bonjour,

J'ai une macro VBA qui est assez longue, je cherche à réduire son temps de traitement en réécrivant mon programme en un language simplifié.

Voici un morceau de la base:

L = 5 
For I = 5 To 700         
    If [Conditions...] Then 

        Sheets("arrivée").Cells(L, 5) = Sheets("départ").Cells(I, 5) 
        Sheets("arrivée").Cells(L, 7) = Sheets("départ").Cells(I, 7) 
        Sheets("arrivée").Cells(L, 8) = Sheets("départ").Cells(I, 8) 
        Sheets("arrivée").Cells(L, 9) = Sheets("départ").Cells(I, 9) 
        Sheets("arrivée").Cells(L, 10) = Sheets("départ").Cells(I, 10) 
        Sheets("arrivée").Cells(L, 11) = Sheets("départ").Cells(I, 11) 
        Sheets("arrivée").Cells(L, 13) = Sheets("départ").Cells(I, 13) 
        Sheets("arrivée").Cells(L, 14) = Sheets("départ").Cells(I, 14) 
        Sheets("arrivée").Cells(L, 15) = Sheets("départ").Cells(I, 15) 
        Sheets("arrivée").Cells(L, 16) = Sheets("départ").Cells(I, 16) 
        Sheets("arrivée").Cells(L, 17) = Sheets("départ").Cells(I, 17) 
        Sheets("arrivée").Cells(L, 18) = Sheets("départ").Cells(I, 18) 
        Sheets("arrivée").Cells(L, 19) = Sheets("départ").Cells(I, 19) 

        L = L + 1 
    End If 
Next I


J'ai cherché à partir sur une autre base telle que :

L = 5 
For I = 5 To 700         
    If [Conditions...] Then 

        Sheets("départ").Range(Cells(I, 5), Cells(I, 19)).Copy 
        Sheets("arrivée").Range(Cells(L, 5), Cells(L, 19)).Paste 

        L = L + 1 
    End If 
Next I


Je pense ne pas être loin mais ma seconde ligne doit être débogé...
Pouvez-vous m'aider ?

Cordialement,
Ano

3 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour

    pour aller vite

    Application.ScreenUpdating = False
    If [Conditions...] Then
          With Sheets("arrivée")
              .Range("E5:S700") = Sheets("départ").Range("E5:S700").Value
              .Columns("F").ClearContents
              .Columns("L").ClearContents
         End With
    End If
    

    Michel
    0
    1. ccm81 Messages postés 11033 Statut Membre 2 434
       
      >michel re-bonjour
      vu son code, je pense que la condition est évaluée à chacune des lignes i
      bonne fin d'après midi
      0
    2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      Ah oui, OK t'as raison....je reprend ma copie

      alors en me basant sur ton code

      Application.ScreenUpdating = False 
      L = 5 
      For I = 5 To 700
          If [Condition] Then 
              Sheets("arrivée").Range(Cells(L, 5), Cells(L, 19))=Sheets("départ").Range(Cells(I, 5), Cells(I, 19))
              L = L + 1 
          End If 
      Next I 
      

      merci et bonne soirée
      0
    3. Utilisateur anonyme
       
      Merci, j'avais déjà essayé cette méthode mais elle ne fonctionne pas! O_o
      0
  2. Utilisateur anonyme
     
    J'ai une autre question, comment faire pour que seulement les valeurs soient copiées et non le format ?

    Je me doute qu'un ".Values" doit trainer quelque part mais où et comment ?!!
    0
  3. ccm81 Messages postés 11033 Statut Membre 2 434
     
    bonjour

    quelque chose comme ça

    Const limax = 700 
    Const Condition = True 
    
    Public Sub Kopi() 
    Application.ScreenUpdating = False 
    L = 5 
    For I = 5 To limax 
        If Condition Then 
            Sheets("départ").Range(Cells(I, 5), Cells(I, 19)).Copy Sheets("arrivée").Cells(L, 5) 
            L = L + 1 
        End If 
    Next I 
    Application.ScreenUpdating = True 
    End Sub

    bonne suite
    -1
    1. Utilisateur anonyme
       
      Parfait, ça fonctionne nickel !!

      Un grand merci!!
      0
    2. Utilisateur anonyme
       
      J'ai une autre question, comment faire pour que seulement les valeurs soient copiées et non le format ?

      Je me doute qu'un ".Values" doit trainer quelque part mais où et comment ?!
      0
    3. ccm81 Messages postés 11033 Statut Membre 2 434
       
      If Condition Then 
              Sheets("départ").Range(Cells(I, 5), Cells(I, 19)).Copy 
              Sheets("arrivée").Cells(L, 5).PasteSpecial Paste:=xlPasteValues 
              L = L + 1 
          End If 


      bonne suite
      0
    4. Utilisateur anonyme
       
      merci
      0