Erreur dans mon code VBA
bonjour svp j'ai une erreur dans mon code je sias pas pourquoi j'ai tous essayer c'est une erreur boucle if
voila la parti du code ou j'ai le probléme
aidez moi svp pour résoudre ce beug mercii
If Range("B1").Value <> "" Then 'vérifie que B1 n'est pas vide
Nbre_Total_Boucl = Columns(3).Find("*", , , , , xlPrevious).Row - 12
Do While Arret = False
DoEvents
'Range("B7:T7").Value = "" 'réinitialise ton "tableau"
i = 2 'valEUr de Ma première colonne du tableau
Application.Wait Time + TimeSerial(0, 0, 1) 'attends 10 sec
Do Until Range("T7") <> "" Or Arret = True 'conditionne la boucle jusqu'à la dernière colonne de ton tableau
If i > 2 Then Cells(7, i - 1).Value = Range("B1") 'mettre la valeur de B1 dans les cellule precedente
Cells(7, i).Value = Range("B1").Value 'mets ta valeurs dans la cellule de ton tableau
i = i + 1 'prochaine colonne
Application.Wait Time + TimeSerial(0, 0, 1) 'attends 10 sec
DoEvents
Loop
'Range("B3").Value = Range("B3").Value + Range("T7").Value
n = 5 'valEUr de Ma première Celulle qui se remplie dans la colonne W
Do Until Range("W8") <> "" Or Arret = True 'conditionne la boucle jusqu'à la dernière colonne de ton tableau
If n > 5 And Range("W5") = "" Then Cells(n + 1, 23).Value = Range("T7") 'mettre la valeur de T7 dans les cellule precedente
Cells(n, 23).Value = Range("T7").Value 'mets ta valeurs dans la cellule de ton tableau
Range("B3").Value = Range("B3").Value + Range("T7").Value
Application.Wait Time + TimeSerial(0, 0, 1)
n = n + 1 'prochaine colonne
Application.Wait Time + TimeSerial(0, 0, 1) 'attends 10 sec
If Range("W8").Value <> "" And Rng1.Offset(1, 0).Value = "" Then
Application.Wait Time + TimeSerial(0, 0, 4)
Set Rng1 = Columns(24).Cells.Find(Range("C13").Offset(Nb_Boucle, 0).Value)
If Rng1 Is Nothing Then
MsgBox Range("C13").Offset(Nb_Boucle, 0).Value & " non trouvé en colonne X"
Else
Rng1.Offset(1, 0).Value = Rng1.Offset(1, 0).Value + Range("W8").Value
End If
Nb_Boucle = Nb_Boucle + 1
If Nb_Boucle = Nbre_Total_Boucl Then Exit Do
End If
'End If
Else
Application.Wait Time + TimeSerial(0, 0, 4)
End If
DoEvents
Loop
Else
MsgBox "B1 est vide !"
End If
Bonjour Barahaoua,
C'est une erreur de structure, tu peux écrire les IF comme ceci
If condition Then 'nécessaire
'actions
Else If conditions Then 'faculatif
'actions 'faculatif
Else 'faculatif
'actions 'faculatif
End If 'nécessaire
Ou comment cela
If condition Then action
Dans ton code, tu ne respecte pas cette structure, une erreur peut être d'écrire
IF condition Then
If condition2 Then
'action
End If
- > 2 If mais 1 seule fermeture End If. Je pense que c'est ton erreur.
- ------------
En entouré l'instruction qui n'a pas lieu d'être selon moi.
Sans fichier c'est assez chiant ce genre de questions je dois dire ^^
Hello,
Essaye de bien faire l'indentation du code. Par exemple tu copie dans notepad++
et tu espaces bien les blocs de if.
Comme ça :
If condition [ Then ]
[ statements ]
[ ElseIf elseifcondition [ Then ]
[ elseifstatements ] ]
[ Else
[ elsestatements ] ]
End If
Tu dois avoir une condition IF qui est pas fermée ou bien un else tout seul.
Cordialement.
Avec une bonne indentation l'erreur va te sauter aux yeux
ok je t'envoi maintenet le fichier
le code est dans le modul nomé tunel
et le bouton qui démare le code c'est simulation dans la feuil Interface
merci
mes amis aidez moi svp j'ai tous essayer mais j'ai toujours l'erreur
merci
Essaie la méthode proposée par nonesofar13 (méthode que j'utilise également) qui pourrait t'être utile ultérieurement
Hello d3d9x,
Merci de me citer
Franchement j'ai un peu regardé ton code et j'ai vraiment eu du mal à comprendre et à debugger, désolé.
Essaye d'isoler les séquences et d'indenter proprement. Franchement tu vas te perdre sinon.
Bon w-k
merci
bon week end a vous aussi
Bonjour à tous,
Un petit conseil dans ce cas-là, utiliser Smart Indenter.
Voici le code VBA de ta procédure automatiquement indentée :
Sub Plaque5_Cliquer()
Dim UniteLavage As Long
Dim d As Object
Dim i As Integer, j As Integer, c As Variant, n As Integer
Dim Nbre_Total_Boucl As Integer
Dim Rng1, Rng2 As Range
Dim Nb_Boucle As Integer
Dim Arret As Boolean
recomencer:
Do Until Range("B3").Value = Range("B4").Value
Satisfait = False
With Sheets("Interface")
'On vérifie s'il existe une valeur en B1
If .[b1] = "" Then MsgBox "Insérer une valeur en B1", 16: Exit Sub
'On enregistre la variable UniteLavage
UniteLavage = .[b1]
'On applique la valeur à la ligne 7
'code pour le lancement des passe dans le tunel
Arret = False: Nb_Boucle = 0
If Range("B1").Value <> "" Then 'vérifie que B1 n'est pas vide
Nbre_Total_Boucl = Columns(3).Find("*", , , , , xlPrevious).Row - 12
Do While Arret = False
DoEvents
'Range("B7:T7").Value = "" 'réinitialise ton "tableau"
i = 2 'valEUr de Ma première colonne du tableau
Application.Wait Time + TimeSerial(0, 0, 1) 'attends 10 sec
Do Until Range("T7") <> "" Or Arret = True 'conditionne la boucle jusqu'à la dernière colonne de ton tableau
If i > 2 Then Cells(7, i - 1).Value = Range("B1") 'mettre la valeur de B1 dans les cellule precedente
Cells(7, i).Value = Range("B1").Value 'mets ta valeurs dans la cellule de ton tableau
i = i + 1 'prochaine colonne
Application.Wait Time + TimeSerial(0, 0, 1) 'attends 10 sec
DoEvents
Loop
n = 5 'valEUr de Ma première Celulle qui se remplie dans la colonne W
Do Until Range("W8") <> "" Or Arret = True 'conditionne la boucle jusqu'à la dernière colonne de ton tableau
If n > 5 And Range("W5") = "" Then Cells(n + 1, 23).Value = Range("T7") 'mettre la valeur de T7 dans les cellule precedente
Cells(n, 23).Value = Range("T7").Value 'mets ta valeurs dans la cellule de ton tableau
Range("B3").Value = Range("B3").Value + Range("T7").Value
Application.Wait Time + TimeSerial(0, 0, 1)
n = n + 1 'prochaine colonne
Application.Wait Time + TimeSerial(0, 0, 1) 'attends 10 sec
If Range("W8").Value <> "" And Rng1.Offset(1, 0).Value = "" Then Application.Wait Time + TimeSerial(0, 0, 4)
Set Rng1 = Columns(24).Cells.Find(Range("C13").Offset(Nb_Boucle, 0).Value)
If Rng1 Is Nothing Then MsgBox Range("C13").Offset(Nb_Boucle, 0).Value & " non trouvé en colonne X"
Else
Rng1.Offset(1, 0).Value = Rng1.Offset(1, 0).Value + Range("W8").Value
End If
Nb_Boucle = Nb_Boucle + 1
If Nb_Boucle = Nbre_Total_Boucl Then Exit Do
Else
Application.Wait Time + TimeSerial(0, 0, 4)
End If
DoEvents
Loop
Else
MsgBox "B1 est vide !"
End If
'If Range("W8") <> "" Then
'boucle sur la colonne X
'Set Rng1 = Columns(24).Cells.Find(Range("C13").Offset(Nb_Boucle, 0).Value)
'If Rng1 Is Nothing Then
' MsgBox Range("C13").Offset(Nb_Boucle, 0).Value & " non trouvé en colonne X"
'Else
'Application.Wait Time + TimeSerial(0, 0, 3)
' Rng1.Offset(1, 0).Value = Rng1.Offset(1, 0).Value + Range("W8").Value
' Range("W8").Value = ""
' Application.Wait Time + TimeSerial(0, 0, 1)
'Range("W8").Value = Range("W7").Value
'Range("W7").Value = Range("W6").Value
'Range("W8").Value = Range("W5").Value
'Application.Wait Time + TimeSerial(0, 0, 1)
'Range("W5").Value = Range("T7").Value
'Range("W6").Value = Range("W5").Value
'Range("W7").Value = Range("W6").Value
' Range("W8").Value = Range("W7").Value
'End If
'End If
'Nb_Boucle = Nb_Boucle + 1
'If Nb_Boucle = Nbre_Total_Boucl Then Exit Do
'End If
'Loop
'Else
' MsgBox "B1 est vide !"
' End If
'.Range("b7:t7").Value = UniteLavage
'On démarre la procédure de choix aléatoire
Choix_Aleatoire
'Si Satisfait n'est pas atteint on quitte
If Not Satisfait Then Exit Sub
'On détermine la quantité de chaque Plat
i = .[c65000].End(xlUp).Row
Set d = CreateObject("scripting.dictionary")
'On boucle la colonne C
For j = 13 To i
'On incrémente chaque Plat pour déterminer le nombre de chaque
d(.Cells(j, 3).Value) = d(.Cells(j, 3).Value) + 1
Next j
For Each c In d.keys: d(c) = d(c) * UniteLavage: Next c
'On boucle la colonne X
'For j = 2 To 13 Step 2
'If d.exists(.Cells(j, "x").Value) Then .Cells(j, "x").Offset(1).Value = d(.Cells(j, "x").Value)
' Next j
'On ajoute la valeur à B1
.[B3] = WorksheetFunction.Sum([x2:x13])
End With
Loop
End Sub
Je te laisse vérifier ton code. Tu constateras que certaines instructions ne sont pas alignées (With, Do, If, etc.)
merci
mais malheureusement j'ai essyer le code il marche pas j'ai toujours la même erreur
Attention, je ne t'ai pas corrigé le code (je n'ai pas compris grand chose à la logique derrière tes IF, DO, etc).
J'ai simplement indenté le code automatiquement pour que tu vois les endroits où tes instructions ne sont pas alignées !
Un mauvais alignement du code signifie que tu ne fermes pas tes instructions au bon moment/endroit.
ok merci je vais revoir ca merci
Exemple dans ton code, peux-tu nous dire à quel IF correspond le ELSE suivant ?
.
.
.
.
Else
Rng1.Offset(1, 0).Value = Rng1.Offset(1, 0).Value + Range("W8").Value
End If
il coresspond a ce if
If Range("W8").Value <> "" And Rng1.Offset(1, 0).Value = "" Then Application.Wait Time + TimeSerial(0, 0, 4)
Barahaoua a écrit :il coresspond a ce if
If Range("W8").Value <> "" And Rng1.Offset(1, 0).Value = "" Then Application.Wait Time + TimeSerial(0, 0, 4)
Ce qui est faux suivant mon premier post ^^
ok finalement je doit revoir tous cette partis du code si vous avez un peut de temps sil vous plait et vous pouvez m'aidez j'ai poser une nouvelle question ou j'ai expliquer ce que je veux faire
je suis vraiment null en VBA et j'ai besoin de votre aide merci beaucoup les amis
Bonjour, SVP je veux faire ce code vba et je sais pas comment faire
voila ce que je veux c'est un programme qui me fait ca SVP
je veux que lorsque T7 est non vide que mes cellules S1 , S2 et S3 reçoivent la valeur de T7
par exemple pour Plat2 c'est le premié qui resois LA VALEUR DE T7 dans la colonne X donc on doit prendre la valeur de T7 et la mettre dans S3 qui correspond a Plat 2
1 seconde Aprés Plat2 resois encore 53 donc plat2 =106 donc la il faut encore envoyer la valeur de T7 donc S2 se
ra égale a 53
1seconde aprés Plat3 resois 53 donc la cellule S3 qui correspond a Plat3 va resvoir 53
et ainsi de suite jusqu'a le remplissage des S1 si on a un S1 remplie en déclanche une attente de 5 seconde
Regarde stp les senarion que je t'est fait dans cette image et tu va comprendre le principe merci MAZO