2 combobox en cascade

Bonjour le forum,

J'ai créer un formulaire pour remplir des tableaux avec plusieurs données à remplir, 2 combobox qui s'alimentent à l'aide d'un combobox nommé Secteur. Lorsque je collectionne un nom de secteur ,les comboxbox doivent s'alimenter par des données qui proviens de tableau nommés . Je n'arrive pas à alimenter mes combobox 2 et 3 par rapport au choix demandé .

Un fichier joint pour mieux comprendre .

Merci d'avance.

Coco

45cascade.xlsm (25.56 Ko)

Bonsoir,

Ci-joint une proposition.

J'ai ajouté un lien entre le code et le libellé :

=> sélection d'un code dans la combo1 => le libellé correspondant dans la combo2 est sélectionné

=> et inversement

Bouben

167cascade-0-1.xlsm (37.68 Ko)

Bonsoir,

Merci pour ta réponse. C'est impeccable,

Juste quelques petites questions, j'ai voulu l'adapter au fichier général, lors du lancement il met" l'erreur de compilation nom ambigu détecté". La commande "Public gcolSites As Collection" dois je la coller dans tous les modules ?

Le débogage me met l'erreur sur "GcolSites"

Pour info : l'erreur en question

[color=#FFFF40]Private Sub Sites_Click()[/color]

    Dim oInfo As clsInfo

    If Sites.Text = "" Then
        Exit Sub
    End If

    ComboBox1.Clear
    ComboBox2.Clear

    For Each oInfo In [color=#4000FF]gcolSites[/color](Sites.Text)
        ComboBox1.AddItem oInfo.Code
        ComboBox2.AddItem oInfo.Adresse
    Next oInfo

End Sub

Merci

Bonsoir,

La variable gcolSites est publique.

=> globale pour tous les modules, feuilles, etc du classeur.

On ne peut donc pas avoir cette variable déclarée 2 fois.

Pour plus d'informations, rechercher sur le net "Portée des variables"

=> exemple : http://support.microsoft.com/kb/141693/fr

Dans le cas présent : la collection est alimentée à l'ouverture du fichier, et accessible depuis toutes les feuilles, modules, ... du fichier.

Donc pas besoin de la re-déclarer, tu peux directement utiliser cette collection dans un autre userform.

Bouben

Bonjour,

Donc j'avance un peu dans l’adaptation!!!

Mais....

Dans la procédure suivante :

Private Sub Secteur_Click()

    Dim oInfo As clsInfo
    Dim gcolSecteur As Collection
    If Secteur.Text = "" Then
        Exit Sub
    End If

    ComboBox1.Clear
    ComboBox2.Clear

    For Each oInfo In gcolSecteur(Secteur.Text)
        ComboBox1.AddItem oInfo.Code
        ComboBox2.AddItem oInfo.Adresse
    Next oInfo

End Sub

Sur les lignes , oInfo.Code et oInfo.Adresse, il met l'erreur : oInfo.Code =<Variable objet ou variable bloc with non définie>

Merci de votre aide.

Bonjour,

la collection gcolSecteurs n'est pas initialisée et pas alimentée.

Il faut directement utiliser la collection telle que je l'avais faite : créée et alimentée à l'ouverture du fichier Excel (de mémoire)

Et supprimer de cette fonction la ligne

Dim gcolSecteur As Collection

Par contre, pour modifier le code VBA initial, il faut un minimum de connaissances en programmation.

Sinon, ce sera difficile, voire impossible, je préfère être honnête.

Dans un premier temps, il faut assimiler la notion de portée des variables (lien dans mon post précédent)

Dans un second temps, il faut assimiler la notion d'objet (certes impropre en VBA, mais on se rapproche quand même de la programmation objet dans certains cas) : un objet (classe, collection, ...) doit être initialisé (ex : set xxxx = new collection), il peut ensuite être utilisé ou modifié, avant d'être détruit (ex : set xxxx = nothing).

Dans la fonction ci-dessous : gcolSecteur n'est pas initialisé (donc bug) et il n'est pas alimenté, il n'y a rien dans la collection.

=> gcolSecteur est à nothing (pas instancié)

=> et en prime gcolSecteur(Secteur.Text) est aussi à nothing (le secteur n'existe pas dans la collection)

Bouben

Re,

Je te remercie d'avoir répondu à mes attente, ça fonctionne parfaitement!

Comme dans ton classeur et comme je le souhaité.

C'était juste parce que je redéclarer la variable : Dim gcolSecteur As Collection

Merci encore pour toute tes explications.

Cordialement

Coco

Nickel !

Euh, c'est pas ce que j'avais déjà répondu hier soir ????

bouben a écrit :

Bonsoir,

La variable gcolSites est publique.

=> globale pour tous les modules, feuilles, etc du classeur.

On ne peut donc pas avoir cette variable déclarée 2 fois.

Pour plus d'informations, rechercher sur le net "Portée des variables"

=> exemple : http://support.microsoft.com/kb/141693/fr

Dans le cas présent : la collection est alimentée à l'ouverture du fichier, et accessible depuis toutes les feuilles, modules, ... du fichier.

Donc pas besoin de la re-déclarer, tu peux directement utiliser cette collection dans un autre userform.

A ta décharge, VBA n'est pas très sympa et pourrait afficher le message suivant :

"Erreur de compilation, déclaration existante dans la portée en cours".

C'est la même chose qu'écrire

Private Sub test()

Et ça, ça ne passe pas (logique)

Pas grave : expérimenter par soi-même, ça permet de mieux comprendre et progresser ...

Bouben

Bonjour Bouben,

Encore une petite question, tu trouveras dans le fichier joint, les vrai listes pour les combobox. Mon souci c'est avec le code 9999, la fonction recherche pour trouvé l'adresse ne fonctionne pas .

Sinon ca marche super.

Merci Coco

113cascade-0-1.xlsm (43.64 Ko)

Bonjour,

Ci-joint une nouvelle version, à partir de ton fichier.

Bouben

60cascade-0-2.xlsm (45.24 Ko)

Bouben,

Je n'ai qu'un mot le grande classe.

Merci

Coco

Bonjour, Bouben,

Je t'écris à toi vu que tu connais un peu mon fichier maintenant, vu que tu m'as déjà été d'une grande aide.

Je voudrais que lorsque je clique sur le bouton saisie que j'ai dans le lundi il m'écrie mes combobox dans la liste du lundi!

Plus d'explication dans le fichier.

Merci d'avance

50cascade-0-1-1.xlsm (60.10 Ko)

Bonsoir

Pas d'idée?

Merci

Bonjour,

Difficile de tester une solution, tout est verrouillé.

Il faut dans une macro enregistrer le cas (lundi, mardi...) puis lancer la forme en allant chercher ce paramètre.

Bonjour,

Heu j'ai mis aucun mot de passe...

Clic droit sur le bouton ne fonctionne pas !

Il faut affecter une macro différente pour chaque bouton et enchaîner ensuite sur le module commun après avoir récupéré le jour.

Rechercher des sujets similaires à "combobox cascade"