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 
capture

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 jaune les parties qui ont une bonne structure

En entouré l'instruction qui n'a pas lieu d'être selon moi.

capture

merci

j'ai modifier se que tu ma dit

et j'ai encore la méme erreur mais dans un autre endroit

merci

capture

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

20simulation4.xlsm (69.57 Ko)

mes amis aidez moi svp j'ai tous essayer mais j'ai toujours l'erreur svp

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 j'esseai de le refaire

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

2 1
Rechercher des sujets similaires à "erreur mon code vba"