Remplacer Goto

Bonjour tout le monde,

Je dois optimiser un code et je voudrais enlever les goto par des boucles mais j'ai un peu de mal avec les boucles proposées et la syntaxe VBA !

    Dim a As Integer, b As Integer

    a = 2

line1: ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Workbooks("0-base de données.xlsx").Worksheets(1).Activate

    If Cells(a, 1) <> "" Then
        b = a
line2: '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        If Cells(a, 18) = Cells(a + 1, 18) Then
            If Cells(a, 23) <> "" And Cells(a, 23) <= Date And Cells(a, 256) = 1 Then
                a = a + 1
                GoTo line2
            Else
line3: '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
                If Cells(a, 18) = Cells(a + 1, 18) Then
                    a = a + 1
                    GoTo line3
                Else:
                    a = a + 1
                    GoTo line1
                End If
            End If
        Else
            If Cells(a, 23) <> "" And Cells(a, 23) <= Date And Cells(a, 256) = 1 Then

                Workbooks("0-base de données.xlsx").Worksheets(1).Range("1:2").Copy
                Workbooks("0-base de données1.xlsx").Worksheets(1).Activate
                D = 2
line5: '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
                If Cells(D, 1) <> "" Then
                    D = D + 1
                    GoTo line5
                End If
                Cells(D, 1).Select
                ActiveSheet.Paste
                Windows("0-base de données.xlsx").Activate
                Rows(b & ":" & a).Select
                Selection.Delete Shift:=xlUp
                a = b
                GoTo line1
            End If
            a = a + 1
            GoTo line1
        End If
    End If
    

Merci de votre aide et vos conseils

Bonjour

Une boucle fonctionne effectivement comme tu a pu le "bricoler"

Pour mettre en place une boucle il de faut savoir un seul chose, intervalle dans lequel tu veux que ton code s’exécute.

Si par exemple je veux travailler sur un interval de 10 en partant de 13 alors ma boucle For sera :

For i = 13 to 23

exemple :

Sub Boucle()

For i = 5 to 10
   If cells(i,1)<>cells(i,2) then 
      cells(i,3)="ok"
   Else
      cells(i,3)="Nok"
      Exit For
Next i

End Sub

EDIT : Après une rapide relecture de ton code regarde plutot de While/Loop : https://www.excel-pratique.com/fr/vba/boucles.php

Si je prend qu'un seul bout de ton code sela donnerais :

While Cells(a, 18) = Cells(a + 1, 18)

If Cells(a, 23) <> "" And Cells(a, 23) <= Date And Cells(a, 256) = 1 Then
a = a + 1

Wend

Donc en traduction littéral, tant que la cellule "a"23 est égale à la cellule "a+1"18 on passe au lignes inférieurs

Aurais-tu un fichier à partager ?

J'ai du mal à comprend ce que tu veux faire avec ton code, peux tu le "traduire" ?

Rechercher des sujets similaires à "remplacer goto"