Contenu d'un ComboBox en fonction du contenu d'un autre ComboBox
Résolu
DESTIN8TE
Messages postés
35
Date d'inscription
Statut
Membre
Dernière intervention
-
DESTIN8TE Messages postés 35 Date d'inscription Statut Membre Dernière intervention -
DESTIN8TE Messages postés 35 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Pour vous donner le contexte, je travaile sur un fichier excel déjà édité avec des macros déjà éditées aussi. Sur ce fichier je dois apporter des améliorations en terme de saisie de données. Mon employeur veut que les personnes ne rentre plus directement les données sur la feuille mais en passant par un formulaire.
Alors j'ai un formulaire avec des textBox et des comboBox comme ceci :
Les éléments entourés sont ceux qui m'intérèse, en sachant que les deux en dessous auront la même fonctionnalité (juste pour info).
Donc tout simplement la première ligne "Equipe" récupère dans une feuille excel nommé "Paramètres" où sont inscrit toutes les informations, seulement la liste "Equipe" est récupéré bien évidemment mais je ne récupère qu'une seule équipe, c'est-à-dire la première alors que j'en ai 6 en tout, donc là je ne comprend pas pourquoi j'ai ceci (en sachant que j'ai indiqué "Equipe" dans la propriété RowSource du comboBox), ensuite en fonction de l'équipe que j'ai choisis, le comboBox de la ligne Emetteur doit ce modifier en fonction de la ligne Equipe.
Ex:
J'ai "toto"(Emetteur) dans l'équipe 1(Equipe) et "titi" dans la 2.
Si je sélectionne l'équipe 1, je suis censé avoir "toto" mais bien-sûr sans avoir "titi" et vice-versa.
Et donc je voudrais savoir comment faire pour avoir le résultat voulu.
Pour vous donner le contexte, je travaile sur un fichier excel déjà édité avec des macros déjà éditées aussi. Sur ce fichier je dois apporter des améliorations en terme de saisie de données. Mon employeur veut que les personnes ne rentre plus directement les données sur la feuille mais en passant par un formulaire.
Alors j'ai un formulaire avec des textBox et des comboBox comme ceci :
Les éléments entourés sont ceux qui m'intérèse, en sachant que les deux en dessous auront la même fonctionnalité (juste pour info).
Donc tout simplement la première ligne "Equipe" récupère dans une feuille excel nommé "Paramètres" où sont inscrit toutes les informations, seulement la liste "Equipe" est récupéré bien évidemment mais je ne récupère qu'une seule équipe, c'est-à-dire la première alors que j'en ai 6 en tout, donc là je ne comprend pas pourquoi j'ai ceci (en sachant que j'ai indiqué "Equipe" dans la propriété RowSource du comboBox), ensuite en fonction de l'équipe que j'ai choisis, le comboBox de la ligne Emetteur doit ce modifier en fonction de la ligne Equipe.
Ex:
J'ai "toto"(Emetteur) dans l'équipe 1(Equipe) et "titi" dans la 2.
Si je sélectionne l'équipe 1, je suis censé avoir "toto" mais bien-sûr sans avoir "titi" et vice-versa.
Et donc je voudrais savoir comment faire pour avoir le résultat voulu.
A voir également:
- Combobox vba liste déroulante dynamique
- Propriétés combobox vba ✓ - Forum VB / VBA
- Réaliser dans un userform une combobox dynamique ✓ - Forum Excel
- Vba combobox listindex ✓ - Forum VB / VBA
- Javascript combobox - Forum Javascript
- Additem combobox vba ✓ - Forum VB / VBA
3 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
à quoi correspond le nom "Equipe"?
quelle est ton niveau et ton expérience en Excel et en VBA?
à quoi correspond le nom "Equipe"?
quelle est ton niveau et ton expérience en Excel et en VBA?
Alors j'ai enfin réussi à avoir ce que je voulais mais il y a encore un soucis.
Quand j'exécute l'UserForm depuis la feuille "Paramètres" tout va bien car c'est dans celle-ci que se situe les informations mais je dois exécuter l'UserForm depuis la feuille "DATA".
J'ai donc utilisé la méthode Sheets(".....") pour désigner la feuille concernant les informations tout en exécutant l'UserForm ailleurs que dans la feuille "Paramètres".
Quand je suis dans la feuille "Paramètres" la comboBoxTeam1 me renvoie bien les équipes et dans la comboBoxEmet j'ai bien les employés correspondant à leur équipe mais dès que je suis dans une autre feuille quand je sélectionne une équipe, j'ai directement une erreur :
L'erreur se situe ici.
Voici le code (attention c'est un peu long) :
PS : Le terme exact de ce que je voulais était des liste en cascade.
Quand j'exécute l'UserForm depuis la feuille "Paramètres" tout va bien car c'est dans celle-ci que se situe les informations mais je dois exécuter l'UserForm depuis la feuille "DATA".
J'ai donc utilisé la méthode Sheets(".....") pour désigner la feuille concernant les informations tout en exécutant l'UserForm ailleurs que dans la feuille "Paramètres".
Quand je suis dans la feuille "Paramètres" la comboBoxTeam1 me renvoie bien les équipes et dans la comboBoxEmet j'ai bien les employés correspondant à leur équipe mais dès que je suis dans une autre feuille quand je sélectionne une équipe, j'ai directement une erreur :
L'erreur se situe ici.
Voici le code (attention c'est un peu long) :
Dim Colonne As Integer
Dim i As Integer, j As Integer
' *****************************************************
' Procédure pour initialiser les cmbBoxTeam1 et 2 du
' formulaire
' *****************************************************
Private Sub UserForm_Initialize()
i = 24 'Variable qui définie la 24e colonne dans la feuille "Paramètres"
Do While Sheets("Paramètres").Cells(4, i ).Value <> ""
frmInsertMod.cmbBoxTeam1.AddItem Sheets("Paramètres").Cells(4, i).Value
frmInsertMod.cmbBoxTeam2.AddItem Sheets("Paramètres").Cells(4, i).Value
i = i + 1
Loop
End Sub
' *******************************************************
' Procédure pour modifier les données de cmbBoxEmet en
' fonction de cmbBoxTeam1
' *******************************************************
Private Sub cmbBoxTeam1_Change()
i = 24
frmInsertMod.cmbBoxEmet.Clear
Do While Sheets("Paramètres").Cells(4, i ).Value <> ""
If Sheets("Paramètres").Cells(4, i ).Value = cmbBoxTeam1.Value Then
Sheets("Paramètres").Cells(4, i ).Select
Colonne = ActiveCell.Column
End If
i = i + 1
Loop
j = 6
Do While Sheets("Paramètres").Cells(j, Colonne).Value <> ""
frmInsertMod.cmbBoxEmet.AddItem Sheets("Paramètres").Cells(j, Colonne)
j = j + 1
Loop
frmInsertMod.cmbBoxEmet.ListIndex = 0
End Sub
' *******************************************************
' Procédure pour modifier les données de cmbBoxAgQua en
' fonction de cmbBoxTeam2
' *******************************************************
Private Sub cmbBoxTeam2_Change()
i = 24
frmInsertMod.cmbBoxAgQua.Clear
Do While Sheets("Paramètres").Cells(4, i).Value <> ""
If Sheets("Paramètres").Cells(4, i).Value = cmbBoxTeam2.Value Then
Sheets("Paramètres").Cells(4, i).Select
Colonne = ActiveCell.Column
End If
i = i + 1
Loop
j = 6
Do While Sheets("Paramètres").Cells(j, Colonne).Value <> ""
frmInsertMod.cmbBoxAgQua.AddItem Sheets("Paramètres").Cells(j, Colonne)
j = j + 1
Loop
frmInsertMod.cmbBoxAgQua.ListIndex = 0
End Sub
PS : Le terme exact de ce que je voulais était des liste en cascade.
où est ici?
merci d'utiliser la catégorie "basic" quand tu partage du code VBA.
pourquoi fais-tu ceci?
les Select et ActiveCell sont très compliqués à utiliser, donc à proscrire.
tu peux sans doute faire:
ou bien
merci d'utiliser la catégorie "basic" quand tu partage du code VBA.
pourquoi fais-tu ceci?
Sheets("Paramètres").Cells(4, i).Select Colonne = ActiveCell.Column
les Select et ActiveCell sont très compliqués à utiliser, donc à proscrire.
tu peux sans doute faire:
Colonne =Sheets("Paramètres").Cells(4, i).Column
ou bien
Colonne = i
Tu me demande où est "ici" mais tu me corriges le bon endroit. ^^ D'accord j'avais pas fait gaffe qu'il y avait Basic, j'ai tout de suite chercher Visual en fait mais non c'est du basic. Et du coup ça fonctionne bien, merci beaucoup pour ton aide et l'aide d'autre personne qui ne savent pas qu'ils m'ont aidé.
Petite dédicace à eu:
Chaîne Youtube de :
Learnaccess : https://www.youtube.com/channel/UCopRqBjsUCxDWwSrQdSS1Jg
Lydia Provin : https://www.youtube.com/channel/UCjELr5_ORn3mnh_43WnjAog
Petite dédicace à eu:
Chaîne Youtube de :
Learnaccess : https://www.youtube.com/channel/UCopRqBjsUCxDWwSrQdSS1Jg
Lydia Provin : https://www.youtube.com/channel/UCjELr5_ORn3mnh_43WnjAog
Voilà la solution finale à tout ça :
Dim Colonne As Integer Dim i As Integer, j As Integer ' ***************************************************** ' Procédure pour initialiser l'UserForm en particulier ' comboBoxTeam1 et 2 du formulaire ' ***************************************************** Private Sub UserForm_Initialize() Colonne = 24 'Variable qui définit la 24e colonne Do While Sheets("Paramètres").Cells(4, Colonne).Value <> "" frmInsertMod.cmbBoxTeam1.AddItem Sheets("Paramètres").Cells(4, Colonne).Value frmInsertMod.cmbBoxTeam2.AddItem Sheets("Paramètres").Cells(4, Colonne).Value Colonne = Colonne + 1 Loop End Sub ' ******************************************************* ' Procédure pour modifier les données de cmbBoxEmet en ' fonction de cmbBoxTeam1 ' ******************************************************* Private Sub cmbBoxTeam1_Change() i = 24 'Variable qui définit la 24e colonne frmInsertMod.cmbBoxEmet.Clear Do While Sheets("Paramètres").Cells(4, i).Value <> "" If Sheets("Paramètres").Cells(4, i).Value = cmbBoxTeam1.Value Then Colonne = Sheets("Paramètres").Cells(4, i).Column End If i = i + 1 Loop j = 6 Do While Sheets("Paramètres").Cells(j, Colonne).Value <> "" frmInsertMod.cmbBoxEmet.AddItem Sheets("Paramètres").Cells(j, Colonne) j = j + 1 Loop frmInsertMod.cmbBoxEmet.ListIndex = 0 End Sub ' ******************************************************* ' Procédure pour modifier les données de cmbBoxAgQua en ' fonction de cmbBoxTeam2 ' ******************************************************* Private Sub cmbBoxTeam2_Change() i = 24 'Variable qui définit la 24e colonne frmInsertMod.cmbBoxAgQua.Clear Do While Sheets("Paramètres").Cells(4, i).Value <> "" If Sheets("Paramètres").Cells(4, i).Value = cmbBoxTeam2.Value Then Colonne = Sheets("Paramètres").Cells(4, i).Column End If i = i + 1 Loop j = 6 Do While Sheets("Paramètres").Cells(j, Colonne).Value <> "" frmInsertMod.cmbBoxAgQua.AddItem Sheets("Paramètres").Cells(j, Colonne) j = j + 1 Loop frmInsertMod.cmbBoxAgQua.ListIndex = 0 End Sub
Les "X" correspondes à des employées.
J'ai commencé à pouser mes connaissances en Excel il y a peu et ça fait deux semaines que je fais du VBA.
tu as écrit "je ne récupère qu'une seule équipe": laquelle?
Question : Tu n'as pas répondu à ma question propos du nom "Equipe". C'est le contenu de la celulle A1, c'est tout?
Réponse : Le screen tout simplement où on voit les équipes. Et comme je l'ai indiqué, Equipe est une liste.
"Seulement la liste Equipe" Ligne 13 du premier post
Question : Tu as écrit "Je ne récupère qu'une seule équipe": laquelle ?
Réponse : "Je ne récupère qu'une seule équipe, c'est-à-dire la première (screen) alors que j'en ai 6 en tout" Ligne 14 du premier post
N'hésite(z) pas à poser des questions encore si ce n'est pas clair.
Quel est le nom de l'équipe que tu récupères? De quelle cellule vient-il?
Je viens de lire https://forums.commentcamarche.net/forum/affich-35805427-recuperation-de-l-annee-d-une-cellule-au-format-yy-et-concatenation#18, prévois-tu de t'excuser?
Réponse : Le gestionnaire de noms et grâce à cela Equipe récupère "Eq_D01", "Eq_D02", etc... et ça marche car dans le classeur on fait appel au nom Equipe et nous donne la liste contenant "Eq_D01", "Eq_D02", etc... et en fonction de l'équipe il nous donne les employés correspondant à son équipe dans une autre cellule et maintenant je voudrais utiliser la liste dans le formulaire ce que j'ai fait mais qui ne fonctionne pas car je récupère seulement Eq_D01 et même si le champ est vide ou non j'ai toujours les même employés, c'est-à-dire l'équipe Eq_D01, dans emetteur
Question : C'est bien dans la cellule A1 que se trouve le nom "Equipe"?
Réponse : Sur mon fichier non, ce serait ça qui pose problème ?
Question : Quel est le nom de l'équipe que tu récupères?
Réponse : Eq_D01.
Question : De quelle cellule vient-il ?
Réponse : Equipe ? Cellule V2
Question : Prévois-tu de t'excuser ?
Réponse : Après ça ?
NON, pourquoi ? Quand on aura du respect, moi j'en aurai.
PS : Je le répète ce n'est pas moi qui est commencé ce fichier moi je suis là juste pour coder ce formulaire qui au lieu d'insérer les données directement sur le classeur, on passe par un formulaire donc TOUTE les informations sont déjà inscrite, j'ai juste à les récupérer par la suite mais c'est là le soucis.