Contenu d'un ComboBox en fonction du contenu d'un autre ComboBox

Résolu/Fermé
DESTIN8TE Messages postés 35 Date d'inscription lundi 14 janvier 2019 Statut Membre Dernière intervention 15 février 2019 - Modifié le 18 janv. 2019 à 13:38
DESTIN8TE Messages postés 35 Date d'inscription lundi 14 janvier 2019 Statut Membre Dernière intervention 15 février 2019 - 31 janv. 2019 à 15:33
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.

3 réponses

yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471
Modifié le 18 janv. 2019 à 15:43
bonjour,
à quoi correspond le nom "Equipe"?
quelle est ton niveau et ton expérience en Excel et en VBA?
0
DESTIN8TE Messages postés 35 Date d'inscription lundi 14 janvier 2019 Statut Membre Dernière intervention 15 février 2019
18 janv. 2019 à 16:04
Voilà ce que donne le tableau :

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.
0
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471 > DESTIN8TE Messages postés 35 Date d'inscription lundi 14 janvier 2019 Statut Membre Dernière intervention 15 février 2019
18 janv. 2019 à 16:12
tu n'as pas répondu à ma question propos du nom "Equipe". C'est le contenu de la celulle A1, c'est tout?
tu as écrit "je ne récupère qu'une seule équipe": laquelle?
0
DESTIN8TE Messages postés 35 Date d'inscription lundi 14 janvier 2019 Statut Membre Dernière intervention 15 février 2019
21 janv. 2019 à 09:11
Bonjour, bon week-end ?

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.
0
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471 > DESTIN8TE Messages postés 35 Date d'inscription lundi 14 janvier 2019 Statut Membre Dernière intervention 15 février 2019
Modifié le 21 janv. 2019 à 09:42
Tu écris que "Equipe" est une liste. Comment as-tu fait pour que Excel sache que c'est une liste? C'est bien dans la cellule A1 que se trouve le nom "Equipe"?
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?
0
DESTIN8TE Messages postés 35 Date d'inscription lundi 14 janvier 2019 Statut Membre Dernière intervention 15 février 2019
Modifié le 21 janv. 2019 à 10:29
Question : Comment as-tu fait pour que Excel sache que c'est une liste?

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.
0
DESTIN8TE Messages postés 35 Date d'inscription lundi 14 janvier 2019 Statut Membre Dernière intervention 15 février 2019
Modifié le 30 janv. 2019 à 14:31
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.
0
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471
Modifié le 30 janv. 2019 à 15:02
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
0
DESTIN8TE Messages postés 35 Date d'inscription lundi 14 janvier 2019 Statut Membre Dernière intervention 15 février 2019
30 janv. 2019 à 15:45
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
0
DESTIN8TE Messages postés 35 Date d'inscription lundi 14 janvier 2019 Statut Membre Dernière intervention 15 février 2019
31 janv. 2019 à 13:53
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
0
yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471
31 janv. 2019 à 14:02
je pense que tu peux remplacer
Colonne = Sheets("Paramètres").Cells(4, i).Column

par
Colonne = i
0
DESTIN8TE Messages postés 35 Date d'inscription lundi 14 janvier 2019 Statut Membre Dernière intervention 15 février 2019
31 janv. 2019 à 15:33
Oui je peux et c'est ce que j'ai fait, c'est juste un mauvais copier coller.
0