XL 2019 Afficher des données dans ComboBox selon la feuille choisie du classeur

blobob

XLDnaute Nouveau
Bonjour/bonsoir à tous et à toutes !

Je suis nouveau ici et j'aimerai avoir un peu d'aide. Je m'explique

J'aimerai pouvoir choisir entre 3 feuilles, et selon mon choix ça affiche les personnes inscrites sur la feuille
-> Si je choisi "IG", seulement les personnes répertoriées sur la feuille sont listés.
Alors ça fonctionne très bien pour 1 seule feuille, mais j'en ai plusieurs donc ça ne va pas trop...
1647370991974.png

J'ai déjà essayé plein de choses mais je n'ai jamais trouvé.

/!\ Aucune données ne sont vraies, ce ne sont pas de vrais noms,...
J'espère que le fichier passe auprès de la modération.

S'il faut d'autres explications je tâcherai de les fournir.
Je répondrai le plus vite possible si des gens répondent !

Merci d'avance à tout le monde
 

Pièces jointes

  • Projet_V9.xlsm
    94 KB · Affichages: 7
Solution
bonjour le fil, bonjour chti160
re bloblob
depuis que j'ai commencé à évaluer ce classeur, le fil à évolué, malgré tout je vous poste mon interprétation

dans la solution que je vous propose, dans initialize j'ai déplacé une partie du code vers le bouton choix du nom. j'ai aussi activé la feuille choisie par le bouton choix de la section et modifié l'alimentation de la combobox.
Code:
Private Sub ME_ChoixSection_Change()
If (ME_ChoixSection.Value = "IG") Then
        Worksheets("IG").Activate
Else
    If (ME_ChoixSection.Value = "AD") Then
        Worksheets("AD").Activate
      
      
    End If
    If (ME_ChoixSection.Value = "CT") Then
        Worksheets("CT").Activate
    End If
End If
   Set f = ActiveSheet
   Clé = f.Range("A3:B" &...

blobob

XLDnaute Nouveau
Bonjour ! Merci de ta réponse ;)

Je vais reformuler avec le screenshot :
Dans la combobox "Choix de la section" il y a 3 données.
Ces 3 données doivent adapter la ComboBox "Choix du nom"
-> Si je choisi "IG", ça va lister que les noms présents dans la feuille IG, si je choisi AD, ceux de la feuille AD,...
1647416399582.png

ça fonctionne très bien pour 1 feuille seulement. Peut importe ce que je choisi, ça ne liste que les données de la feuille IG.
Et je pense que ça se modifie ici. à la place de 'Sheets("IG")', je devrai avoir 'Sheet(FeuilleSelectionnée)'
1647416585960.png

J'ai déjà fait un if pour activer la feuille que je veux, maintenant je dois adapter ça pour mettre dans le code ci-dessus.. Je pense ?
1647416706880.png


J'ai essayé ce que tu as fait mais ça ne correspond pas à ce que je veux, je crois que je m'exprime mal ou je fait des bêtises, désolé
 

GALOUGALOU

XLDnaute Accro
bonjour le fil, bonjour chti160
re bloblob
depuis que j'ai commencé à évaluer ce classeur, le fil à évolué, malgré tout je vous poste mon interprétation

dans la solution que je vous propose, dans initialize j'ai déplacé une partie du code vers le bouton choix du nom. j'ai aussi activé la feuille choisie par le bouton choix de la section et modifié l'alimentation de la combobox.
Code:
Private Sub ME_ChoixSection_Change()
If (ME_ChoixSection.Value = "IG") Then
        Worksheets("IG").Activate
Else
    If (ME_ChoixSection.Value = "AD") Then
        Worksheets("AD").Activate
      
      
    End If
    If (ME_ChoixSection.Value = "CT") Then
        Worksheets("CT").Activate
    End If
End If
   Set f = ActiveSheet
   Clé = f.Range("A3:B" & f.[B65000].End(xlUp).Row)
  '-------------avec tri---------------
  Call Tri(Clé, LBound(Clé), UBound(Clé))
  Me.ChoixNom.List = f.Range("A3:B" & f.[B65000].End(xlUp).Row).Value
  Me.ChoixNom = ""
  B_ajout_Click
End Sub

j'ai aussi remplacé le choix de la feuille en dur par le choix de la feuille active
Code:
Private Sub ChoixNom_Click()
 
   ligneEnreg = ActiveSheet.[A:B].Find(ChoixNom, LookIn:=xlValues).Row
cdt
galougalou
 

Pièces jointes

  • Projet_V9 v2.xlsm
    79.9 KB · Affichages: 10

blobob

XLDnaute Nouveau
bonjour le fil, bonjour chti160
re bloblob
depuis que j'ai commencé à évaluer ce classeur, le fil à évolué, malgré tout je vous poste mon interprétation

dans la solution que je vous propose, dans initialize j'ai déplacé une partie du code vers le bouton choix du nom. j'ai aussi activé la feuille choisie par le bouton choix de la section et modifié l'alimentation de la combobox.
Code:
Private Sub ME_ChoixSection_Change()
If (ME_ChoixSection.Value = "IG") Then
        Worksheets("IG").Activate
Else
    If (ME_ChoixSection.Value = "AD") Then
        Worksheets("AD").Activate
     
     
    End If
    If (ME_ChoixSection.Value = "CT") Then
        Worksheets("CT").Activate
    End If
End If
   Set f = ActiveSheet
   Clé = f.Range("A3:B" & f.[B65000].End(xlUp).Row)
  '-------------avec tri---------------
  Call Tri(Clé, LBound(Clé), UBound(Clé))
  Me.ChoixNom.List = f.Range("A3:B" & f.[B65000].End(xlUp).Row).Value
  Me.ChoixNom = ""
  B_ajout_Click
End Sub

j'ai aussi remplacé le choix de la feuille en dur par le choix de la feuille active
Code:
Private Sub ChoixNom_Click()
 
   ligneEnreg = ActiveSheet.[A:B].Find(ChoixNom, LookIn:=xlValues).Row
cdt
galougalou
C'est exactement ce que je veux ! Un grand merci à toi, je vais voir si tout fonctionne partout dans le programme maintenant

C'était si simple en fait lol, mais en tant que débutant c'est pas simple

Encore merci beaucoup !

Excellente journée à vous
 

ChTi160

XLDnaute Barbatruc
Re
Pour GALOUGALOU et afin de me rassurer Lol
Je me pose la question de savoir ce que je n'ai pas compris dans la demande de blobob #1.
j'aimerai pouvoir choisir entre 3 feuilles, et selon mon choix ça affiche les personnes inscrites sur la feuille
-> Si je choisi "IG", seulement les personnes répertoriées sur la feuille sont listées.
j'ai compris qu'il fallait récupérer les Noms en Colonne 1 (A) de la feuille dont le Nom a été sélectionné dans le Combobox "ME_ChoixSection"
Ensuite de les Lister dans le Combobox "ChoixNom"
C'est ce que j'ai cru faire dans le Fichier que j'avais joint.
J'ai effectivement supprimé quelques fioritures, Comme le Double Trait en Ligne 2 des Feuilles Source.
A oui !
J'évite aussi les Activate et Select pour ce qui est des feuilles, cellules etc etc .
On peut très bien s'en passer dans ce cas (c'est ce que l'on m'a recommandé Lol)
Je n'ai rien fait d'autre comme code sur ce Fichier Lol

J'ai supprimé le Tri via la fonction "Tri" car je trie directement les données dans la Feuille.
D'ailleurs dans le Fichier de GALOUGALOU , elle ne sert à rien , si j'ai bien compris.
Voir explications :
Code:
 Set f = ActiveSheet
   Clé = f.Range("A3:B" & f.[B65000].End(xlUp).Row) 'on récupère la plage à trier (sur deux Colonnes)
  '-------------avec tri---------------
  Call Tri(Clé, LBound(Clé), UBound(Clé)) 'et on trie "clé" soit le tableau "a" donc aucune action sur la plage Source
 'et après on récupère les valeurs sans tenir compte du fait qu'il y a des doublons dans la plage "A3:A "xxx" de la feuille source ??????
Plage "A3:A"xxx non triée donc.
  Me.ChoixNom.List = f.Range("A3:A" & f.[A65000].End(xlUp).Row).Value 'ici
  Me.ChoixNom = ""
Ci-dessous , le Code que j'ai fourni.
VB:
Private Sub ME_ChoixSection_Change()
Dim Ws_Source As Worksheet
Set Ws_Source = Worksheets(ME_ChoixSection.Text) 'On définit la feuille selon le choix fait dans le Combobox "ME_ChoixSection"
With Ws_Source 'avec la feuille ainsi définie
 derlgn = .Cells(.Rows.Count, 1).End(xlUp).Row 'on détermine la dernière ligne non vide du Tableau des Données de cette feuille
    If derlgn = 1 Then Exit Sub 'si la dernière ligne est la 1 c'est qu'il n'y a pas de Données
    dercol = .Cells(1, .Columns.Count).End(xlToLeft).Column 'on détermine la dernière Colonne de la plage de données de cette feuille
        With .Range(.Cells(1, 1), .Cells(derlgn, dercol)) 'avec la plage ainsi définie
  
           .Sort key1:=.Cells(2, 1), order1:=xlAscending, Header:=xlYes 'On la trie
        
          tbl_bdd = .Value 'on récupère les valeurs de cette plage
        End With
End With
With Me.ChoixNom 'avec le Combobx des Noms
       .Clear
 For lgn = 2 To UBound(tbl_bdd, 1) 'pour chaque Ligne du tableau des valeurs
      .Text = Trim(tbl_bdd(lgn, 1)) 'on affiche cette valeur dans le Combobox
   If .ListIndex = -1 Then 'si pas de Concordence
      .AddItem Trim(tbl_bdd(lgn, 1)) 'On ajoute la valeur a la Liste de ce Combobox
   End If
 Next
      .ListIndex = -1 'on initialise le Combobox pour qu'il n'affiche rien
End With
End Sub
Code:
Je joins une vidéo de ce que mon Code fait !
Pour l'exemple, j'ai affiché la feuille (pour voir le Tri) et la concordance des Noms qui sont récupérés. (ça fait la même chose si l'on choisit une autre feuille)
Enfin ce fil est clo ,mais bon.
Bonne fin de Journée
Jean marie
 

Pièces jointes

  • Feuille-1.gif
    Feuille-1.gif
    197.4 KB · Affichages: 27

blobob

XLDnaute Nouveau
Re
Pour GALOUGALOU et afin de me rassurer Lol
Je me pose la question de savoir ce que je n'ai pas compris dans la demande de blobob #1.

j'ai compris qu'il fallait récupérer les Noms en Colonne 1 (A) de la feuille dont le Nom a été sélectionné dans le Combobox "ME_ChoixSection"
Ensuite de les Lister dans le Combobox "ChoixNom"
C'est ce que j'ai cru faire dans le Fichier que j'avais joint.
J'ai effectivement supprimé quelques fioritures, Comme le Double Trait en Ligne 2 des Feuilles Source.
A oui !
J'évite aussi les Activate et Select pour ce qui est des feuilles, cellules etc etc .
On peut très bien s'en passer dans ce cas (c'est ce que l'on m'a recommandé Lol)
Je n'ai rien fait d'autre comme code sur ce Fichier Lol

J'ai supprimé le Tri via la fonction "Tri" car je trie directement les données dans la Feuille.
D'ailleurs dans le Fichier de GALOUGALOU , elle ne sert à rien , si j'ai bien compris.
Voir explications :
Code:
 Set f = ActiveSheet
   Clé = f.Range("A3:B" & f.[B65000].End(xlUp).Row) 'on récupère la plage à trier (sur deux Colonnes)
  '-------------avec tri---------------
  Call Tri(Clé, LBound(Clé), UBound(Clé)) 'et on trie "clé" soit le tableau "a" donc aucune action sur la plage Source
 'et après on récupère les valeurs sans tenir compte du fait qu'il y a des doublons dans la plage "A3:A "xxx" de la feuille source ??????
Plage "A3:A"xxx non triée donc.
  Me.ChoixNom.List = f.Range("A3:A" & f.[A65000].End(xlUp).Row).Value 'ici
  Me.ChoixNom = ""
Ci-dessous , le Code que j'ai fourni.
VB:
Private Sub ME_ChoixSection_Change()
Dim Ws_Source As Worksheet
Set Ws_Source = Worksheets(ME_ChoixSection.Text) 'On définit la feuille selon le choix fait dans le Combobox "ME_ChoixSection"
With Ws_Source 'avec la feuille ainsi définie
 derlgn = .Cells(.Rows.Count, 1).End(xlUp).Row 'on détermine la dernière ligne non vide du Tableau des Données de cette feuille
    If derlgn = 1 Then Exit Sub 'si la dernière ligne est la 1 c'est qu'il n'y a pas de Données
    dercol = .Cells(1, .Columns.Count).End(xlToLeft).Column 'on détermine la dernière Colonne de la plage de données de cette feuille
        With .Range(.Cells(1, 1), .Cells(derlgn, dercol)) 'avec la plage ainsi définie
 
           .Sort key1:=.Cells(2, 1), order1:=xlAscending, Header:=xlYes 'On la trie
       
          tbl_bdd = .Value 'on récupère les valeurs de cette plage
        End With
End With
With Me.ChoixNom 'avec le Combobx des Noms
       .Clear
 For lgn = 2 To UBound(tbl_bdd, 1) 'pour chaque Ligne du tableau des valeurs
      .Text = Trim(tbl_bdd(lgn, 1)) 'on affiche cette valeur dans le Combobox
   If .ListIndex = -1 Then 'si pas de Concordence
      .AddItem Trim(tbl_bdd(lgn, 1)) 'On ajoute la valeur a la Liste de ce Combobox
   End If
 Next
      .ListIndex = -1 'on initialise le Combobox pour qu'il n'affiche rien
End With
End Sub
Code:
Je joins une vidéo de ce que mon Code fait !
Pour l'exemple, j'ai affiché la feuille (pour voir le Tri) et la concordance des Noms qui sont récupérés. (ça fait la même chose si l'on choisit une autre feuille)
Enfin ce fil est clo ,mais bon.
Bonne fin de Journée
Jean marie
Purée j'ai lancé votre fichier tout à l'heure et je n'ai pas eu le même que sur la vidéo... Je crois que j'ai mal lancé le programme, mince !

Mais oui en fait c'est exactement ça que je souhaite avoir (Du coup j'ai utilisé le code de Galougalou et ça fonctionne aussi)
Merci et désolé ChTi160 :(

Excellente fin de journée à vous ChTi160
 

GALOUGALOU

XLDnaute Accro
re chti160
j'ai pris connaissance de la demande de bloblob hier soir, et cela m'a amusé d'essayer de trouver une solution.
perso, j'ai rapidement vu que le développement aurait dû aller plus loin que de gérer uniquement les noms dans la deuxième combobox.
J'ai supprimé le Tri via la fonction "Tri" car je trie directement les données dans la Feuille.
D'ailleurs dans le Fichier de GALOUGALOU , elle ne sert à rien , si j'ai bien compris.
tu as totalement raison.

Pour apporter un début de réponse, je me suis juste focalisé sur les noms sans être sûr de faire le tour de la problématique.

à l'ouverture ce matin, j'ai vu ta solution. Sans l'évaluer, j'ai posté mon début de solution qui ne gère pas la totalité de la problématique, et puis je suis allé cultiver mes fleurs et j'ai profité de cette journée en essayant d'oublier les problèmes d'actualité, ce qui ne m'empêche pas d'avoir des pensées très tristes, rapport au devenir du peuple ukrainien.
Ce soir, je consulte le forum et je vois maintenant tes messages. Connaissant ta maitrise d'excel, je ne doute pas que tu ais géré avec beaucoup de pertinence. Désolé de ne pas avoir répondu plut tôt.
cdt
galougalou
 

Discussions similaires

Statistiques des forums

Discussions
312 221
Messages
2 086 382
Membres
103 199
dernier inscrit
ATS1