Extraire une partie de l'élément séléctionné d'une combobox
Bonjour,
j'aurai besoin d'un peu d'aide pour résoudre mon problème !
Ma feuille excel "historique inventaire" est composée de la sorte :
C'est un fichier qui permet de gérer le stock de matériel disponible, et de savoir où il est, quand il a été envoyé, et quand il est revenu.
La macro pour gérer les départs est faite, plus aucun souci là dessus ! (merci au forum de m'avoir pas mal aidée !)
Maintenant le problème est pour gérer les retours!
J'utilise un useform permettant à l'utilisateur de remplir les informations du matériel qui est revenu facilement :
Combobox agence : Combobox1
Combobox n°ordre : Combobox4
Combobox Matériel : Combobox2
Aucun souci pour sélectionner l'agence, le numéro d'ordre, le matériel et la date de retour :
Mon problème est le suivant :
Une fois le bon matériel sélectionné je souhaiterai en cliquant sur le bouton "valider" compléter pour la ligne correspondante, les colonnes L, N, O, et P.
Mon code est le suivant :
Private Sub CommandButton1_Click() 'Validation
Dim cel As Range
If ComboBox2.Value <> "" Then
x = InStr(1, ComboBox2, ":", 1)
End If
On Error Resume Next
With Sheets("Historique reservations")
For Each cel In .Range("A2:A" & Sheets("Historique reservations").Range("A" & Sheets("Historique reservations").Rows.Count).End(xlUp).Row)
If CStr(cel.Value) = ComboBox4 And cel.Offset(0, 1) = ComboBox1 And cel.Offset(0, 15).Value <> "Oui" Then
MsgBox cel.Offset(0, 15).Value
''''''Jusque là tout est bon
If cel.Offset(0, 2).Value = "Interne" Then
If cel.Offset(0, 4).Value = Left(ComboBox2, x - 1) Then ''''''mais ici ça ne fonctionne pas. la boucle se lance même si la condition n'est pas vérifiée ...
cel.Offset(0, 11).Value = TextBox6.Value 'Date de réception réelle
cel.Offset(0, 15).Value = "Oui" 'location finie
cel.Offset(0, 14).Value = DateDiff("w", cel.Offset(0, 7), TextBox6) 'Duree location
cel.Offset(0, 13).Value = TextBox5 'Observations
End If
Else
If cel.Offset(0, 5).Value = Left(ComboBox2, x - 1) Then
cel.Offset(0, 11).Value = TextBox6.Value 'Date de réception réelle
cel.Offset(0, 15).Value = "Oui" 'location finie
cel.Offset(0, 14).Value = DateDiff("w", cel.Offset(0, 7).Value, TextBox6.Value) 'Duree location
MsgBox cel.Offset(0, 7).Value
cel.Offset(0, 13).Value = TextBox5 'Observations
End If
End If
End If
Next cel
End With
ComboBox2.RemoveItem ComboBox2.ListIndex 'suppression du matériel dans la combobox
ComboBox2.Value = ""
If ComboBox2.ListCount = 0 Then 'si la liste matériel est vide
ComboBox4.RemoveItem ComboBox4.ListIndex 'alors on enlève la valeur sélectionnée de la liste n° d'ordre
ComboBox4.Value = ""
End If
End SubMon problème survient à la ligne :
If cel.Offset(0, 4).Value = Left(ComboBox2, x - 1) ThenMême si la condition n'est pas vérifiée la boucle se lance ! Donc je pense qu'il doit y avoir un beug dans la syntaxe, mais je suis un peu perdue !
Si quelqu'un à la solution je suis preneuse ! :)
Merci !
Bonjour,
Vous devriez écrire un livre
Voici cependant un essai :
If ComboBox2 like cel.Offset(0, 4).Value & "*" ThenCdlt,
Bonjour,
J'ai voulu expliquer un maximum parce que des fois on me reproche de pas exposer tous les détails ...
Du coup non ça n'est pas la bonne solution, car je ne prend pas toute la valeur de la combobox 2, mais seulement ce qui est avant les ":" dans l'item
If ComboBox2.Value <> "" Then
x = InStr(1, ComboBox2, ":", 1)c'est pour ça que sur la ligne qui pose problème j'ai mis :
If cel.Offset(0, 4).Value = Left(ComboBox2, x - 1) Thendu coup j'ai adapté votre proposition et mis :
If Left(ComboBox2, x - 1) Like cel.Offset(0, 4).Value & "*" ThenMais le problème reste le même ...
Je serais curieuse de savoir à quoi sert le : & "*"
L'opérateur Like permet de faire une comparaison de correspondance partielle :
A & "*" >>> commence par la valeur de la variable A
"*" & B & "*" >>> contient la valeur de la variable B
"*texte" >>> termine par le mot "texte" (sans variable ici pour que vous saisissiez).
"*" est un métacaractère signifiant tous caractères quelconques (0 ou plus)
"?" est un métacaractère signifiant un unique caractère quelconque (unique ou nul je ne sais plus).
"#" est un métacaractère signifiant un chiffre (équivalent de "[0-9]")
Donc "[a-d]*" signifie commence par une lettre entre a et d par exemple.
Voilà pour l'essentiel...
If ComboBox2 like cel.Offset(0, 4).Value & "*" Thenveut dire : la valeur de la combobox2 commence par la valeur de la cellule à 4 colonnes de cel. J'ai peut-être répondu un peu vite, je vérifierais quand j'aurai plus de temps si une subtilité ne m'a pas échappée mais cela revient à utiliser Instr et left.
Cdlt,
D'accord merci pour ces explications !
Ca marche très bien comme ça ! merci beaucoup!