Microsoft 365 Combobox en cascade sans doublon

bibbip35

XLDnaute Occasionnel
Bonjour à toute la communauté !

Je viens vers sur un sujet qui je sais a du être abordé plusieurs fois mais sur lequel je ne m'en sors pas
et que je ne comprends pas

J'ai un créer un userform avec 2 combobox pour mettre des défauts en sortie de prélèvement
La combo box 1 et 3 sont alimentés par la feuille "Code default"

Combobox 1 faisant appel à la colonne B du tableau
Combobox 3 faisant appel à la colonne D du tableau selon valeur de la combobox 1

Et avec les particularités suivantes :
Liste sans doublon
Verrouiller la combobox 3 tant que la combobox 1 n'a pas de valeur

Je vous joint un fichier et espérant avoir été clair:)

Je vous remercie par avance pour votre aide

Bibbip35
 

Pièces jointes

  • Test BIBBIP35.xlsm
    416.8 KB · Affichages: 14

Dan

XLDnaute Barbatruc
Bonjour,
Joli fichier...
Je vois un souci dans votre userform utilisateur.
Vu que vous voulez évitez à jute titre le doublons dans la combobox1, si vous faites un choix de désignation via la combobox 1, il vous faut aussi définir un code de sous famille si vous voulez allez cherche l'info dans la colonne D. Comme allez-vous procéder ?
A moins que vous vouliez en combobox3 toute la liste des designations Sous_familles selon le choix effectué en combobox 1 ?

Sinon voici ce que vous devez modifier dans votre fichier
1. Au dessus des codes de l'userform --> Supprimer la variable Dim F
2. remplacez le code Private Sub UserForm_Initialize() par celui ci-dessous

VB:
Private Sub UserForm_Initialize()
Dim F As Worksheet
Dim tablo As Collection
Dim c As Range

Set tablo = New Collection

On Error Resume Next
With Sheets("Code_Default").ListObjects("Code_default").ListColumns(2)
    For Each c In .DataBodyRange
        tablo.Add c.Value, CStr(c.Value)
    Next c
On Error GoTo 0
For Each Item In tablo
    Me.ComboBox1.AddItem Item
Next
End With

Set F = Sheets("Salariés")

With Me
    .ComboBox2.List = F.ListObjects("salariés").ListColumns(1).DataBodyRange.Value
    .ComboBox3.Enabled = False
End With
End Sub

3. Dans la Private Sub ComboBox1_Change(), modifiez le début du code comme ceci:

Code:
If ComboBox3.Enabled = False Then ComboBox3.Enabled = True
If ComboBox1.Value = "" Then ComboBox3.Enabled = False: Exit Sub 'si la liste 1 est vide évite des erreurs

Dans l'attente de vous lire au sujet de la combobox3

Rem :
1. Dans votre fichier, vous avez mis une instruction Refreshall qui s'exécute à l'ouverture du fichier et provoque un souci car excel cherche quelque chose qui ne semble pas exister. Cette instruction est dédiée au TCD. Comme vous n'en avez pas, vous pourriez la supprimer.
2. Vous devriez supprimer les accents dans le noms des objets et formules. Avec VBA vous risquez toujours d'avoir un souci. A vous de voir mais par exemple au lieu de "Salariés", mettez "Salaries"

Cordialement
 
Dernière édition:

bibbip35

XLDnaute Occasionnel
Bonjour

Merci pour votre retour !!!

Pour information le "Refresh ALL" est liée a une actualisation avec mon ERP que j'ai supprimée pour ce fichier
car il y a des données confidentielle :)

Par contre , j'ai mis les codes que vous m'avez fourni ... mais je ne comprends pas trop car cela ne fonctionne pas ... surrement une incompréhension de ma part

Enfin dernier point , pour vous repondre :
Oui je souhaite qu' en combobox3 toute la liste des designations Sous_familles selon le choix effectué en combobox 1

Merci encore

Bibbip35
 

Dan

XLDnaute Barbatruc
Re
Si cela fonctionne mais peut-être n'avez-vous pas modifié correctement
Le plus simple est que je vous donne votre fichier modifié
J'ai tenu compte de la liste des désignations selon le combobox1

Cordialement
 

Pièces jointes

  • Test BIBBIP35-1.xlsm
    419.3 KB · Affichages: 19
Dernière édition:

Discussions similaires

Réponses
28
Affichages
921

Statistiques des forums

Discussions
311 725
Messages
2 081 943
Membres
101 849
dernier inscrit
florentMIG