Source d'une combobox dépendante de la valeur de la seconde?

bonjour à tous ,

mon soucis concerne le remplissage d'une combobox.

la première combobox est alimenté via add idem et fonctionne très bien

la deuxième devrait être alimentée par une colonne dont l’entête est identique à la valeur de la première .

mais avec le code que j'utilise cela ne fonctionne pas:

erreur d’exécution 1004

la méthode range de l'objet global a échoué

Private Sub CbxRecherche2_DropButtonClick()

Dim lesrch2 As Object, Cel As Range

Dim i As Variant

i = CbxRecherche1.Value

Set lesrch2 = CreateObject("Scripting.Dictionary")

With Feuil22

For Each Cel In Range(i)

If Not lesrch2.Exists(Cel.Value) And Cel.Value <> "" _

Then lesrch2.Add Cel.Value, Cel.Value

Next Cel

End With

Me.CbxRecherche2.List = Application.Transpose(lesrch2.Items)

End Sub

merci à ceux qui chercheront avec moi,,je séche un peu n'étant pas un pro du vba.

Bonjour,

Tu devrais essayer de placer un point devant Range(i) .

For Each Cel In .Range(i)

A+

merci ,

je viens d'essayer ,

cela donne l'erreur "la méthode range de l'objet worksheet à échoué".

Je ne vois pas la déclaration de Feuil22.

Si ta feuille se nomme "Feuil22", essaie avec

With worksheets("Feuil22") 

A+

frangy a écrit :

Je ne vois pas la déclaration de Feuil22.

Si ta feuille se nomme "Feuil22", essaie avec

With worksheets("Feuil22") 

A+

Bonjour,

aprés une grosse galére sur excel suite au passage de la version 64bit à la 32bits,

(Problémes d'installation dus au fichier fonts....

Bonne prise de téte pour moi ,mais résolue ! ),

je peux enfin reprendre mon problème ,qui me donne , aprés la motif avec" worksheets("Feuill22"), une nouvelle erreur :

"erreur d’exécution ,l'indice n'appartient pas à la sélection"

J'ai tenté avec columns à la place de range:

Private Sub CbxRecherche2_DropButtonClick()

Dim lesrch2 As Object, Cel As Range

Dim i As Variant

i = CbxRecherche1.Value

Set lesrch2 = CreateObject("Scripting.Dictionary")

With Feuil22

For Each Cel In .Columns(i)

If Not lesrch2.exists(Cel.Value) And Cel.Value <> "" _

Then lesrch2.Add Cel.Value, Cel.Value

Next Cel

End With

Me.CbxRecherche2.List = Application.Transpose(lesrch2.items)

End Sub

ca me met erreur d'éxécution 13 icompabilité de type .

que faire?

merci pour votre aide

Bonjour,

Ne crois-tu pas qu'avec un fichier exemple (anonymisé) ce serait plus simple à résoudre ?

A+

bonjour,

désolé c'est vrai que c'est plus pratique

voici un fichiers exemple en pièce jointe.

merci d'avance

35classeur1.zip (12.71 Ko)

A tester

55classeur1.zip (16.42 Ko)

A+

bonjour,

merci pour le fichier exemple qui donne pleinement satisfaction dans le résultat.

J’essaie de l'adapter,

donc

quelques questions pour pouvoir l'insérer correctement dans mon code car adapté dans le fichier d'origine cela ne marche pas.

Suis je obligé de créer un colonne supplémentaire dans une feuille à part, comme vu dans la soluce, pour servir de source à la cbx1?

Pourquoi ne puis je pas modifier la propriété listfill range par feuil1!a1:a3 dans l'exemple et utiliser directement la ligne d’entêté du tableau?

encore merci des vos efforts

je rajoute un fichier joint ,

j'ai déja répondu à mes questions en testant .lol.

on n'est pas obligé de faire une autre colonne dans la 2eme feuille ,et la propriété row source était mal écrite apparemment feuil s'écrit Feuil ......

Avec les CBX dans une feuille ,tout va bien mais si j'essaie de mettre les box dans un userform comme le fichier joint;ca marche point!

encore un coups de pouce FRANGY?

merci

45classeur1.zip (23.13 Ko)

Bonjour,

Voici quelques commentaires pour accompagner le classeur joint.

La liste qui contient les en-têtes "nom", "prenom", "couleur" est renseignée à l'initialisation de l'Userform.

Chaque élément de cette liste correspond à une plage nommée (voir dans Formules > Gestionnaire de noms). Il s'agit de plages dynamiques, ce qui permet de faire évoluer la liste automatiquement quand on ajoute un élément.

C'est grâce à ces plages nommées que l'on peut faire référence à la liste choisie avec l'instruction

For Each Cel In Range(Me.CbxRecherche1.Value)

A+

33classeur1.zip (16.55 Ko)

merci Frangy ,

le fichier exemple correspond tout à fait a mes attentes.

mais une fois dans mon fichiers ,j'ai encore erreur range global échoué.

je modifie simplement le nom de la feuille par rapport au fichiers exemple ,

et à l'action sur le" dropbutton":erreur!

Se peut il que, le fait que la base de donnée soit sous forme de tableau automatique(excel 2010) ,cause un problème?

Dans le gestionnaire de nom ,je ne peux pas voir les étiquettes des plages nommées de la feuille"base de donnée" ,mais juste la principale celle du tableau.

Pour le range("nom d'en_têtes") ne faudrait il pas quelque chose du genre range(nom de tableau+nom d'en_têtes)?

merci encore

Private Sub CbxRecherche2_DropButtonClick()
Dim lesrch2 As Object
Dim Cel As Range
    If Me.CbxRecherche1.Value <> "" Then
        Set lesrch2 = CreateObject("Scripting.Dictionary")
        With Worksheets("basededonnée")
           [color=#FFFF00]For Each Cel In Range(Me.CbxRecherche1.Value)[/color][color=#FF0000] 'erreur : Méthode range global a échoué[/color]
                If Not lesrch2.Exists(Cel.Value) And Cel.Value <> "" _
                Then lesrch2.Add Cel.Value, Cel.Value
            Next Cel
        End With
        Me.CbxRecherche2.List = Application.Transpose(lesrch2.Items)
    End If

End Sub

Re-bonjour,

Il manque un tout petit point avant Range pour indiquer que l'instruction fait référence à la la feuille "basededonnée"

For Each Cel In .Range(Me.CbxRecherche1.Value)

A+

c'est bon,résolu!!

je n'avais aucun noms de plage dans "gestionnaires de noms ";,que des noms de tableau créés automatiquement avec 2010!!!

je pensais que cela suffisait de créer le tableau comme ca.....

d'ou l'erreur récurante méthode range global échoué, non?

voila

,merci bien à Frangy,

et au forum.

A+


Rechercher des sujets similaires à "source combobox dependante valeur seconde"