Initialisation de Combobox

Bonjour à tous,

Je me retrouve devant une impasse sur mon projet pourtant bien avancé.

J'ai dans un UserForm 4 combobox dans lesquelles je souhaite mettre en place de l'autocomplétion de données : Nom et Prénom & Marque et Modèle.

Les données venant de 2 feuilles du classeur (Clients & Paramètres), je me retrouve bloqué lorsque j'initie leurs valeurs dans ma Sub UserForm_Initialize() :

- mes combobox Nom et Prénom se remplissent bien si j'initie ainsi :

Private Sub UserForm_Initialize() 
    Sheets("Clients").Select
    Me.Cb_Nom.Clear
    Set Mondico = CreateObject("Scripting.dictionary")
    For J = 2 To Worksheets("Clients").Range("A" & Rows.Count).End(xlUp).Row
        Mondico(Worksheets("Clients").Range("A" & J).Value) = ""
    Next J
    If Mondico.Count > 0 Then
        Me.Cb_Nom.List = Application.Transpose(Mondico.keys)
    End If 
End Sub

- mes combobox Marque et Modèle se remplissent bien si j'initie ainsi :

Private Sub UserForm_Initialize()
    Sheets("Paramètres").Select
    Me.Cb_Arme1_Marque.Clear
    Set Mondico2 = CreateObject("Scripting.dictionary")
    For k = 2 To Worksheets("Paramètres").Range("I" & Rows.Count).End(xlUp).Row
        Mondico2(Worksheets("Paramètres").Range("I" & k).Value) = ""
    Next k
    If Mondico2.Count > 0 Then
        Me.Cb_Arme1_Marque.List = Application.Transpose(Mondico2.keys)
    End If   
End Sub

Mais si je réunis les 2 codes, l'un ou l'autre des binômes de combobox ne fonctionne plus.
Ca m'embêterais de devoir réunir les données sur une même feuille car elles n'ont rien à voir entre elles.

Avez vous une idée ?

Merci d'avance pour vos conseils

Bonjour,

Non testé (bah, pas envie de recréer ..)

Private Sub UserForm_Initialize()
Dim Sh_Cl As Worksheet, Sh_Param As Worksheet
Set Sh_Cl = Sheets("Clients"): Set Sh_Param = Sheets("Paramètres")
Me.Cb_Nom.Clear: Me.Cb_Arme1_Marque.Clear
Set Mondico = CreateObject("Scripting.dictionary")
Set Mondico2 = CreateObject("Scripting.dictionary")
For j = 2 To Sh_Cl.Cells(Rows.Count, "A").End(xlUp).Row
    Mondico(Sh_Cl.Cells(j, "A").Value) = ""
Next j
If Mondico.Count > 0 Then
    Me.Cb_Nom.List = Application.Transpose(Mondico.keys)
End If
For k = 2 To Sh_Param.Cells(Rows.Count, "I").End(xlUp).Row
    Mondico2(Sh_Param.Cells(k, "I").Value) = ""
Next k
If Mondico2.Count > 0 Then
    Me.Cb_Arme1_Marque.List = Application.Transpose(Mondico2.keys)
End If
End Sub

Peut-être?

PS, à l'avenir, pense à joindre un fichier exemple, qu'on puisse vérifier si on ne dit pas trop de conneries... :)

Bonjour Cousinhub,

Merci pour ton aide, je n'ai pas eu de résultat différent avec ton code.

Je suis désolée de ne pas avoir fourni de fichier, en voici un sur lequel j'ai laissé les données et codes nécessaires.

Les combobox Nom/Prénom sont dans l'encadré "Destinataire" et les combobox Marque/Modele dans "Reprise arme 1"

Très bonne journée

Bonjour,

Lorsqu'on joint un fichier, on évite de mettre du code (notamment jouant sur les propriétés d'excel, comme .visible) dans l'évènement d'ouverture.

Tout le monde ne sait pas remettre son application...

Te demande de l'enlever, et de le remettre après avoir supprimé l'évènement "Workbook_Open"

Merci

Re-,

Pour moi, pas de pb, le Cb Marque est bien alimenté...

(Celui de droite)

image

Bonjour,

Je me suis effectivement rendu compte de l'erreur mais un peu tard puisque vous avez eu le temps de le télécharger avant.

Je le remet ici et change le fichier précédent.

Merci

Re,

Effectivement Marque / Modèle vont bien fonctionner, mais plus Nom/Prénom

Je n'arrive pas a faire en sorte que les 2 binômes de combobox fonctionnent simultanément, soit l'un fonctionne soit l'autre mais pas les 2.

Si je met uniquement ce code, le binome Nom/ Prénom va fonctionner :

Private Sub UserForm_Initialize() 
    Sheets("Clients").Select
    Me.Cb_Nom.Clear
    Set Mondico = CreateObject("Scripting.dictionary")
    For J = 2 To Worksheets("Clients").Range("A" & Rows.Count).End(xlUp).Row
        Mondico(Worksheets("Clients").Range("A" & J).Value) = ""
    Next J
    If Mondico.Count > 0 Then
        Me.Cb_Nom.List = Application.Transpose(Mondico.keys)
    End If 
End Sub

Si je met uniquement ce code, le binome Marque/Modele va fonctionner :

Private Sub UserForm_Initialize()
    Sheets("Paramètres").Select
    Me.Cb_Arme1_Marque.Clear
    Set Mondico2 = CreateObject("Scripting.dictionary")
    For k = 2 To Worksheets("Paramètres").Range("I" & Rows.Count).End(xlUp).Row
        Mondico2(Worksheets("Paramètres").Range("I" & k).Value) = ""
    Next k
    If Mondico2.Count > 0 Then
        Me.Cb_Arme1_Marque.List = Application.Transpose(Mondico2.keys)
    End If   
End Sub

mais les 2 dans la sub ensemble ne fonctionne pas

Re-,

Ben, si...

Regarde le fichier joint

Re,

Je regarde le fichier que tu as envoyé, j'ai bien le destinataire qui se rempli, mais lorsque je sélectionne la Marque, le modèle ne s'implémente pas

forum 1

Re-,

Ce n'est pas la demande...

Tu parlais d'initialisation des combobox, pas du traitement après changement de l'un ou de l'autre...

Je regarde

Re,

Je suis désolée je pensais être clair dans mon premier message, mais j'ai peut être trop la tête dedans pour me projeter d'un point de vu extérieur.

Il ne s'agit pas d'un problème d'initialisation ? Dans ton exemple, c'est toujours la combinaison Marque/Modele qui ne fonctionne plus, ca n'a pas l'air d'être le changement de l'un qui désactive l'autre, mais plutôt la position du code dans la Sub ?

Re-,

Dans le change de ton cb, il faut faire référence à l'onglet...

If Worksheets("Paramètres").Range("I" & J) = Me.Cb_Arme1_Marque Then

Pour bien refaire ton code, je te conseille de mettre ces déclarations de variable en haut du code, afin de définir la portée sur l'usf :

'--------------------------------------------------------------------------------------------------------------------------------------------
'                                                       AUTOCOMPLETION
'--------------------------------------------------------------------------------------------------------------------------------------------
'------------------------------------------------------------------------
'   CHARGEMENT DE LA COMBOBOX PRENOM
'------------------------------------------------------------------------
Dim Sh_Cl As Worksheet, Sh_Param As Worksheet

Comme ces objets sont définis dans l'initialisation :

Private Sub UserForm_Initialize()
Set Sh_Cl = Sheets("Clients"): Set Sh_Param = Sheets("Paramètres")
.....

Tu peux y faire référence dans tout le reste de la procédure

Comme ceci :

If Sh_Param.Range("I" & J) = Me.Cb_Arme1_Marque Then

Commence par référencer tous les .Range en fonction de leurs onglets, pour partir sur de bonnes bases

Bon courage

Re,

Effectivement il manquait dans le change la référence sur une ligne à chaque fois "tout simplement"

Je remet le fichier à jour avec le fonctionnement attendu et tes conseils sur le remaniement du code, même si a mon avis si je vous donnait le fichier complet quelques larmes seraient versées (d'où ma honte de le partager initialement)

Merci pour ton aide !

Re-,

As-tu regardé tes messages privés?

Rechercher des sujets similaires à "initialisation combobox"