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


A voir également:

3 réponses

michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 313
 
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
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
>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
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 313
 
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
Utilisateur anonyme
 
Merci, j'avais déjà essayé cette méthode mais elle ne fonctionne pas! O_o
0
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
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
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
Utilisateur anonyme
 
Parfait, ça fonctionne nickel !!

Un grand merci!!
0
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
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
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
Utilisateur anonyme
 
merci
0