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 SubEDIT : 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
WendDonc 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" ?