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 SubBonsoir,
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 Subvotre 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 SubMais 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