erreur dans mon code VBA

Y compris Power BI, Power Query et toute autre question en lien avec Excel
v
vba-new
Passionné d'Excel
Passionné d'Excel
Messages : 3'003
Appréciations reçues : 2
Inscrit le : 13 mai 2009
Version d'Excel : 2010 FR - 2013 FR

Message par vba-new » 3 juin 2016, 16:15

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.)
vba-new
B
Barahaoua
Membre habitué
Membre habitué
Messages : 124
Inscrit le : 19 mai 2016
Version d'Excel : 2007

Message par Barahaoua » 3 juin 2016, 16:27

merci
mais malheureusement j'ai essyer le code il marche pas j'ai toujours la même erreur :( :?
v
vba-new
Passionné d'Excel
Passionné d'Excel
Messages : 3'003
Appréciations reçues : 2
Inscrit le : 13 mai 2009
Version d'Excel : 2010 FR - 2013 FR

Message par vba-new » 3 juin 2016, 16:36

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.
vba-new
B
Barahaoua
Membre habitué
Membre habitué
Messages : 124
Inscrit le : 19 mai 2016
Version d'Excel : 2007

Message par Barahaoua » 3 juin 2016, 16:38

ok merci je vais revoir ca merci :)
v
vba-new
Passionné d'Excel
Passionné d'Excel
Messages : 3'003
Appréciations reçues : 2
Inscrit le : 13 mai 2009
Version d'Excel : 2010 FR - 2013 FR

Message par vba-new » 3 juin 2016, 16:39

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
vba-new
B
Barahaoua
Membre habitué
Membre habitué
Messages : 124
Inscrit le : 19 mai 2016
Version d'Excel : 2007

Message par Barahaoua » 3 juin 2016, 16:40

il coresspond a ce if

If Range("W8").Value <> "" And Rng1.Offset(1, 0).Value = "" Then Application.Wait Time + TimeSerial(0, 0, 4)
Avatar du membre
d3d9x
Membre dévoué
Membre dévoué
Messages : 950
Appréciations reçues : 2
Inscrit le : 14 avril 2015
Version d'Excel : 2007

Message par d3d9x » 3 juin 2016, 16:53

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 ^^
“En temps de paix, les fils ensevelissent leurs pères ; en temps de guerre, les pères ensevelissent leurs fils. Sommes-nous en guerre Père?”
B
Barahaoua
Membre habitué
Membre habitué
Messages : 124
Inscrit le : 19 mai 2016
Version d'Excel : 2007

Message par Barahaoua » 3 juin 2016, 17:02

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
B
Barahaoua
Membre habitué
Membre habitué
Messages : 124
Inscrit le : 19 mai 2016
Version d'Excel : 2007

Message par Barahaoua » 7 juin 2016, 10:14

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
1.PNG
2.PNG
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message