Macro devenue tres lente

SPEA

XLDnaute Occasionnel
Bonjour,

La macro qui recopie les cellules provenant de plusieurs feuilles vers une feuille de Bilan est devenue tres lente, elle met une dizaine de secondes pour s'executer alors qu'avant c'etait quasi instantané.

Le classeur a simplement été modifié pour ajouter une feuille de menu et des macros pour afficher/masquer les onglets des feuilles.

Code:
Sub Recopie()

Application.ScreenUpdating = False
Sheets("Bilan").Select
'String destiné à lister les colonnes dont les formules doivent être repétées
form = "ABEGHJKMNQT"
'Première ligne où recopier dans la feuille Bilan
ligcop = 2
'Première colonne de récupération des données dans les feuilles "Mois"
debdate = 3
'Pour chaque feuille
For i = 1 To Sheets.Count
'à l'exclusion de la feuille Bilan
If Sheets(i).Name <> "Bilan" And Left(Sheets(i).Name, 5) <> "Graph" Then
'dernière colonne où récuperer les données
findate = Sheets(i).Range("IV1").End(xlToLeft).Column
'pour chaque colonne
For n = debdate To findate
'transfert dans la feuille Bilan
Sheets("Bilan").Range("C" & ligcop) = Sheets(i).Cells(1, n)
Sheets("Bilan").Range("D" & ligcop) = Sheets(i).Cells(2, n)
Sheets("Bilan").Range("F" & ligcop) = Sheets(i).Cells(41, n)
Sheets("Bilan").Range("I" & ligcop) = Sheets(i).Cells(7, n)
Sheets("Bilan").Range("L" & ligcop) = Sheets(i).Cells(8, n)
Sheets("Bilan").Range("O" & ligcop) = Sheets(i).Cells(13, n)
Sheets("Bilan").Range("P" & ligcop) = Sheets(i).Cells(16, n)
Sheets("Bilan").Range("R" & ligcop) = Sheets(i).Cells(42, n)
Sheets("Bilan").Range("S" & ligcop) = Sheets(i).Cells(27, n)
Sheets("Bilan").Range("U" & ligcop) = Sheets(i).Cells(29, n)
Sheets("Bilan").Range("V" & ligcop) = Sheets(i).Cells(32, n)
Sheets("Bilan").Range("W" & ligcop) = Sheets(i).Cells(33, n)
Sheets("Bilan").Range("X" & ligcop) = Sheets(i).Cells(34, n)
Sheets("Bilan").Range("Y" & ligcop) = Sheets(i).Cells(35, n)
'incrément de la ligne où copier
ligcop = ligcop + 1
'colonne suivante
Next n
End If
'feuille suivante
Next i
'dernière ligne de la feuille Bilan mise à jour
derling = Sheets("Bilan").Range("C65536").End(xlUp).Row
'utilisation du string form pour determiner la lettre de la colonne pour chaque lettre
For n = 1 To Len(form)
'dernière ligne remplie de la colonne
derlincol = Sheets("Bilan").Range(Mid(form, n, 1) & "65536").End(xlUp).Row
'sécurité dans le cas où la feuille Bilan n'aurait pas été mise à jour on sort de la boucle
If derlincol <> derling Then
'copie de la formule
Sheets("Bilan").Range(Mid(form, n, 1) & "65536").End(xlUp).Copy
'selection de la plage
Sheets("Bilan").Range(Mid(form, n, 1) & derlincol + 1 & ":" & Mid(form, n, 1) & derling).Select
'collage
ActiveSheet.Paste
End If
Next n
'Vide la mémoire du copier/coller
Application.CutCopyMode = True
Application.ScreenUpdating = True

End Sub

Est il possible de voir le deroulement de la macro pour savoir quelle est la ligne qui ralentit la macro ?
 

MJ13

XLDnaute Barbatruc
Re : Macro devenue tres lente

Bonjour

Il suffit de rajouter un stop dans ton code pour passer en debogage puis avec F8, tu peux avancer pas à pas en pouvant revenir en arrière en déplaçant la flêche. SI tu veux sortir et continuer pour que la macro s'éxécute sans debogage, tu tapes ctrl+shift+F8.
Attention dans ce mode il se peut que la macro reparte du début. Dans ce cas tu peux stopper tout avec Ctrl+Pause.
 

SPEA

XLDnaute Occasionnel
Re : Macro devenue tres lente

Je n'arrive toujours pas à comprendre pourquoi ce code met 2 à 3 min pour s'executer alors qu'avant il metttait une dizaine de secondes tout au plus.

Comment ajouter des colonnes dans la declaration de la variable "form" au delà de la colonne Z, pour lister les colonnes dont la formule doit être recopiée. Je voudrais ajouter la colonne AA mais je redoute que le code ne la considere comme 2x la colonne A.
 

ballmaster

XLDnaute Occasionnel
Re : Macro devenue tres lente

Bonjour SPEA,

si tu argumentes ta colonne AA par range("AA"), je ne vois pas de raisons qu'excel l'interprête pour la colonne A.
A moins que des bugs existent, mais là.......


Pour ce qui est de la rapidité de ta macro, l'executes-tu dans les mêmes conditions qu'auparavant? Fichiers ouverts/fermés, ressources mémoire...
 

SPEA

XLDnaute Occasionnel
Re : Macro devenue tres lente

Re,

Code:
form = "ABEGHJKMNQT"

Je dois rajouter AA à la suite pour ajouter la colonne AA dans la liste de colonnes à recopier ?

Pour ce qui est de la macro j'ai uniquement ajouté les feuilles des mois de juillet à décembre mais les données ne sont pas encore saisies donc il n'y a encore aucune cellule supplémentaire à recopier.

Pour le reste les conditions sont les mêmes.
 

Discussions similaires

Statistiques des forums

Discussions
312 609
Messages
2 090 192
Membres
104 447
dernier inscrit
Baldur