Combobox et rechercheV
Bonjour Tout le monde,
J'ai fait un Userform et dedans j'ai un combobox1, ou l'utilisateur recherche le code article et a le resultat dans textbox, et cela fonction bien.
Private Sub ComboBox1_Change()
valeurRecherchee = ""
plageRecherche = Sheets("Bordereau 2023").Range("BORDEREAU")
valeurRecherchee = ComboBox1.Value
resultat = Application.WorksheetFunction.VLookup(valeurRecherchee, plageRecherche, 4, False) 'Libellé
TextBox1.Value = resultat
resultat = Application.WorksheetFunction.VLookup(valeurRecherchee, plageRecherche, 5, False) 'Unité
TextBox2.Value = resultat
resultat = Application.WorksheetFunction.VLookup(valeurRecherchee, plageRecherche, 8, False) 'Prix
resultat = Format(resultat, "0.00")
TextBox3.Value = resultat
End Sub
Mais si je crée un autre combobox2 ou l'utilisateur peut recherché par le libellé j'ai une erreur des le premier resultat
Dans la proprieté j'ai fait, ColumnCount = 4 et BoundColumn=4 et ColumnWidths = 0 pt;0 pt;0 pt;200 pt
Cela me permet d'avoir au niveau de l'affichage la colonne libellé et au niveau du code j'ai :
Private Sub ComboBox2_Change()
valeurRecherchee = ""
plageRecherche = Sheets("Bordereau 2023").Range("BORDEREAU")
valeurRecherchee = ComboBox2.Value
resultat = Application.WorksheetFunction.VLookup(valeurRecherchee, plageRecherche, 1, False) 'code article
TextBox1.Value = resultat
resultat = Application.WorksheetFunction.VLookup(valeurRecherchee, plageRecherche, 5, False) 'Unité
TextBox2.Value = resultat
resultat = Application.WorksheetFunction.VLookup(valeurRecherchee, plageRecherche, 8, False) 'prix
resultat = Format(resultat, "0.00")
TextBox3.Value = resultat
ComboBox2.ColumnWidths
End Sub
Bonjour fathlaur,
À tester :
Private Sub ComboBox2_Change()
Dim RowNo As Variant
valeurRecherchee = ""
plageRecherche = Sheets("Bordereau 2023").Range("BORDEREAU")
valeurRecherchee = ComboBox2.Value
' Utilisez MATCH pour trouver le numéro de ligne de la valeur recherchée dans la colonne 4 (libellé)
RowNo = Application.WorksheetFunction.Match(valeurRecherchee, plageRecherche.Columns(4), 0)
' Utilisez INDEX pour obtenir les valeurs correspondantes dans les autres colonnes
TextBox1.Value = Application.WorksheetFunction.Index(plageRecherche, RowNo, 1) ' code article
TextBox2.Value = Application.WorksheetFunction.Index(plageRecherche, RowNo, 5) ' Unité
TextBox3.Value = Format(Application.WorksheetFunction.Index(plageRecherche, RowNo, 8), "0.00") ' Prix
End SubLa fonction Match retourne la position de la valeur recherchée dans la colonne 4 (libellé) et la fonction Index utilise cette position pour obtenir les valeurs correspondantes dans les autres colonnes.
Bonjour fathlaur, Abderrahlane BENALI,
Petite précision : Il y a une distinction entre appeler une fonction Excel directement depuis l'objet "Application" et l'appeler via la propriété "WorksheetFunction" :
- Dans le premier cas, la variable (obligatoirement de type variant) contenant le résultat vaudra une valeur d'erreur si la fonction n'abouti pas et pourra être interceptée via la fonction IsError(...).
- Dans le second cas la fonction génère une erreur d'exécution (gérable via une instruction "ON ERROR ..." placée avant + la gestion d'erreur associée) si la fonction n'abouti pas.
Private Sub ComboBox2_Change()
Dim RowNo As Variant
valeurRecherchee = ""
plageRecherche = Sheets("Bordereau 2023").Range("BORDEREAU")
valeurRecherchee = ComboBox2.Value
' Utilisez MATCH pour trouver le numéro de ligne de la valeur recherchée dans la colonne 4 (libellé)
RowNo = Application.Match(valeurRecherchee, plageRecherche.Columns(4), 0)
if IsError(RowNo) = False then
' Utilisez INDEX pour obtenir les valeurs correspondantes dans les autres colonnes
TextBox1.Value = Application.WorksheetFunction.Index(plageRecherche, RowNo, 1) ' code article
TextBox2.Value = Application.WorksheetFunction.Index(plageRecherche, RowNo, 5) ' Unité
TextBox3.Value = Format(Application.WorksheetFunction.Index(plageRecherche, RowNo, 8), "0.00") ' Prix
Else
'...
End If
End SubCdlt,
Cylfo
Coucou merci de vos réponses, mais j'ai trouvé ma solution, qui vaut ce qui vaut mais fonctionne, c'est le principale
Je vous mets le Code pour le Combobox1 et Combobox2
Private Sub ComboBox1_Change() ' Recherche Via le Code Article
plageRecherche = Sheets("Bordereau 2023").Range("BORDEREAU")
Dim valeurRecherchee As Variant
valeurRecherchee = ""
On Error Resume Next
valeurRecherchee = ComboBox1.Value
If Not IsError(result) Then
ComboBox1.Value = valeurRecherchee:
Else
Label382.Caption = " ":
End If
TextBox1.Value = ComboBox1.Value
Resultat = Application.WorksheetFunction.VLookup(valeurRecherchee, plageRecherche, 4, False)
TextBox2.Value = Resultat
Resultat = Application.WorksheetFunction.VLookup(valeurRecherchee, plageRecherche, 5, False)
TextBox3.Value = Resultat
Resultat = Application.WorksheetFunction.VLookup(valeurRecherchee, plageRecherche, 8, False)
Resultat = Format(Resultat, "0.00"): TextBox4.Value = Resultat
End Sub
Private Sub ComboBox2_Change() ' Recherche Via le Descriptif
plageRecherche = Sheets("Bordereau 2023").Range("BORDEREAU")
Dim valeurRecherchee As Variant
valeurRecherchee = ""
On Error Resume Next
valeurRecherchee = ComboBox2.Value
If Not IsError(result) Then
ComboBox2.Value = valeurRecherchee:
Else
Label382.Caption = " ":
End If
TextBox2.Value = valeurRecherchee
Resultat = WorksheetFunction.VLookup(valeurRecherchee, Range("Bordereau").Columns("D:E"), 1, False)
positionResultat = WorksheetFunction.Match(Resultat, Sheets("Bordereau 2023").Range("BORDEREAU").Columns("D:D"), 0)
TextBox1.Value = WorksheetFunction.Index(Range("Bordereau").Columns("A"), positionResultat)
TextBox3.Value = WorksheetFunction.Index(Range("Bordereau").Columns("E"), positionResultat)
TextBox4.Value = WorksheetFunction.Index(Range("Bordereau").Columns("I"), positionResultat)
TextBox4.Value = Format(TextBox4.Value, "0.00")
End Sub
Autre petite Question ?
un SpinButton, peut on inversé les valeurs.
Je m'explique, quand on click sur le flèche du haut cela augmente de 1 et flèche du bas diminue de 1, on est d accord
j'aimerai faire l'inverse, fléche du haut -1 fleche du bas 1 ? c'est possible
j'ai bien une solution en codant, mais juste au cas ou dans les propriété ou autre ?
Autre petite Question ?
un SpinButton, peut on inversé les valeurs.
Je m'explique, quand on click sur le flèche du haut cela augmente de 1 et flèche du bas diminue de 1, on est d accord
j'aimerai faire l'inverse, fléche du haut -1 fleche du bas 1 ? c'est possible
j'ai bien une solution en codant, mais juste au cas ou dans les propriété ou autre ?
Pour changer le comportement du SpinButton, vous pouvez simplement soustraire la valeur actuelle de l'objet SpinButton de la valeur maximale plus la valeur minimale. Cela inversera essentiellement la valeur.
Un exemple de code :
Private Sub SpinButton1_SpinUp()
' Lorsque vous cliquez sur le bouton du haut, la valeur diminue
SpinButton1.Value = SpinButton1.Max + SpinButton1.Min - SpinButton1.Value
End Sub
Private Sub SpinButton1_SpinDown()
' Lorsque vous cliquez sur le bouton du bas, la valeur augmente
SpinButton1.Value = SpinButton1.Max + SpinButton1.Min - SpinButton1.Value
End SubDans ce code, SpinButton1.Max est la valeur maximale que peut avoir SpinButton1, et SpinButton1.Min est sa valeur minimale. En soustrayant la valeur actuelle de la somme de ces deux valeurs, vous inversez effectivement l'effet des boutons de rotation.