Menu

Contenu d'un ComboBox en fonction du contenu d'un autre ComboBox [Résolu]

Messages postés
35
Date d'inscription
lundi 14 janvier 2019
Statut
Membre
Dernière intervention
15 février 2019
-
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.
Afficher la suite 

Votre réponse

3 réponses

Messages postés
7767
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 mai 2019
464
0
Merci
bonjour,
à quoi correspond le nom "Equipe"?
quelle est ton niveau et ton expérience en Excel et en VBA?
yg_be
Messages postés
7767
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 mai 2019
464 > DESTIN8TE
Messages postés
35
Date d'inscription
lundi 14 janvier 2019
Statut
Membre
Dernière intervention
15 février 2019
-
comment les 6 noms sont-ils stockés dans les 2 cellules Paramètres!$AB$3:$AB$4?
DESTIN8TE
Messages postés
35
Date d'inscription
lundi 14 janvier 2019
Statut
Membre
Dernière intervention
15 février 2019
> yg_be
Messages postés
7767
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 mai 2019
-
Ecoute ^^ je viens de me rendre compte qu'il m'a mis les mauvaises infos pourtant j'ai copié collé enfin bref voici les bonnes : =Paramètres!$W$2:$AB$2
yg_be
Messages postés
7767
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 mai 2019
464 > DESTIN8TE
Messages postés
35
Date d'inscription
lundi 14 janvier 2019
Statut
Membre
Dernière intervention
15 février 2019
-
pour tester, crée une rangée nommée verticale avec les noms des équipes, puis utilise ce nom comme rowsource.
DESTIN8TE
Messages postés
35
Date d'inscription
lundi 14 janvier 2019
Statut
Membre
Dernière intervention
15 février 2019
> yg_be
Messages postés
7767
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 mai 2019
-
Alors j'ai fais ce que tu as dis et la comboBox de Equipe me retourne bien le nom des personnes.
Voici la procédure que j'ai effectuer :
- Création de la colonne :

- Création du nom (Dans Formules > Gestionnaire de noms > Nouveau) :

Ici encore le mot "Verticale" dans la cellule ne sert juste à comprendre que cette colonne contient les personnes, c'est une information comme dans un tableau.
- Indication du nom "Verticale" dans RowSource sur l'outil de développement d'Excel puis résultat :

Pour l'instant tout va bien.
DESTIN8TE
Messages postés
35
Date d'inscription
lundi 14 janvier 2019
Statut
Membre
Dernière intervention
15 février 2019
-
Mais là je viens de réfléchir en 2 fois et je crois que je viens de comprendre le fonctionnement du gestionnaire des noms. En fait dedans on définit tout simplement un nom (ou variable clairement) où il va contenir les valeur de(s) cellule(s) référencée(s), du coup quand je fais appel à ce nom (ou variable) dans une autre cellule avec la validation de données, c'est-à-dire "=Equipe" je récupère tout simplement Eq_D01, Eq_D02, etc... . Du coup pour en venir à ta question:
Quel est le rôle alors de la cellule V2 ?

Réponse :
Le seul rôle qu'il a, est juste d'informer que les valeurs Eq_D01, Eq_D02, etc... sont des équipes.

Mais du coup dans le comboBox de mon formulaire je n'arrive pas à avoir toutes les équipes et les employés affecté à leur équipe en sachant que j'ai indiqué dans la fenêtre "Propriétés" du comboBox de la propriété RowSource = Equipe. Donc j'ai démarré le formulaire et dans la comboBox, il n'y a que Eq_D01, et j'ai beau avoir un champ vide ou la valeur Eq_D01, j'ai quand même les employés de l'équipe Eq_D01.
Commenter la réponse de yg_be
Messages postés
35
Date d'inscription
lundi 14 janvier 2019
Statut
Membre
Dernière intervention
15 février 2019
0
Merci
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) :
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.
yg_be
Messages postés
7767
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 mai 2019
464 -
où est ici?
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
DESTIN8TE
Messages postés
35
Date d'inscription
lundi 14 janvier 2019
Statut
Membre
Dernière intervention
15 février 2019
-
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
Commenter la réponse de DESTIN8TE
Messages postés
35
Date d'inscription
lundi 14 janvier 2019
Statut
Membre
Dernière intervention
15 février 2019
0
Merci
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
yg_be
Messages postés
7767
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 mai 2019
464 -
je pense que tu peux remplacer
Colonne = Sheets("Paramètres").Cells(4, i).Column

par
Colonne = i
DESTIN8TE
Messages postés
35
Date d'inscription
lundi 14 janvier 2019
Statut
Membre
Dernière intervention
15 février 2019
-
Oui je peux et c'est ce que j'ai fait, c'est juste un mauvais copier coller.
Commenter la réponse de DESTIN8TE