Problème liste déroulante VBA
Bonjour,
Mon problème est celui-ci: j'ai un userform qui sert à commander du vin,j'ai donc une liste par type de vin(rouge,crémant,riesling,gewurtz.) ,puis une liste nom de vin qui s'alimente en fonction du type de vin choisi comme le montre le code ci-après
Lorsque l'utilisateur choisit un type de vin puis un nom de vin,mais que à nouveau il change de type de vin,la liste nomvin garde le nom du vin choisit (qui correspond au type précédent).
Par exemple,si l'utilisateur choisit "vin rouge",il a le choix entre le ptit bacchus,le grand duché,le roc des anges...imaginons qu'il sélectionne du grand duché;:mais que juste après il change de type pour du crémant,"le grand duché" reste toujours affiché dans la liste de nom(même si la liste s'alimente bien une fois qu'on clique sur la flèche de côté).
Je ne sais pas si c'est très clair,au cas où demandez-moi plus de précisions
Merci pour votre aide
Voici mon code
Private Sub TypeVin_Change()
'incrémentation liste de noms de vins en fonction du type de vin choisi
If AchatVin1.TypeVin.Value = "Vin Rouge" Then
AchatVin1.NomVin.RowSource = "achat!B14:B16"
ElseIf AchatVin1.TypeVin.Value = "Crémant" Then
AchatVin1.NomVin.RowSource = "achat!B17:B18"
ElseIf AchatVin1.TypeVin.Value = "Riesling" Then
AchatVin1.NomVin.RowSource = "achat!B19:B21"
ElseIf AchatVin1.TypeVin.Value = "Gewurztraminer" Then
AchatVin1.NomVin.RowSource = "achat!B22:B24"
End If
End Sub
Bonjour, (ou plutôt re-)
Comme précisé dans ta 1ère question, un fichier exemple nous aiderait bien plus pour t'aider...
En effet, on ne connaît pas le type d'objet "NomVin" (combobox, listbox....)
Bref, à l'avenir, pense à joindre un fichier
Bonne journée
Bonjour
Sans fichier test pas facile
Essayes
Private Sub TypeVin_Change()
'incrémentation liste de noms de vins en fonction du type de vin choisi
If AchatVin1.TypeVin.Value = "Vin Rouge" Then
AchatVin1.NomVin.RowSource = "achat!B14:B16"
ElseIf AchatVin1.TypeVin.Value = "Crémant" Then
AchatVin1.NomVin.RowSource = "achat!B17:B18"
ElseIf AchatVin1.TypeVin.Value = "Riesling" Then
AchatVin1.NomVin.RowSource = "achat!B19:B21"
ElseIf AchatVin1.TypeVin.Value = "Gewurztraminer" Then
AchatVin1.NomVin.RowSource = "achat!B22:B24"
End If
AchatVin1.NomVin.ListIndex = -1
End SubBonjour,
En changeant les plages voici un exemple.
Private Sub UserForm_Initialize()
Me.cboVins.AddItem "Rouge"
Me.cboVins.AddItem "Crément"
Me.cboVins.AddItem "Riesling"
Me.cboVins.AddItem "Gewurztraminer"
End Sub
Private Sub cboVins_Change()
If Me.cboVins.ListIndex = 0 Then Me.ListBox1.RowSource = Sheets("Feuil1").Range("A2:A3").Address
If Me.cboVins.ListIndex = 1 Then Me.ListBox1.RowSource = Sheets("Feuil1").Range("B2:B3").Address
If Me.cboVins.ListIndex = 2 Then Me.ListBox1.RowSource = Sheets("Feuil1").Range("C2:C3").Address
If Me.cboVins.ListIndex = 3 Then Me.ListBox1.RowSource = Sheets("Feuil1").Range("D2:D3").Address
End SubBonjour,
.t,"le grand duché" reste toujours affiché dans la liste de nom(même si la liste s'alimente bien une fois qu'on clique sur la flèche de côté)
Sans fichier, je pense que ton souci vient de l'utilisation de Rowsource car au moment où tu choisis une autre type de vin Rowsource n'est pas vide.
Cette propriété est facile d'accès mais provoque les soucis que tu décris si tu ne prévois pas de la vider au préalable. Pour ma part je l'évite toujours d'autant qu'elle ne fonctionne pas toujours.
Je ferai plutôt ceci comme code :
Private Sub TypeVin_Change()
'incrémentation liste de noms de vins en fonction du type de vin choisi
With AchatVin1
If .Typevin.Value = "Vin Rouge" Then
.Nomvin.List = Sheets("achat").Range("B14:B16")
ElseIf .Typevin.Value = "Crémant" Then
.Nomvin.List = Sheets("achat").Range("B17:B18")
ElseIf .Typevin.Value = "Riesling" Then
.Nomvin.List = Sheets("achat").Range("B19:B21")
ElseIf .Typevin.Value = "Gewurztraminer" Then
.Nomvin.List = Sheets("achat").Range("B22:B24")
End If
End With
End SubA voir si c'est bien cela le souci car sans fichier....
Amicalement
Re,
Il semblerait que avec ce code
If AchatVin1.TypeVin.Value = "Vin Rouge" Then
AchatVin1.NomVin.Value = Null
AchatVin1.NomVin.RowSource = "achat!B14:B16"cela marche! Je vous remercie de votre aide quand même
Ah et promis la prochaine fois je penserai à mettre un fichier exemple.
Après avoir lu cette rubrique, je suis tombé inopinément sur une réponse possible, que je veux partager avec vous:
Désolé si cela ne faisait pas l'affaire, pour une raison ou une autre.
Edit Dan : Lien publicitaire supprimé. En cas d'une demande, merci d'ouvrir un nouveau fil de discussion. Celui-ci ayant été cloturé par son auteur (estelle54)