Créer et Utiliser des listes de choix successives
#1
Régulier XLPages

Inscription: 05/10/2009
De 33210-Gironde

Messages: 49

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 05-10-2009 23h40
Bonjour,

A peine inscrit sur votre forum, et déjà en train de poster pour un problème que je ne maîtrise pas ...
j'espère qu'il ne m'en sera pas tenu rigueur ..

Voilà une mini-base de données, que je ne veux pas laisser exploiter par un tiers sous sa forme "excelienne" ... brute sur la feuille1, mais par le biais de listes de choix en cascades sur la feuille2, extrayant leurs données de la  feuille1.

voici le lien de l'exemple.
LIEN SUPPRIME PAR LE WEBMASTER (voir le fichier joint dans le post suivant)

Merci à l'avance, aux personnes qui voudront bien m'aiguiller vers une méthode à utiliser pour réaliser ce que je ne comprends pas encore.

Edité par myDearFriend! le 06/10/2009 00:16:00
Hors Ligne
Rapport   Haut 

Re: Créer et Utiliser des listes de choix successives
#2
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1483

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016
Posté le : 06-10-2009 00h13
Bonsoir gmarin, et bienvenue sur XLpages.com,

Pas de problème, les inscriptions sont faites pour cela

Pour moi ça fait un peu tard pour regarder ton problème, alors je le ferai demain si personne n'est intervenu entre temps.

Cela dit, je t'informe que l'éditeur de post ici permet de joindre ton fichier directement avec ta question (80 Ko maximum et il est conseillé de le zipper pour gagner encore du poids s'il le faut) et d'éviter ainsi le recours aux sites type Ci-joint.com et autres... Pour rappel, ces sites hébergent généralement vos fichiers de façon temporaire seulement, et donc dans quelques jours, le présent fil de discussions ne voudra plus rien dire sans son fichier pour les visiteurs intéressés...

Dans l'attente donc, je joins ton fichier ci-dessous comme il se doit et supprime ton lien.

Cordialement,

Pièce jointe:
zip triModelesLieuDispo.zip   [ Taille: 18.14 Ko - Téléchargements: 391 ]

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Créer et Utiliser des listes de choix successives
#3
Régulier XLPages

Inscription: 05/10/2009
De 33210-Gironde

Messages: 49

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 06-10-2009 00h39
Merci, j'ai pris bonne note pour les pièces-jointes futures.
Hors Ligne
Rapport   Haut 

Re: Créer et Utiliser des listes de choix successives
#4
Accro XLPages

Inscription: 09/01/2008
De Montréal, Québec

Messages: 461

Système d'exploitation:
PC
Version Excel utilisée:
97 à 2016
Posté le : 06-10-2009 18h20
Bonjour,

J'ai modifié un très vieux module pour l'adapter au problème posé.
Ce classeur est une proposition de solution, pas une solution définitive.

Au lieu de listes je propose un menu à niveaux multiples.
Voir l'exemple dans le classeur joint.
Peaufinage impérieux, je sais.

Voir Feuille 2, cellule B1 en rouge et cliquer avec bouton droit.
Et Feuille 1 pour explication sur la construction de la liste de formation du menu.

Pour réinitialiser le menu : exécuter la procédure ValiderStructure() du module modNoyau.

Guy

Pièce jointe:
zip triModelesLieuDispo_Mod.zip   [ Taille: 45.26 Ko - Téléchargements: 5172 ]

Hors Ligne
Rapport   Haut 

Re: Créer et Utiliser des listes de choix successives
#5
Régulier XLPages

Inscription: 05/10/2009
De 33210-Gironde

Messages: 49

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 06-10-2009 19h10
Bonjour Guy,

Merci pour ton aide.
Si je comprends à peu près, il faut que je crée les 3 colonnes "niveau", marque", "lien" à côté de mon tableau initial, et que je renseigne ces colonnes ? C'est bien çà ?
Petit soucis, quand je clique (droit) sur B1, j'ai un message d'erreur : Erreur d'exécution 5, argument ou appel de procédure incorrect.
Comment réparer ?

Autre inquiétude :
Ici, il s'agit d'un exemple "léger" de mon tableau.
En réalité, les données "marque" modèle" et "lieu" sont dans un tableau où il y a 24 colonnes (autres données qui ne sont pas destinées à cet usage) et malgré que je n'en soie qu'au début, j'ai déjà plus de 265 modèles (autant de liens hypertexte) pour une vingtaine de marques, sur 45 lieux différents.
Et çà va augmenter ......
Si je dois renseigner un tableau parallele .....
Bon, s'il faut ....
Hors Ligne
Rapport   Haut 

Re: Créer et Utiliser des listes de choix successives
#6
Accro XLPages

Inscription: 09/01/2008
De Montréal, Québec

Messages: 461

Système d'exploitation:
PC
Version Excel utilisée:
97 à 2016
Posté le : 06-10-2009 19h36
Bonjour,

Pas de surprise.
As-tu essayé : Pour réinitialiser le menu : exécuter la procédure ValiderStructure() du module modNoyau.

Le tableau en feuil1 (renommé au niveau du code comme feuilBoutons) est dynamique, il peut contenir autant de lignes que tu le souhaites.

Tu n'as pas à créer quoi que ce soit, seulement efface les ligne sous les en-têtes (Niveau, Marque, Lien) en ligne 2 (Laisse la ligne qui porte Niveau: 1 Marque : Marques "")  et place les informations qui concernent ton truc sous cette ligne (en ligne 3).

Examine le menu résultant et par exemple si tu as N marques, il doit y avoir N niveaux 2.
Pour chaque Niveau 2 il y aura autant de Niveau 3 que de modèles de la marque.

Exemple :
Niveau  Marque Lien
2          GM  
3          Modèle1 http:// truc.chose
3          Modele 2 http.....
3         .....
2         VolksWagen
3         Rabbit http://...
3         Passat
3         ....
2         Chrysler
3         Modèle1 ....
3         Modèle2 .....
etc
 
La chose à retenir : les Marques ont le no. de niveau 2, les modèles le no. de niveau 3
C'est tout.

Une fois saisies les marques, les modèles et les liens, exécute la procédure citée : ValiderStructure()

Guy


Hors Ligne
Rapport   Haut 

Re: Créer et Utiliser des listes de choix successives
#7
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1483

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016
Posté le : 06-10-2009 21h05
Bonsoir Gmarin, Guy, le Forum,

Ci-joint une autre façon de faire, mais toujours à base de PopUp CommandBars comme toi Guy

Dans le fichier en pièce jointe, j'ai appliqué le code suivant :

DANS LE MODULE DE CODE DE LA FEUILLE 2

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Application.Intersect(Target, Columns(1)) Is Nothing Then
        AffichMenuD Target(1).Text
    End If
End Sub

DANS UN MODULE DE CODE STANDARD
(exemple : Module1)
'----------------------------------------
' myDearFriend!  -  www.mdf-xlpages.com
'----------------------------------------
Sub AffichMenuD(T As String)
Dim CB As CommandBar
Dim M As CommandBarPopup, M1 As CommandBarPopup, M2 As CommandBarButton
Dim TabTemp
Dim L&
    If T = "" Then Exit Sub
    'On mémorise la liste des données
    With Sheets("Feuil1")
        L = .Cells(.Rows.Count, 1).End(xlUp).Row
        TabTemp = .Range(.Cells(2, 1), .Cells(L, 3)).Value
    End With
    'On crée une barre de menu temporaire
    On Error Resume Next
    Application.CommandBars("MenuD").Delete
    On Error GoTo 0
    Set CB = Application.CommandBars.Add("MenuD", msoBarPopup, , True)
    For L = 1 To UBound(TabTemp, 1)
        If UCase(TabTemp(L, 2)) Like T & "*" Then
            '1er niveau du menu
            Set M = ElmtMenu(TabTemp(L, 2), CB, True)
            '2ème niveau du menu
            Set M1 = ElmtMenu(TabTemp(L, 3), M, True)
            '3ème niveau du menu
            Set M2 = ElmtMenu(TabTemp(L, 1), M1, False)
            M2.OnAction = "'SuivreLien " & L & "'"
        End If
    Next L
    'Affiche le menu
    With Application.CommandBars("MenuD")
        If .Controls.Count > 0 Then .ShowPopup
        .Delete
    End With
End Sub

Private Function ElmtMenu(ByVal T$, MenuParent As Object, Pop As Boolean) As Object
Dim M As CommandBarControl
    On Error Resume Next
    Set M = MenuParent.Controls(T)
    On Error GoTo 0
    If M Is Nothing Then
        Set M = MenuParent.Controls.Add(IIf(Pop, msoControlPopup, msoControlButton), , , , True)
        M.Caption = T
    End If
    Set ElmtMenu = M
End Function

Sub SuivreLien(L As Long)
    ThisWorkbook.FollowHyperlink Sheets("Feuil1").Cells(L + 1, 1).Hyperlinks(1).Address
End Sub

Un paramètre à ne pas négliger toutefois : si la liste des éléments est vraiment longue, il faudra s'attendre à un léger délai avant affichage du menu déroulant lors du clic dans la cellule.

Cordialement,

Nb: je déplace ce fil qui ne s'adresse pas vraiment au débutant, dans le forum Principal Excel.

Pièce jointe:
zip PourGmarin.zip   [ Taille: 35.50 Ko - Téléchargements: 336 ]
Edité par myDearFriend! le 06/10/2009 21:33:15

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Créer et Utiliser des listes de choix successives
#8
Régulier XLPages

Inscription: 05/10/2009
De 33210-Gironde

Messages: 49

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 07-10-2009 01h15
Citation :
Guy a écrit : Bonjour,

Pas de surprise.
As-tu essayé : Pour réinitialiser le menu : exécuter la procédure ValiderStructure() du module modNoyau.

Le tableau en feuil1 (renommé au niveau du code comme feuilBoutons) est dynamique, il peut contenir autant de lignes que tu le souhaites.

Tu n'as pas à créer quoi que ce soit, seulement efface les ligne sous les en-têtes (Niveau, Marque, Lien) en ligne 2 (Laisse la ligne qui porte Niveau: 1 Marque : Marques "")  et place les informations qui concernent ton truc sous cette ligne (en ligne 3).

Examine le menu résultant et par exemple si tu as N marques, il doit y avoir N niveaux 2.
Pour chaque Niveau 2 il y aura autant de Niveau 3 que de modèles de la marque.

Exemple :
Niveau  Marque Lien
2          GM  
3          Modèle1 http:// truc.chose
3          Modele 2 http.....
3         .....
2         VolksWagen
3         Rabbit http://...
3         Passat
3         ....
2         Chrysler
3         Modèle1 ....
3         Modèle2 .....
etc
 
La chose à retenir : les Marques ont le no. de niveau 2, les modèles le no. de niveau 3
C'est tout.

Une fois saisies les marques, les modèles et les liens, exécute la procédure citée : ValiderStructure()

Guy


Ok, çà fonctionne bien. Et çà me conviendrait bien ....
Mais il faut donc que je réécrive mes données présentes à gauche dans mes colonnes "lieu", "marque", "modèle" sous une autre forme, dans les 3 colonnes que tu as disposées à droite : "niveau", "marque" et "lien" ...... et comme dit dans ma 1° réponse, les 3 colonnes que j'ai présenté ne sont qu'un exemple, en réalité elles sont une partie de 24 colonnes d'un tableau renseignant d'autres données, avec déjà plus de 250 lignes ....
Ou alors, je ne comprends pas, mais les données à gauche ne vont pas aller seules depuis mes colonnes vers celles de droite !
Rassures-moi.

Gmarin

Hors Ligne
Rapport   Haut 

Re: Créer et Utiliser des listes de choix successives
#9
Régulier XLPages

Inscription: 05/10/2009
De 33210-Gironde

Messages: 49

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 07-10-2009 01h26
Citation :
myDearFriend! a écrit : Bonsoir Gmarin, Guy, le Forum,

Ci-joint une autre façon de faire, mais toujours à base de PopUp CommandBars comme toi Guy

Dans le fichier en pièce jointe, j'ai appliqué le code suivant :

DANS LE MODULE DE CODE DE LA FEUILLE 2

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Application.Intersect(Target, Columns(1)) Is Nothing Then
        AffichMenuD Target(1).Text
    End If
End Sub

DANS UN MODULE DE CODE STANDARD
(exemple : Module1)
'----------------------------------------
' myDearFriend!  -  www.mdf-xlpages.com
'----------------------------------------
Sub AffichMenuD(T As String)
Dim CB As CommandBar
Dim M As CommandBarPopup, M1 As CommandBarPopup, M2 As CommandBarButton
Dim TabTemp
Dim L&
    If T = "" Then Exit Sub
    'On mémorise la liste des données
    With Sheets("Feuil1")
        L = .Cells(.Rows.Count, 1).End(xlUp).Row
        TabTemp = .Range(.Cells(2, 1), .Cells(L, 3)).Value
    End With
    'On crée une barre de menu temporaire
    On Error Resume Next
    Application.CommandBars("MenuD").Delete
    On Error GoTo 0
    Set CB = Application.CommandBars.Add("MenuD", msoBarPopup, , True)
    For L = 1 To UBound(TabTemp, 1)
        If UCase(TabTemp(L, 2)) Like T & "*" Then
            '1er niveau du menu
            Set M = ElmtMenu(TabTemp(L, 2), CB, True)
            '2ème niveau du menu
            Set M1 = ElmtMenu(TabTemp(L, 3), M, True)
            '3ème niveau du menu
            Set M2 = ElmtMenu(TabTemp(L, 1), M1, False)
            M2.OnAction = "'SuivreLien " & L & "'"
        End If
    Next L
    'Affiche le menu
    With Application.CommandBars("MenuD")
        If .Controls.Count > 0 Then .ShowPopup
        .Delete
    End With
End Sub

Private Function ElmtMenu(ByVal T$, MenuParent As Object, Pop As Boolean) As Object
Dim M As CommandBarControl
    On Error Resume Next
    Set M = MenuParent.Controls(T)
    On Error GoTo 0
    If M Is Nothing Then
        Set M = MenuParent.Controls.Add(IIf(Pop, msoControlPopup, msoControlButton), , , , True)
        M.Caption = T
    End If
    Set ElmtMenu = M
End Function

Sub SuivreLien(L As Long)
    ThisWorkbook.FollowHyperlink Sheets("Feuil1").Cells(L + 1, 1).Hyperlinks(1).Address
End Sub

Un paramètre à ne pas négliger toutefois : si la liste des éléments est vraiment longue, il faudra s'attendre à un léger délai avant affichage du menu déroulant lors du clic dans la cellule.

Cordialement,

Nb: je déplace ce fil qui ne s'adresse pas vraiment au débutant, dans le forum Principal Excel.

Epatant, c'est exactement le résultat que j'escomptait.
Je vais m'attacher à l'analyser pour bien comprendre, et essayer de l'adapter à mon projet réel .
Je remercie Guy pour son attention, et je garde néanmoins son exemple.

Gmarin

Hors Ligne
Rapport   Haut 

Re: Créer et Utiliser des listes de choix successives
#10
Régulier XLPages

Inscription: 05/10/2009
De 33210-Gironde

Messages: 49

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 07-10-2009 07h41
Bonjour MyDearFriend,

J'ai essayé d'adapter la solution proposée à mon projet (qui diffère de l'exemple), et j'ai besoin d'éclaircissements.
Les colonnes des données ne sont pas adjacentes, et la ligne de départ n'est pas la 1, mais la 2.
J'ai joint l'exemple.
Donc, il va falloir que je change certainement des valeurs dans la ligne L=.Cells(.Rows.Count, "2" puisqu'on est en ligne 2.
il va falloir aussi que je change certainement des valeurs dans la ligne "TabTemp=" et là je cale !
la méthode "union" ne semble pas convenir ....
Ainsi que modifier dans "Sub SuivreLien", Cells(L+1, 1) puisque la colonne portant le lien est en 6 donc je pense (L+2, 6).
J'avais fait une erreur dans l'exemple originel, la colonne lieu n'a pas le lien, c'est uniquement la colonne modèle (colonne 6, maintenant, au lieu de la 3 précédement)

Question supplémentaire : les liens hypertexte peuvent-ils être affichés directement dans la feuille Excel, plutôt que dans l'IExplorer ?










Pièce jointe:
zip PourGmarin.zip   [ Taille: 30.07 Ko - Téléchargements: 297 ]
Edité par gmarin le 07/10/2009 18:58:15
Hors Ligne
Rapport   Haut 


Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Qui consulte actuellement ce sujet ?   1 Utilisateur(s) anonymes