Excel ne répond pas lors d'execution d'une macro
RésoluMossaab95 Messages postés 9 Statut Membre -
Aidez moi s'il vous plait
J'ai crée une macro sur un fichier Excel qui contient plus que 22000 ligne, la macro s’exécute en mode pas à pas et quand je réduit le nombre de lignes, sinon le fichier excel beug et ne réponds pas.
Pouvez vous m'aider s'il vous plait ?
Voici la Macro
Sub MAJ2()
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim L As Long
L = Range("A1").End(xlDown).Row + 1
For i = 2 To L
For j = i + 1 To L + 1
If Sheets("Feuil1").Cells(i, 1) = Sheets("Feuil1").Cells(j, 1) Then
For k = 2 To 100
If Sheets("Feuil1").Cells(i, k) <> Sheets("Feuil1").Cells(j, k) Then
Sheets("Feuil1").Cells(i, k) = Sheets("Feuil1").Cells(i, k) & "//" & Sheets("Feuil1").Cells(j, k)
Sheets("Feuil1").Cells(j, k) = ""
End If
Next
End If
Next
Next
Mercii
9 réponses
Le fil porte sur une macro Excel traitant plus de 22 000 lignes qui s’exécute en mode pas à pas et provoque le plantage du classeur lorsque le jeu de données est trop volumineux. Plusieurs réponses suggèrent de limiter les comparaisons, d’insérer DoEvents après les boucles, ou de trier et regrouper par colonne A pour ne comparer que les lignes pertinentes. D'autres propositions visent à améliorer la performance en vérifiant uniquement les lignes ayant la même valeur en colonne A, ce qui permet d’arrêter la comparaison dès que la valeur change. En cas d’amélioration, certains suggèrent aussi de scinder le fichier ou d’utiliser des méthodes plus performantes que les accès cellule par cellule, comme le traitement par colonnes.
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour, je suggère d'ajouter une ligneDoEvents
après la ligneFor i = 2 To L
-
-
-
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
-
-
Voila monsieur
https://www.transfernow.net/files/?utm_source=dOqTRM032020&utm_medium=&utm_content=en
Merci beaucoup-
ce que je suggère, c'est que tu sélectionnes toutes tes données, et puis que tu demandes à excel de les trier par ordre croissant de la première colonne.
ensuite, tu ne devras plus comparer toutes les lignes, il suffira de comparer chaque ligne aux lignes suivantes ayant la même valeur en colonne A.
-
-
Mais je compare dèja chaque ligne aux lignes suivantes, j = i+1 toujours
-
-
-
-
Merci
J'ai réussi à faire ça
Un autre problème c'est que sur cette ligne
Sheets("Feuil1").Cells(i, k) = Sheets("Feuil1").Cells(i, k) & "//" & Sheets("Feuil1").Cells(j, k)
je veux que les données de Sheets("Feuil1").Cells(j, k) gardent leurs mise en forme (couleur rouge)
est ce que ceci est possible ? -
je pense que c'est possible, si tu calcules la position et la longueur des données ajoutées, ainsi (non testé):
position=len(Sheets("Feuil1").Cells(i, k))+3 longueur=len(Sheets("Feuil1").Cells(j, k)) Sheets("Feuil1").Cells(i, k) = Sheets("Feuil1").Cells(i, k) & "//" & Sheets("Feuil1").Cells(j, k) Sheets("Feuil1").Cells(i, k).Characters(position, longueur).Font.Color = _ Sheets("Feuil1").Cells(j, k).Font.Color
-
-