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 Sub

Bonjour,

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...

3exemple.xlsm (18.36 Ko)

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 If

ne 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 If

En 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+

Rechercher des sujets similaires à "vba macro trop longue temps"