Problème avec boucle VBA
Bonjour,
Lors de l'execution d'une macro en boucle dans mon userform, je ne parviens pas a obtenir le résultat voulu. J'ai une liste de prénom en A, une liste de nom en B. Dans mon userform , je selectionne nom et prénom. ensuite une macro s'execute pour touver les valeures correspondant a cette personne. Mais la boucle afficche toujour le même commentaire
For essai = 6 To Range("B65536").End(xlUp).Row
For j = 1 To 5
If Cells(essai, "B").Offset(j - 1, 0) Like NomSTCom And Cells(essai, "A").Offset(j - 1, 0) = LotSTCom Then
Me.Controls("Textbox" & j) = .Cells(essai, "C").Offset(j - 1, 0)
Me.Controls("Textbox" & 5 + j) = .Cells(essai, "D").Offset(j - 1, 0)
End If
Next j
Next essai
Merci de votre aide
vinny
Bonjour,
Il faudrait que tu nous dise quel résultat tu souhaite avoir ? Tu as 5 TextBox pour des essais positifs et 5 pour des essais négatifs alors qu'il n'y a qu'une réponse de chaque pour le nom et prénom correspondant ?
Hervé.
Non il peux y avoir jusqu'a 10 (=2*5) réponse de chaque pour le nom et prénom.
Dans mes text box 1 et 6 je souhaite avoir les résultats de la 1er ligne correspondant.
Dans mes text box 2 et 7 je souhaite avoir les résultats de la 2er ligne correspondant....
Je pense déja que le code suivant est plus cohérent (inversement des boubles J et essai)
For j = 1 To 5
For essai = 6 To Range("B65536").End(xlUp).Row
If Cells(essai, "B").Offset(j - 1, 0) Like NomSTCom And Cells(essai, "A").Offset(j - 1, 0) = LotSTCom Then
Me.Controls("Textbox" & j) = .Cells(essai, "C").Offset(j - 1, 0)
Me.Controls("Textbox" & 5 + j) = .Cells(essai, "D").Offset(j - 1, 0)
End If
Next essai
Next j
vinny
Bonjour
J'avais "bricolé" un peu ton fichier sur l'autre post
https://forum.excel-pratique.com/excel/incompatibilite-de-type-t25796.html
A essayer
J'ai un problème en adaptant a mon fichier.
Les text box sont de 5 a 14 (5->9 positif, 10->14 négatif) et les combobox sont 1 et 3
Private Sub Image6_Click()
'Afficher commentaires
Dim Num As Byte
Dim Z As Long
If Me.ComboBox1.ListIndex = -1 Then Exit Sub
For Num = 5 To 14
Me.Controls("Textbox" & Num) = ""
Next Num
Num = 5
With Sheets("Commentaires")
For Z = 9 To .Range("B65536").End(xlUp).Row
If .Cells(Z, "B") Like ComboBox1 And Cells(Z, "A") = ComboBox3 Then
Me.Controls("TextBox" & Num) = .Cells(Z, "C")
Me.Controls("TextBox" & 5 + Num) = .Cells(Z, "D")
Num = Num + 1
If Num = 10 Then Exit Sub
End If
Next Z
End With
End Sub
merci de me dire ou est l'erreur si vous la voyez
Bonjour
sans connaitre ton fichier ni ton nouveau Userform
Il faudrait dire ce qui ne passe pas
A première vue il n'y a pas de problème a part le . (point) devant
If .Cells(Z, "B") Like ComboBox1 And.Cells(Z, "A") = ComboBox3 Then
Expliques un peu mieux ton problème et joins ton fichier anonymisé
Merci c'était le point! il en faut vraiment peu pour que ca bloque!
En faite il y a quand meme un dernier problème.
Avant il etait pssible d'ajouter un prénom(qui n'est pas dans la liste), j'ai un peux de mal avec le code que vous avez corriger.
avant quand j'ajoutait un prénom, celui ci s'ajoutait en bas des commentaires
avant :
NomSTCom = Me.ComboBox1.Value
With Sheets("Commentaires")
Lg = .Range("B" & Rows.Count).End(xlUp).Row + 1 ' 1ère ligne vide
Set Com = .Columns(2).Find(NomSTCom, LookIn:=xlValues, LookAt:=xlWhole)
If Not Com Is Nothing Then
'premier commentaire positif sur le sous traitant selectionnée dans la liste
.Cells(Com.Row, "A") = ComboBox3
.Cells(Com.Row, "C") = TextBox5
.Cells(Com.Row, "D") = TextBox10
'deuxième commentaire positif sur le sous traitant selectionnée dans la liste
If .Range("B" & Com.Row).Offset(1, 0) = NomSTCom Then
.Cells(Com.Row, "A").Offset(1, 0) = ComboBox3
.Cells(Com.Row, "C").Offset(1, 0) = TextBox6
.Cells(Com.Row, "D").Offset(1, 0) = TextBox11
Else
If Me.TextBox6 <> "" Or Me.TextBox11 <> "" Then
.Cells(Lg, "A") = ComboBox3
.Cells(Lg, "B") = NomSTCom
.Cells(Lg, "C") = TextBox6
.Cells(Lg, "D") = TextBox11
Lg = Lg + 1
End If
End If
maintenant :
With Sheets("Commentaires")
LgDer = .Range("B" & Rows.Count).End(xlUp).Row ' Dernière ligne
For J = 9 To LgDer
If .Cells(J, "B") Like NomSTCom And .Cells(J, "A") = LotSTCom Then
' Trouvé la ligne
Lg = J
For K = 5 To 9
If Me.Controls("TextBox" & K) <> "" Or Me.Controls("TextBox" & 5 + K) <> "" Then
If Not (.Cells(Lg, "B") Like NomSTCom) Or .Cells(Lg, "A") <> LotSTCom Then
Lg = LgDer + 1
LgDer = LgDer + 1
End If
.Cells(Lg, "A") = LotSTCom
.Cells(Lg, "B") = NomSTCom
.Cells(Lg, "C") = Me.Controls("TextBox" & K)
.Cells(Lg, "D") = Me.Controls("TextBox" & 5 + K)
Lg = Lg + 1
End If
Next K
Exit For
'else en bas nouveau st/lot
End If
Next J
merci d'vances pour vos explications