Afficher dans une comboBox 2 les valeurs dictionnary relatives à une comboBox 1

  • Initiateur de la discussion Initiateur de la discussion la gigogne
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

L

la gigogne

Guest
Bonjour les EXCELlons ou plutôt bonsoir.

Comme je fais toujours, j'ai commencé par regarder dans les fils précédents si une discussion pouvait répondre à mon problème et j'ai trouvé un magnifique fichier appellé cata _v02 dont j'ai reproduit en commentaire une partie du code et qui m'a servi de modèle pour créer le mien

Donc après une semaine de recherche intensive Je bloque. 😕

MON PROBLEME

Afficher dans une ComboBoxChantier les valeurs relatives à la ComboBoxClient sélectionné
Afficher dans une ListBoxDevis les valeurs relatives à la ComboBoxChantier sélectionné
Au changement de la ComboBoxClient effacer les données contenues dans la ComboBoxChantier et ListBoxDevis

Je crois que ce doit être un problème de référence aux plages, mais je n'en suis pas sûr.

S'il vous est également possible de m'expliquer l'erreur (ou les erreurs je le reconnais) que j'ai pû commettre, ceci afin d'évoluer et d'aider à mon tour des personnes sur ce site.

Merci d'avance pour vos aimables contributions 🙂

Ci joint mon fichier.

PS : code en commentaire Ligne 89 - Mon code Ligne 138 de l'USF 2
 

Pièces jointes

Re : Afficher dans une comboBox 2 les valeurs dictionnary relatives à une comboBox 1

Bonjour,

Code:
Private Sub ComboBoxClient_Change()
    Me.ComboBoxChantier.Clear
    Me.ListBoxDevis.Clear
    Set mondico3 = CreateObject("Scripting.Dictionary")
    With Sheets("Client")
        For Each c In .Range(.[A2], .[A65000].End(xlUp))
            If c.Value = Me.ComboBoxClient.Value Then mondico3.Item(c.Offset(0, 1).Value) = c.Offset(0, 1).Value
        Next c
    End With
    ComboBoxChantier.List = mondico3.items
End Sub

Je te laisse faire pour la liste des devis.

Il faut te munir d'un bon bouquin ou d'un bon didacticiel. Pour essayer de comprendre ce que tu fais. Car visiblement il te manque les base de la programmation .
Je ne suis pas certain que tu saches exactement pourquoi tu utilises un Dictionnary dans ce cas là.

A+
 
Dernière modification par un modérateur:
Re : Afficher dans une comboBox 2 les valeurs dictionnary relatives à une comboBox 1

Bonjour Hasco et merci pour ton code précieux qui me dépatouille et me permet de continuer mon apprentissage.

Comme tu le dis très justement il me manque certainement quelques bases de programmation que j'essaie d'assimiler.

Pour les livres, j'en ai 2 qui traitent de la programmation :

Excel et VBA édition Pearson
VBA Office 2010 édition Dunod

Après, je n'en suis qu'au tiers de chaque ouvrage et c'est certain que je m'attaque à des fonctions un peu plus avancées compte tenu de mon niveau actuel.

Je comprend donc que :

Private Sub ComboBoxClient_Change() On déclare la Sub au changement de contrôle active X
Me.ComboBoxChantier.Clear On efface le contenu de la combo chantier
Me.ListBoxDevis.Clear On efface le contenu de la ListBox Devis
Set mondico3 = CreateObject("Scripting.Dictionary") On définit mondico3 comme une variable que l'on désigne comme Objet excel avec la fonction Scripting Dictionnary (Je ne trouve scripting dictionnary dans aucun de mes ouvrages.
With Sheets("Client") L'objet créé fait référence à l'onglet client
For Each c In .Range(.[A2], .[A65000].End(xlUp)) dans la plage de cellules définit
If c.Value = Me.ComboBoxClient.Value Then mondico3.Item(c.Offset(0, 1).Value) = c.Offset(0, 1).Value
Si la valeur de chaque cellule de la plage = valeur ComboBoxClient alors l'objet dico 3 prend les valeurs de la plage incrémentée d'une colonne vers la droite
Next c prochaine cellule de la plage
End With On arrête de prendre en compte l'onglet Client lorsque l'on arrive à la fin de la plage de référence.
ComboBoxChantier.List = mondico3.items et l'on attribue les valeurs de l'objet mondico3 à la combobox chantier
End Sub

Dis moi si j'ai bien compris le principe. Le problème étant que j'oublie souvent de déclarer un élément ce qui fait que lorsque ça ne fonctionne pas je re modifie totalement le code supprimant certainement parfois des éléments nécessaires à ma Sub.

Merci pour ton aide.
 
Re : Afficher dans une comboBox 2 les valeurs dictionnary relatives à une comboBox 1

Re,

On emploie les Dictionnary en général, pour ne retourner que des éléments uniques d'une liste, dont on ne maîtrise pas la saisie (résultats de fonctions, données importées etc).

Pour toi il s'agit de Devis de chantier. En principe, si ta programation est bien faite, tu ne devrais pas pouvoir rentrer plus d'un devis par chantier ou si tu en as plusieurs, chacun d'eux sera unique. Donc à l'affichage, l'objet Dictionary ne devrait pas être necessaire. Les méthodes .AddItem ou .List de la listBox sont amplement suffisante.

En tous cas, déclare toujours tes variables. Je sais que ce n'est plus la mode. Pourtant cela offre des services et une efficacité accrue tant à l'exécution qu' au développement.

A+
 
Dernière modification par un modérateur:
Re : Afficher dans une comboBox 2 les valeurs dictionnary relatives à une comboBox 1

Merci pour tes précisions Hasco.

Je prend donc bien note des méthodes .AddItem et .List que je vais étudier de manière plus approfondie.

Si je comprend bien donc si nous connaissons l'ensemble des variables qui seront créées ses deux méthodes suffisent mais, si ces variables doivent être mises à jour de manière dynamique en fonction des nouvelles variables créées la méthode dictionnary est nécessaire.

Dans mon cas, un chantier peut avoir plusieurs devis. La méthode Dictionnary est elle donc nécessaire ?
 
Re : Afficher dans une comboBox 2 les valeurs dictionnary relatives à une comboBox 1

Bonjour,

Le 'Dictionary' permet uniquement d'éviter les doublons. Donc si tu programmes bien, tu auras peut-être plusieurs devis par chantier, mais chaque devis sera unique. Donc pas de doublons.

A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

C
Réponses
12
Affichages
3 K
ChristophePT
C
T
Réponses
5
Affichages
2 K
Towelie
T
T
Réponses
2
Affichages
1 K
thibaut02
T
F
Réponses
2
Affichages
811
franekola
F
Retour