Optimiser une macro

bayedave - 31 juil. 2013 à 11:14
rackamlerouge Messages postés 13 Date d'inscription jeudi 18 septembre 2003 Statut Membre Dernière intervention 7 octobre 2013 - 7 oct. 2013 à 14:23
Bonjour,

Est-il possible d'optimiser cette macro. Car avec une petite liste de données, ça fonctionne à merveille. Mais si la volumétrie augmente elle a l'air de se ralentir.

LgMax = Application.WorksheetFunction.Max(LgLigA, LgLigB)
CoMax = Cells(1, Columns.Count).End(xlToLeft).Column
For lgLig = 2 To LgMax
' Colonnes : D à AO
For lgCol = 2 To CoMax
' Une différence est trouvée dans une ligne
If wsFicA.Cells(lgLig, lgCol).Value <> wsFicB.Cells(lgLig, lgCol).Value Then
' Affichage du nom du fichier en colonne A
wsFicAna.Range("A" & lgLigDeb).Value = wbFicA.Name
' Copier la ligne du fichier A dans le fichier d'analyse
wsFicA.Range("A" & lgLig & ":" & "AX" & lgLig).Copy _
Destination:=wsFicAna.Range("C" & lgLigDeb)

' Affichage du nom du fichier en colonne A
wsFicAna.Range("A" & lgLigDeb + 1).Value = wbFicB.Name
' Copier la ligne du fichier B dans le fichier d'analyse
wsFicB.Range("A" & lgLig & ":" & "AX" & lgLig).Copy _
Destination:=wsFicAna.Range("C" & lgLigDeb + 1)

lgLigDeb = lgLigDeb + 2

Exit For
End If
Next lgCol
Next lgLig

Merci pour votre réponse.

2 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
2 août 2013 à 20:14
Bonsoir,

Tu peux utiliser un tableau pour gérer une plage de cellule :
MonTableau=Range("A1:Z100).Value
Ensuite, tu peux travailler sur ce tableau et ce sera nettement plus rapide.
0
rackamlerouge Messages postés 13 Date d'inscription jeudi 18 septembre 2003 Statut Membre Dernière intervention 7 octobre 2013 1
7 oct. 2013 à 14:23
Voici une instruction importante quand on souhaite que çà fonce !
Ces instructions empêchent la mise à jour de l'affichage Excel pendant l'exécution de la macro. Dès qu'on modifie des valeurs dans des cellules, le ralentissement peut être important. Cette instruction ne sert à rien si aucune valeur d'un classeur Excel est affectée. Dans votre cas, çà va aider...

Application.ScreenUpdating = False

Code à exécuter

Application.ScreenUpdating = True
0
Rejoignez-nous