Répétition de macro selon condition

Bonjour,

J'importe des données de facturation depuis un logiciel tiers. Je dois ensuite copier chaque ligne et l'insérer sur un autre onglet en tenant compte de la date, puis pour finir je dois supprimer la ligne qui vient d'être copiée.

L'opération doit être répétée tant qu'il reste des lignes à trier.

Le code fonctionne, mais je dois cliquer sur le bouton autant de fois qu'il y a de lignes, j'aimerais pouvoir cliquer une seule fois

J'ai testé les fonctions DO LOOP et WHILE Wend sans succès, il est fort probable que je n'ai pas su les mettre en pratique correctement.

D'autre part, mon code est sûrement perfectible, et j'apprécierais une correction détaillée de ce que j'aurais pu faire de travers, ça m'aiderait à progresser.

Merci d'avance

Bonsoir,

une proposition de correction

- mettre un point devant les instructions cells et range qui se rapportent à l'instruction with (j'ai mis des points là où il me semblait que tu voulais faire référence à des cellules de la feuille T1

- quand tu tries un tableau sur base d'une colonne, il faut indiquer que l'on souhaite trier tout le tableau j'ai adapté le range pour prendre tout le tableau

- quand on a trouvé l'endroit où insérer la ligne et qu'on l'a insérée, il n'est plus utile de continuer la recherche des dates (j'ai mis un exit for pour sortir de la boucle)

Sub tri()
    Dim DernL As Integer 'Déclaration de la variable DernL
    While Worksheets("EBP").Range("B2").Value <> ""  'Si la cellule B2 de la feuille EBP est vide on arrête la macro
        With Worksheets("T1") 'Dans la feuille T1
            DernL = .Range("B65536").End(xlUp).Row 'Définit quelle est la dernière ligne non-vide dans la colonne B
            'on trie tout le tableau en prenant comme clé la colonne B
            .Range("A1:Y" & DernL & "").Sort Key1:=.Range("B1"), Order1:=xlAscending, Header:=xlYes, _
                OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom 'Options de tri
            For i = 2 To DernL
                If .Cells(i, 2).Value <= Worksheets("EBP").Range("B2").Value Then 'Si il y a dans la colonne B une cellule de valeur inférieure à la cellule B2 de la feuille EBP alors
                    Else
                        .Cells(i, 1).EntireRow.Insert
                        Worksheets("EBP").Range("A2").EntireRow.Copy 'Copie de toute la ligne 2
                        .Cells(i, 1).Select
                        ActiveSheet.Paste
                        Worksheets("EBP").Rows("2").Delete
                        Exit For
                    End
                End If
            Next i
        End With
    Wend
End Sub

C'est parfait, j'étais pas trop loin du compte finalement.

Merci beaucoup !

Rechercher des sujets similaires à "repetition macro condition"