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 :

capture2 capture3

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 :

capture4

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 :

capture5

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 Sub

Mon problème survient à la ligne :

If cel.Offset(0, 4).Value = Left(ComboBox2, x - 1) Then

Mê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 . En tout cas, je n'ai pas eu le courage de vous lire en entier, entre les images, le code...

Voici cependant un essai :

If ComboBox2 like cel.Offset(0, 4).Value & "*" Then

Cdlt,

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) Then

du coup j'ai adapté votre proposition et mis :

If Left(ComboBox2, x - 1) Like cel.Offset(0, 4).Value & "*" Then

Mais 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 & "*" Then

veut 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!

Rechercher des sujets similaires à "extraire partie element selectionne combobox"