Probleme sur une boucle

Bonjour,

J'ai le code ci-dessous qui est une boucle qui cherche une valeur dans un tableau, l'affiche dans une boite de dialogue, l'utilisateur doit alors compléter une donnée liée à la valeur affichée. Cette valeur saisie est alors entrée dans une case du tableau. Ceci est répété jusqu'a ce qu'on arrive à la fin du tableau.

J'ai un problème avec ma boucle mais je ne vois pas où... je dois avoir un problème de syntaxe. Je débute en VBA....

Merci pour votre aide!!

Private Sub valide_commande_Click()

Dim i As Integer
Dim Tbl() As Double
Dim J As Integer
Dim article As String
Dim texte As String
Dim Rdm As String
ReDim Preserve Tbl(1 To J)

Worksheets("stock RDM").Unprotect
'
   Worksheets("stock RDM").ListObjects("Tableau14").Range.AutoFilter Field:=5, Criteria1:= _
   Me.commande

clig = Worksheets("stock rdm").Range("E" & Rows.Count).End(xlUp).Row

  For lig = 5 To clig
  J = lig - 4
  article = "article"
    If Cells(lig, 4) <> "" Then
        Next lig
    Else
        Tbl(J) = Cells(lig, 6)
        texte = article & Tbl(J)
        Rdm = InputBox(texte, "attribution SN")
        Cells(lig, 4) = Rdm
   ElseIf lig < clig Then
Next lig
   Else: Exit For
    End If

End Sub

Bonsoir,

le For To Next doit englober l'ensemble des commandes en général, on ne fait pas des "If" pour faire le Next, c'est donc bien une erreur de structure de code.
sans fichier, voici une proposition :

Private Sub valide_commande_Click()

Dim i As Integer
Dim Tbl() As Double
Dim J As Integer
Dim article As String
Dim texte As String
Dim Rdm As String
ReDim Preserve Tbl(1 To J)

    Worksheets("stock RDM").Unprotect
    Worksheets("stock RDM").ListObjects("Tableau14").Range.AutoFilter Field:=5, Criteria1:= _
       Me.commande

    clig = Worksheets("stock rdm").Range("E" & Rows.Count).End(xlUp).Row

    For lig = 5 To clig
        J = lig - 4
        article = "article"
        If Cells(lig, 4) = "" Then
            Tbl(J) = Cells(lig, 6)
            texte = article & Tbl(J)
            Rdm = InputBox(texte, "attribution SN")
            Cells(lig, 4) = Rdm
        End If
    Next lig

End Sub

votre erreur je dirais c'est d'avoir tester si la cellule est différente de rien alors NEXT, si on fait Next quand c'est différent de rien c'est que l'on exécute un code si c'est égale à rien. A voir donc...

Avant de tester, faites une copie de votre fichier

@ bientôt

LouReeD

bonjour Lauguste75, LouReeD,

il y a aussi un problème avec Tbl, au moment du Redim, J est 0 (error) et plus loin il n'y a plus de "Redim", mais vous ne l'utilisez pas, alors supprimer ?

Bonjour,

Bien vu BsAlv ! Alors une petit correction en proposition (mais toujours sans savoir ce qui se passe derrière car pas de fichier...) :

Private Sub valide_commande_Click()

Dim i As Integer
Dim Tbl(1 to 1) As Double
Dim J As Integer
Dim article As String
Dim texte As String
Dim Rdm As String

    Worksheets("stock RDM").Unprotect
    Worksheets("stock RDM").ListObjects("Tableau14").Range.AutoFilter Field:=5, Criteria1:= _
       Me.commande

    clig = Worksheets("stock rdm").Range("E" & Rows.Count).End(xlUp).Row

    For lig = 5 To clig
        J = lig - 4
        article = "article"
        If Cells(lig, 4) = "" Then
            Tbl(J) = Cells(lig, 6)
            texte = article & Tbl(J)
            Rdm = InputBox(texte, "attribution SN")
            Cells(lig, 4) = Rdm
            ReDim Preserve Tbl(1 To J + 1)
        End If
    Next lig

End Sub

Mais comme l'a suggéré BsAlv, il ne sert à rien alors autant le supprimer

@ bientôt

LouReeD

Bonjour,

Désolé je n'ai pas pris le temps de répondre. J'ai finalement fait comme cela avec vos remarques.

Merci!

 clig = Worksheets("stock rdm").Range("E" & Rows.Count).End(xlUp).Row

   ref_article.Show

    For lig = 5 To clig

        J = lig - 4
        ReDim Preserve Tbl(1 To J)
        article = "article"
        If Cells(lig, 5) = Me.commande And Cells(lig, 5) = ref_arti And Cells(lig, 4) = "" Then

    'ouvre un boite de dialogue pour saisir le numéro de série du RDM reçu et l'ajoute au tableau

            Tbl(J) = Cells(lig, 6)
            texte = article & Tbl(J)
patte:
            Rdm = InputBox(texte, "attribution SN", vbOKOnly)

If Rdm = "" Then
 pomme = MsgBox("Vous devez entrer numéro de série", vbOKCancel)
 If pomme = "2" Then
 Exit Sub
 End If
 GoTo patte
End If
Rechercher des sujets similaires à "probleme boucle"