VBA - Simplification "copier/coller" Excel

Résolu/Fermé
Utilisateur anonyme - Modifié par anonymous1.0 le 20/02/2012 à 15:21
 Utilisateur anonyme - 1 mars 2012 à 15:09
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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
Modifié par michel_m le 20/02/2012 à 16:41
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 10905 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 27 décembre 2024 2 429
20 févr. 2012 à 17:02
>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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
20 févr. 2012 à 17:12
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
21 févr. 2012 à 08:30
Merci, j'avais déjà essayé cette méthode mais elle ne fonctionne pas! O_o
0
Utilisateur anonyme
1 mars 2012 à 11:19
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 10905 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 27 décembre 2024 2 429
Modifié par ccm81 le 20/02/2012 à 16:15
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
21 févr. 2012 à 08:31
Parfait, ça fonctionne nickel !!

Un grand merci!!
0
Utilisateur anonyme
1 mars 2012 à 11:18
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 10905 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 27 décembre 2024 2 429
Modifié par ccm81 le 1/03/2012 à 15:22
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
1 mars 2012 à 15:09
merci
0