VBA - Macro trop longue en temps
Bonjour,
J'ai créer de toute pièce la macro suivante (avec un niveau en VBA assez médiocre je l'admet) mais elle rame beaucoup trop et mets un temps de dingue à se finir.
Une idée ou des pistes pour raccourcir la macro ?
Merci d'avance.
Sub autreessai()
Dim a, b, c, d As Integer
a = 6
b = 6
'Copie de tous les colis
Do While Sheets("Colisage").Cells(a, 2).Value <> ""
a = a + 1
Loop
a = a - 1
b = 6
Sheets("Colisage").Range(Cells(b, 2), Cells(a, 6)).Copy
Sheets("Colisage").Range(Cells(b, 17), Cells(a, 23)).PasteSpecial
' Suppression des lignes qui son en doubles
For c = b To a
d = c + 1
If Sheets("Colisage").Cells(c, 17).Value <> Sheets("Colisage").Cells(d, 17).Value Then
Else
Sheets("Colisage").Cells(c, 17).Delete Shift:=xlUp 'Supp N° de colis
If Sheets("Colisage").Cells(c, 18).Value > Sheets("Colisage").Cells(d, 18).Value Then
Sheets("Colisage").Cells(c, 18).Delete Shift:=xlUp 'Supp longueur colis
Else
Sheets("Colisage").Cells(d, 18).Delete Shift:=xlUp 'Supp longueur colis
End If
If Sheets("Colisage").Cells(c, 19).Value > Sheets("Colisage").Cells(d, 19).Value Then
Sheets("Colisage").Cells(c, 19).Delete Shift:=xlUp 'Supp Hauteur colis
Else
Sheets("Colisage").Cells(d, 19).Delete Shift:=xlUp 'Supp longueur colis
End If
If Sheets("Colisage").Cells(c, 20).Value > Sheets("Colisage").Cells(d, 20).Value Then
Sheets("Colisage").Cells(c, 20).Delete Shift:=xlUp 'Supp largeur colis
Else
Sheets("Colisage").Cells(c, 20).Delete Shift:=xlUp 'Supp longueur colis
End If
If Sheets("Colisage").Cells(c, 21).Value > Sheets("Colisage").Cells(d, 21).Value Then
Sheets("Colisage").Cells(c, 21).Delete Shift:=xlUp 'Supp poids colis
Else
Sheets("Colisage").Cells(c, 21).Delete Shift:=xlUp 'Supp longueur colis
End If
End If
Next c
End SubBonjour,
Pouvez vous joindre un fichier exemple et décrire ce que vous cherchez à faire ? Ce sera plus simple que de partir d'un code potentiellement inadapté, sans comprendre ce qu'il fait.
Je suis désolé mais je n'y arrive pas mon fichier fait 39Mo... Je pense que c'est à cause du fait que toutes les lignes sont chargés (10 000 000 lignes environ...)
Une idée pour réduire la taille et supprimer le chargement des lignes ? sachant que je n'ai aucune valeur dans des lignes si basse
J'ai créer un nouveau fichier mais le problème persiste sur le fichier original...
bonjour,
edit salut Pedro22
ces instructions sont-elles correctes ?
If Sheets("Colisage").Cells(c, 20).Value > Sheets("Colisage").Cells(d, 20).Value Then
Sheets("Colisage").Cells(c, 20).Delete Shift:=xlUp 'Supp largeur colis
Else
Sheets("Colisage").Cells(c, 20).Delete Shift:=xlUp 'Supp longueur colis
End If
If Sheets("Colisage").Cells(c, 21).Value > Sheets("Colisage").Cells(d, 21).Value Then
Sheets("Colisage").Cells(c, 21).Delete Shift:=xlUp 'Supp poids colis
Else
Sheets("Colisage").Cells(c, 21).Delete Shift:=xlUp 'Supp longueur colis
End Ifne devrait-ce pas être ?
If Sheets("Colisage").Cells(c, 20).Value > Sheets("Colisage").Cells(d, 20).Value Then
Sheets("Colisage").Cells(c, 20).Delete Shift:=xlUp 'Supp largeur colis
Else
'------------------------------
Sheets("Colisage").Cells(d, 20).Delete Shift:=xlUp 'Supp largeur colis (d au lieu de c ?)
'------------------------------
End If
If Sheets("Colisage").Cells(c, 21).Value > Sheets("Colisage").Cells(d, 21).Value Then
Sheets("Colisage").Cells(c, 21).Delete Shift:=xlUp 'Supp poids colis
Else
'--------------------------------
Sheets("Colisage").Cells(d, 21).Delete Shift:=xlUp 'Supp poids colis (d au lieu de c ?)
'--------------------------------
End IfEn effet, tu as raison. Merci de la remarque.
D'ailleurs le problème est résolu. J'ai simplement supprimer la feuille et en ai créer une nouvelle bien moins grosse (pas sur 10 000 000 de lignes mais seulement 300). Et la macro se fait direct.
Je pense qu'elle tournais en boucle dans le vide jusqu'a la fin
Bonjour,
Une macro de suppression de ligne ne se fait jamais de la première à la dernière ligne mais de la dernière à la première.
Sinon... ça marche moins bien !
Evitez d'user toutes les lettres de l'alphabet pour vos variables : Utilisez des variables comportant au minimum 2 caractères.
Utilisez (par exemple)
iR (Row)
iLR (LastRow)
iC (Column
iLC (LastColumn...)
Réservez i, j, k pour les compteurs de boucle For... Next
A+
Pas bête, merci pour le conseil !
C'est une très bonne technique car j'avoue que je me perds un peu dans mes variables...
A+