Userform relation Combobox

Bonsoir,

J'ai un formulaire Userform pour remplir un tableau,

Lorsque je rentre le code barre dans la première combobox, l'ensemble de mes textbox se pre-replisse suivant les valeurs de la même ligne du tableau, ca ca fonctionne même si je suis en train de remanier un peu mes codes.

Mais mon problème c'est que si j'ai une ligne avec un code barre 54321, et que je rentre un code barre 51234 il me pre-rempli mes textbox avec la ligne du code barre 54321 parce qu'il prend en compte uniquement le premier chiffre.

C'est pour l'onglet produit stock du tableau joint, avec le userform1

Merci!

Salut MaxXx39,

Ce n'est pas un problème de reconnaissance mais de calcul pour le n° de ligne !
Remplace :

Ligne = Me.ComboBox1.ListIndex + 2

Par :

Ligne = Me.ComboBox1.ListIndex + 1

Baboutz

Merci du retour!

Mais mon problème reste inchangé...

Si j'ai un code 1001 et que je tape 1002 je vois dans mes textbox les valeurs de 1001...

Ohlala j'ai dit une boulette en plus, le code était bon

En mettant des codes barres comme tu l'as dit, aucun soucis de mon côté

image image

Je me suis emmêlé les pinceaux dans toutes mes versions,

En faite j'aimerais ajouter un contrôle,

Si le code ecris dans la combobox1 n'existe pas dans la colonne A du classeur ProduitStock,

Alors ne rien ecrire dans textbox,

sinon se code

   ComboBox2 = Ws.Cells(Ligne, "B")

   For I = 1 To 4
      Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I + 2)
   Next I

Au début de ta procédure :

If Combobox2 = "" Then Exit Sub

?

Le truc c'est que aujourd'hui :

Dans mon tableau :

1001 AA aa
1002 BB bb

Si j'ecris

1003 dans combobox

il va ecrire

1003 AA aa

Ahh, d'accord, c'était pas très clair, maintenant j'ai compris !

Tu peux bloquer la saisie de la Combobox2 comme ça l'utilisateur choisi uniquement les valeurs disponibles.

Si tu veux garder l'aspect d'écrire dans la Combobox2, je regarderai demain.

Bonne soirée,

Baboutz

La c'est moi qui n'ai pas tout compris :P

Tu as écrit :

Si j'ecris

1003 dans combobox

Donc j'en déduis que tu tapes avec ton clavier le code barre souhaité dans ta Combobox2. Or, tu peux empêcher l'utilisateur de taper dans la Combobox2, tu ne peux lui faire que dérouler la liste qu'elle contient !

En faite c'est pour gerer les stock d'un salon de coiffure, et je gere ca avec une douchette.

Lorsque je vends un produit,
je lance mon userform, je me place sur la combobox1 et je scan le code barre avec la douchette (elle écrit le code barre entier puis entree)
Je retrouve toutes mes infos dans mes textbox si le produit existe dans les stocks, j'ecris mes infos complementaire (prix, qte, date, mode de payement) dans l'onglet Vente, Ca c'est OK,

Lorsque je recois des produits a mettre dans mon stock, Achat
je lance mon userform, je me place sur la combobox1 et je scan le code barre avec la douchette
Je retrouve toutes mes infos dans mes textbox si le produit existe dans les stocks, j'ecris mes infos complementaire (qte, date) dans l'onglet Achat, Ca c'est OK,

MAIS si c'est la premiere fois que je reçois se produit
- Soit je le sais, je scan dans ma combobox et onglet nouveau produit pour l'ajouter a mes produits, la est le problème si 1003 n'est pas dans la base stock il va m'inscrire les valeur de 1001 dans mes textbox....
- Soit je ne le sais pas, et la c'est pire mes textbox sont toutes rempli d'informations fausses (si je scan 1003 j'ai les infos de 1001) et donc je clic sur achat et il me créé un nouveau produit avec les donnée d'un produit existant...

J'espère avoir été clair...

Salut MaxXx39,

Bien compris. Je te propose d'utiliser la méthode find comme ceci :

    'Déclaration des variables
    Dim recherche As Variant

    'Si le contenu de la ComboBox n'est pas égale à 4 caractères, sort de la procédure
    If Len(ComboBox2) <> 4 Then Exit Sub

    'Recherche dans 'TableauStock' la présence ou non du code barre
    Set recherche = Worksheets("Outillages").Range("TableauStock[Code Barre]").Find(What:=ComboBox2.value)

    'Si le code barre n'existe pas, affiche un message et sort de la procédure
    If recherche Is Nothing Then Msgbox "Ce code barre n'existe pas.": Exit Sub

Ensuite, il ne te reste qu'à récupérer la ligne du code barre avec recherche.Row et à alimenter tes TextBox !

Merci je vais potasser ca,

Par contre c'est combobox1 et non 2?

Et je dois le mettre ou du coup le code?

Et qu'appelle tu par 'sort de la procèdure'?

Merci!!

Re,

Par contre c'est combobox1 et non 2?

ComboBox 1 ou 2, je ne sais plus, ça dépend du nom de votre ComboBox...

Et je dois le mettre ou du coup le code?

Dans ComboBox1_Change() (ou 2, à toi de vérifier)

Et qu'appelle tu par 'sort de la procèdure'?

Et bien ça :

Sub test()

...

...

End Sub

Est une procédure.
Donc Exit Sub permet de quitter cette procédure !

Je viens seulement de tester le code,

Merci!

Par contre, pour le message d'erreur pas de problème, pour la sortie s'il ne trouve rien ca ne me convient pas car s'il trouve rien dans la base je veux créer un produit, donc il m'affiche le message c'est ok,mais il faudrais qu'il n'execute pas le remplissage des textboxs (aujourd'hui si j'ai 1001 dans la base et pas 1002, en tapant juste 1 ou 10 ou 100 ou 1002 il m'écrit dans les textbox les infos de 1001)

(J'ai des code barres a 12 et 13 chiffres)

Merci!

Private Sub ComboBox1_Change()
    'Déclaration des variables
    Dim recherche As Variant
' debut controle
    'Si le contenu de la ComboBox n'est pas égale à 4 caractères, sort de la procédure
   ' If Len(ComboBox1) <> 4 Then Exit Sub

    'Recherche dans 'TableauStock' la présence ou non du code barre
    Set recherche = Worksheets("Produit - Stock").Range("TableauStock[Code Barre]").Find(What:=ComboBox1.Value)

    'Si le code barre n'existe pas, affiche un message et sort de la procédure
    If recherche Is Nothing Then MsgBox "Ce code barre n'existe pas." ': Exit Sub
    'fin controle
   Dim Ligne As Long
   Dim i As Integer

   If Me.ComboBox1.ListIndex = -1 Then Exit Sub

   Ligne = Me.ComboBox1.ListIndex + 2

   ComboBox2 = Ws.Cells(Ligne, "B")

   For i = 1 To 4
      Me.Controls("TextBox" & i) = Ws.Cells(Ligne, i + 2)
   Next i

End Sub

Salut,
C'est pour ça que j'avais écrit : Exit Sub que tu as mis en commentaire... Je te rajoute LookAt:=XlWhole afin de corriger ton problème. Renseigne toi sur la méthode find ici c'est bien expliqué.

    Dim recherche As Variant
    Dim ligne as Integer

    'Si le contenu de la ComboBox n'est pas égale à 4 caractères, sort de la procédure
    If Len(ComboBox1) < 4 Then Exit Sub 'À ajuster en fct de tes codes barres, si 12/13 caractères alors <12

    'Recherche dans 'TableauStock' la présence ou non du code barre
    Set recherche = Worksheets("Produit - Stock").Range("TableauStock[Code Barre]").Find(What:=ComboBox1.Value, LookAt:=XlWhole)

    'Si le code barre n'existe pas, affiche un message et sort de la procédure
    If recherche Is Nothing Then MsgBox "Ce code barre n'existe pas.": Exit Sub

   Ligne = recherche.Row

   ComboBox2 = Ws.Cells(Ligne, "B")

   For i = 1 To 4
      Me.Controls("TextBox" & i) = Ws.Cells(Ligne, i + 2)
   Next i

Merci!

Interessant, ca commence a fonctionner cmme je souhaite.

J'aimerais ajouter un :

Si recherche = rien exit, SINON "ma procédure"

Mais je ne trouve pas de end If dans le code

Private Sub ComboBox1_Change()
    'Déclaration des variables
    Dim recherche As Variant
    Dim ligne As Integer

    'Si le contenu de la ComboBox n'est pas égale à 4 caractères, sort de la procédure
    If Len(ComboBox1) < 13 Then Exit Sub 'À ajuster en fct de tes codes barres, si 12/13 caractères alors <12

    'Recherche dans 'TableauStock' la présence ou non du code barre
    Set recherche = Worksheets("Produit - Stock").Range("TableauStock[Code Barre]").Find(What:=ComboBox1.Value, LookAt:=xlWhole)

    'Si le code barre n'existe pas, affiche un message et sort de la procédure
    If recherche Is Nothing Then MsgBox "Ce code barre n'existe pas.": Exit Sub
   'Sinon
   Else

   ligne = recherche.Row

   ComboBox2 = Ws.Cells(ligne, "B")

   For i = 1 To 4
      Me.Controls("TextBox" & i) = Ws.Cells(ligne, i + 2)
   Next i
End If
End Sub
 If recherche Is Nothing Then MsgBox "Ce code barre n'existe pas.": Exit Sub

Cette ligne c'est comme si c'était écrit comme ça :

 If recherche Is Nothing Then
   MsgBox "Ce code barre n'existe pas."
   Exit Sub
Else
   'Remplissage TextBox
End If

Donc pas besoin d'ajouter de else et end if, tqt pas le code s'effectuera comme tu le souhaites

Justement dans mon code avec Else dès que j'écris quelque chose dans la combobox, il me met en erreur, Else sans If?

Private Sub ComboBox1_Change()
    'Déclaration des variables
    Dim recherche As Variant
    Dim ligne As Integer

    'Si le contenu de la ComboBox n'est pas égale à 4 caractères, sort de la procédure
    If Len(ComboBox1) < 13 Then Exit Sub 'À ajuster en fct de tes codes barres, si 12/13 caractères alors <12

    'Recherche dans 'TableauStock' la présence ou non du code barre
    Set recherche = Worksheets("Produit - Stock").Range("TableauStock[Code Barre]").Find(What:=ComboBox1.Value, LookAt:=xlWhole)

    'Si le code barre n'existe pas, affiche un message et sort de la procédure
    If recherche Is Nothing Then MsgBox "Ce code barre n'existe pas.": Exit Sub
   'Sinon
   Else

   ligne = recherche.Row

   ComboBox2 = Ws.Cells(ligne, "B")

   For i = 1 To 4
      Me.Controls("TextBox" & i) = Ws.Cells(ligne, i + 2)
   Next i
End If
End Sub

Correction :

Private Sub ComboBox1_Change()
    'Déclaration des variables
    Dim recherche As Variant
    Dim ligne As Integer

    'Si le contenu de la ComboBox n'est pas égale à 4 caractères, sort de la procédure
    If Len(ComboBox1) < 13 Then Exit Sub 'À ajuster en fct de tes codes barres, si 12/13 caractères alors <12

    'Recherche dans 'TableauStock' la présence ou non du code barre
    Set recherche = Worksheets("Produit - Stock").Range("TableauStock[Code Barre]").Find(What:=ComboBox1.Value, LookAt:=xlWhole)

    'Si le code barre n'existe pas, affiche un message et sort de la procédure
    If recherche Is Nothing Then
    MsgBox "Ce code barre n'existe pas."
    Exit Sub

   'Sinon
   Else

   ligne = recherche.Row

   ComboBox2 = Ws.Cells(ligne, "B")

   For i = 1 To 4
      Me.Controls("TextBox" & i) = Ws.Cells(ligne, i + 2)
   Next i
End If
End Sub
Rechercher des sujets similaires à "userform relation combobox"