Problème boucle sans do
Bonjour,
Lorsque je fais tourner mon code je me heurte au problème suivant "Erreur de compilation : Boucle sans do".
Mon souhait est que dans le cas ou la cellule (ID,a) est vide le balayage des cellules continue sans effectuer d'opération (cf dernière ligne)
Merci d'avance
Cdlt
'Si correspondance trouvé alors stockage du numero de la ligne de la correspondance dans ID
ID = Recherche.Row
'Initialisation de la variable d'incrémentation
a = 0
'Contôle de fin de tableau : Z est le nombre de cellules vides derrière la dernière cellule "TOTAL" on le fait tourner jusqu'à 20 pour s'assurer qu'il s'agit bien de la fin du tableau
Do Until z = 20
'Consigne d'incrémentation
a = a + 1
'Pour compter le nombre de cellule vide : si la cellule de la ligne 5 et de la colonne en question est vide alors incrémentation de z
If Cells(5, a) = "" Then z = z + 1
'Contrôle fin de tableau terminé du coup réinitialisation de z
z = 0
'Suppression d'erreurs possibles : Si la cellule de la ligne 5 et colonne en question = la valeur "TOTAL" et que la cellule correspondant au numéro de ligne stocké dans ID et la colonne en question est vide alors loop
If Cells(5, a) = "TOTAL" And Cells(ID, a) = "" Then Loop
Bonjour,
Si ça te met ça, c'est que la syntaxe de ta boucle est mauvaise:
Sub test()
'Si correspondance trouvé alors stockage du numero de la ligne de la correspondance dans ID
ID = Recherche.Row
'Initialisation de la variable d'incrémentation
a = 0
Do
'Contôle de fin de tableau : Z est le nombre de cellules vides derrière la dernière cellule "TOTAL" on le fait tourner jusqu'à 20 pour s'assurer qu'il s'agit bien de la fin du tableau
For Z = 0 To 20
If Cells(5, a) = "" Then
nbVide = nbVide + 1
End If
Next Z
a = a + 1
'Suppression d'erreurs possibles : Si la cellule de la ligne 5 et colonne en question = la valeur "TOTAL" et que la cellule correspondant au numéro de ligne stocké dans ID et la colonne en question est vide alors loop
Loop While Cells(5, a) = "TOTAL" And Cells(ID, a) = ""
End SubVoici le code que je te propose, je te laisse essayer
Merci Ausecour, cela à résolu mon problème !!
Néanmoins je me heurte à un nouveau problème qui selon moi correspond également à une erreur de syntaxe (cf erreur rouge)
Le débogeur m'indique une variable objet ou une variable de bloc with non définie
'Dans la feuille "Fourniture" colonne 2 recherche de la valeur "SOUS-TOTAL FOURNITURE DIVERSES"(qui est la dernière valeur de la colonne) et renvoie de la valeur exact
Set Bornageplage = Worksheets("Fourniture").Columns(2).Find(what:="SOUS-TOTAL FOURNITURE DIVERSES", lookat:=xlWhole)
'Une fois la dernière valeur trouvé et donc la fin de la plage de recherche stockage du numéro de cette ligne (dernière ligne de la plage) dans la variable Finligne
Finligne = Bornageplage.Row
'Dimentionnement de la plage de recherche
For i = 1 To Finligne
'Suppression d'erreurs possibles : Si dans la feuille "Fourniture" lors du balayage il rencontre une cellule vide dans la plage alors il passe à la suivante
If Worksheets("Fourniture").Cells(i, 2) = "" Then
nbvide = nbvide + 1
End If
Next i
'Dimentionnement de la plage de recherche
For i = 1 To Finligne
'Recherche de correspondance entre feuille "Cubature" colonne 2 et la plage (1 à fin de la plage) de la feuille "Fourniture" avec un renvoie de correspondance exact
Set Recherche = Worksheets("Cubature").Column(2).Find(what:=Worksheets("Fourniture").Cells(i, 2), lookat:=xlWhole)
'Suppression d'erreurs possibles : Si pas de correspondance exact car valeur de la plage absente de la feuille "Cubature" ou inversement alors passage au balayage de la cellule suivante
If Recherche Is Nothing Then
nocorresp = nocorresp + 1
End If
Next i
Bonjour,
Visiblement le problème ne vient pas de cette ligne, mais du Set Borneplage:
Set Bornageplage = Worksheets("Fourniture").Columns(2).Find(what:="SOUS-TOTAL FOURNITURE DIVERSES", lookat:=xlWhole)
Cette instruction peut être problématique si elle ne trouve pas la valeur que tu cherches, je te propose déjà de changer une chose:
Set Bornageplage = Worksheets("Fourniture").Columns(2).entireColumn.Find(what:="SOUS-TOTAL FOURNITURE DIVERSES", lookat:=xlWhole)
Malheureusement cela ne règle pas le problème.
Je n'arrive pas à identifier la source de cette erreur