VBA - Simplification "copier/coller" Excel

Résolu
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

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    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
    1. >michel re-bonjour
      vu son code, je pense que la condition est évaluée à chacune des lignes i
      bonne fin d'après midi
    2. Contributeur
      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
    3. Merci, j'avais déjà essayé cette méthode mais elle ne fonctionne pas! O_o
  2. 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 ?!!
    1. 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. Parfait, ça fonctionne nickel !!

        Un grand merci!!
      2. 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 ?!
      3. 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
      4. merci