Menu déroulant (ou vertical/horizontal) en fonction de la structure d'un répertoire

erics83

XLDnaute Impliqué
Bonjour,

J'ai lu avec un très intérêt les tutos de Boisgontier (merci JB ;))sur les menus déroulants.

Pensez-vous possible la création d'un menu déroulant en fonction de la structure d'un répertoire ?

J'ai pensé à utiliser la fonction "DIR" me permettant de lister le contenu d'un répertoire, cela fonctionne, mais ensuite je n'arrive pas à l'utiliser pour la mettre sous forme de menus....

L'idée étant d'avoir une lecture plus rapide : j'ai de nombreux fichiers (que je ne range pas toujours bien...) et donc, cliquer sur l'explorateur, cliquer sur le dossier (où je pense que mon fichier se trouve), pour m'apercevoir qu'il n'est pas là.....alors qu'avec un menu déroulant, ce sera plus rapide (surtout pour les retours en arrière) et l'idéal serait qu'un lien hypertexte se fasse sur le fichier, ainsi si je navigue dans le menu et que je trouve mon fichier, je clique dessus et il s'ouvre...

Pour avoir une petite idée de la structure, j'ai mis un exemple très simple en PJ....

En vous remerciant pour votre aide....
 

Pièces jointes

  • Essai Menu répertoire.xlsx
    9.8 KB · Affichages: 68
Dernière édition:

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Menu déroulant (ou vertical/horizontal) en fonction de la structure d'un réperto

Bonsoir,

-Onglet Développeur
-Cliquer sur l'équerre
-Cliquer sur un ListBox
-Propriétés


SansTitre.png

On peut créer des ListBox Survol mais ce n'est pas simple à gérer

http://boisgontierjacques.free.fr/fichiers/Formulaire/FormCascadeListBoxSurvol.xls

JB
 

Pièces jointes

  • SansTitre.png
    SansTitre.png
    80.3 KB · Affichages: 88
Dernière édition:

erics83

XLDnaute Impliqué
Re : Menu déroulant (ou vertical/horizontal) en fonction de la structure d'un réperto

J'ai essayé des listbox en cascade qui s'affichent (ou non) en fonction du niveau....mais c'est moins beau que la photo du précédent post....et surtout, je ne suis pas arrivé à les afficher avec survol souris....

En vous remerciant pour votre aide,
 

Pièces jointes

  • ArborescenceRepertoireMenuV3.xls
    86.5 KB · Affichages: 50

erics83

XLDnaute Impliqué
Re : Menu déroulant (ou vertical/horizontal) en fonction de la structure d'un réperto

Bonjour JB,

Nos messages se sont croisés.....super merci, je n'avais pas l'onglet "développeur", c'est pourquoi je ne m'en sortait pas....MERCI :D !!!

Pensez vous qu'il faille que je continue mes investigations (cf le post 15), ou bien ce ne sera pas possible avec Excel ?

J'essaye d'utiliser les visible.true et .false pour essayer un affichage "différent"..pour l'instant je cherche à régler la hauteur des listbox en fonction de leur contenu....(=si 2 lignes, hauteur pour 2 lignes, si 10 lignes, hauteur pour 10 lignes, etc...) et......j'ai trouvé en mettant
Code:
 listefichiers dossier.Path
  Me.ListBox2.Height = (n * 15)

En vous remerciant pour votre aide,
 
Dernière édition:

erics83

XLDnaute Impliqué
Re : Menu déroulant (ou vertical/horizontal) en fonction de la structure d'un réperto

Merci JB, Une fois de plus, nos messages se sont croisés....:D

De mon côté, j'ai trouvé comment regler la hauteur de la listbox en fonction du nombre de ligne (cf mon dernier message), et de votre côté, vous m'avez donné une piste incroyable....

En effet, imaginons les 6 listbox (visible=false), et lors du survol souris, visible=true, et qu'elles s'affichent au fur et à mesure du survol, c'est exactement ce que je cherchais à faire.....

Quand vous dites "pas simple à gérer", cela veut-il dire le survol souris ? car si j'ai bien compris, le survol se fait pour chaque Listbox, donc "normalement" elles sont indépendantes....?

J'ai l'impression que nous sommes près de la solution....

En vous remerciant pour votre aide,
 

erics83

XLDnaute Impliqué
Re : Menu déroulant (ou vertical/horizontal) en fonction de la structure d'un réperto

Merci JB,

J'ai essayé de modifier votre code, et je tatonne, mais j'ai l'impression que je suis sur la bonne piste....je suis arrivé à mettre une troisième Listbox avec survol....

Je continue de chercher, mais le résultat commence à venir.....

Merci pour votre aide et/ou éclairages....
 

Pièces jointes

  • Copie de FormCascadeListBoxSurvol.xls
    56.5 KB · Affichages: 67
Dernière édition:

erics83

XLDnaute Impliqué
Re : Menu déroulant (ou vertical/horizontal) en fonction de la structure d'un réperto

Bonsoir JB,

Je suis arrivé au 6ème niveau....

Reste plus qu'à mettre les Listbox dans la feuille Excel (mais je crains que les labels (=curseurs) ne puissent suivre...: que je ne puisse les mettre...), et de lister dans les colonnes A à F les dossiers et/fichiers.....et les liens vers les fichiers, on pourrait continuer à la mettre en Listbox10...

Et là, je pense que le résultat sera là....:D

Une dernière petite aide ?

pour les visible=true/false, je pense qu'en les mettant en début de code, on devrait pouvoir "jouer" avec...

En vous remerciant pour votre aide/idées
 

Pièces jointes

  • FormCascadeListBoxSurvol 6 niveaux.xls
    77.5 KB · Affichages: 27

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Menu déroulant (ou vertical/horizontal) en fonction de la structure d'un réperto

Essai sans survol

Pour le survol, il y a également le pb du temps de réponse

Code:
Private Sub UserForm_Initialize()
  racine = "c:\"
  Set fs = CreateObject("Scripting.FileSystemObject")
  Set dossier = fs.GetFolder(racine)
  Me.ListBox1.Clear
  Me.ListBox2.Clear
  Me.ListBox3.Clear
  Me.ListBox4.Clear
  Me.ListBox5.Clear
  Me.ListBox6.Clear
  n = 0
  For Each d In dossier.SubFolders
       Me.ListBox1.AddItem d.Name
       Me.ListBox1.List(n, 1) = dossier.Path
       n = n + 1
   Next
   Me.TextBox1 = dossier.Path
   listefichiers dossier.Path
End Sub

Private Sub b_debut_Click()
  racine = ChoixDossier()     ' ou un répertoire C:\xxx e.g.
  Set fs = CreateObject("Scripting.FileSystemObject")
  Set dossier = fs.GetFolder(racine)
  Me.ListBox1.Clear
  Me.ListBox2.Clear
  Me.ListBox3.Clear
  Me.ListBox4.Clear
  Me.ListBox5.Clear
  Me.ListBox6.Clear
  n = 0
  For Each d In dossier.SubFolders
       Me.ListBox1.AddItem d.Name
       Me.ListBox1.List(n, 1) = dossier.Path
       n = n + 1
   Next
   Me.TextBox1 = dossier.Path
   listefichiers dossier.Path
End Sub

Private Sub ListBox1_Click()
  rép = Me.ListBox1.Column(1) & "\" & Me.ListBox1
  Set fs = CreateObject("Scripting.FileSystemObject")
  Set dossier = fs.GetFolder(rép)
  Me.ListBox2.Clear
  Me.ListBox3.Clear
  Me.ListBox4.Clear
  Me.ListBox5.Clear
  Me.ListBox6.Clear
  n = 0
  On Error Resume Next
  For Each d In dossier.SubFolders
    Me.ListBox2.AddItem d.Name
    Me.ListBox2.List(n, 1) = dossier.Path
    n = n + 1
  Next
  Me.TextBox1 = dossier.Path
  listefichiers dossier.Path
End Sub

Private Sub ListBox2_Click()
  rép = Me.ListBox2.Column(1) & "\" & Me.ListBox2
  Set fs = CreateObject("Scripting.FileSystemObject")
  Set dossier = fs.GetFolder(rép)
  Me.ListBox3.Clear
  Me.ListBox4.Clear
  Me.ListBox5.Clear
  Me.ListBox6.Clear
  n = 0
  For Each d In dossier.SubFolders
       Me.ListBox3.AddItem d.Name
       Me.ListBox3.List(n, 1) = dossier.Path
       n = n + 1
  Next
  Me.TextBox1 = dossier.Path
  listefichiers dossier.Path
End Sub


Private Sub ListBox6_Click()
  rép = Me.ListBox6.Column(1) & "\" & Me.ListBox6
  Set fs = CreateObject("Scripting.FileSystemObject")
  Set dossier = fs.GetFolder(rép)
  Me.TextBox1 = dossier.Path
  listefichiers dossier.Path
End Sub

Sub listefichiers(rép)
      Me.ListBox10.Clear
      nf = Dir(rép & "\*.*")
      n = 0
      Do While nf <> ""
        Me.ListBox10.AddItem nf
        Me.ListBox10.List(n, 1) = rép
        n = n + 1
        nf = Dir
      Loop
      For i = 1 To 6
        If Me("listbox" & i).ListCount = 0 Then
          Me("listbox" & i).Visible = False
        Else
          Me("listbox" & i).Visible = True
          Position = Me("listbox" & i).Left + Me("listbox" & i).Width
        End If
      Next i
      Me.ListBox10.Left = Position + 20
      Me.TextBox2.Left = Position + 20
      Me.TextBox2.Width = Me.ListBox10.Width
      Me.TextBox2 = n & " fichiers"
      Me.TextBox1.Width = Position - 65
      Me.ListBox10.Visible = (Me.ListBox10.ListCount > 0)
      Me.TextBox2.Visible = (Me.ListBox10.ListCount > 0)
      Me.Width = Position + IIf(Me.ListBox10.Visible, Me.ListBox10.Width, 0) + 40
End Sub

Private Sub ListBox10_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
  ThisWorkbook.FollowHyperlink Me.ListBox10.Column(1) & "\" & Me.ListBox10
End Sub

Private Sub ListBox10_Click()
   Me.TextBox1 = Me.ListBox10.Column(1) & "\" & Me.ListBox10
End Sub

Function ChoixDossier()
    If Val(Application.Version) >= 10 Then
       With Application.FileDialog(msoFileDialogFolderPicker)
        .InitialFileName = ActiveWorkbook.Path & "\"
        .Show
        If .SelectedItems.Count > 0 Then
           ChoixDossier = .SelectedItems(1)
        Else
           ChoixDossier = ""
        End If
       End With
     Else
       ChoixDossier = InputBox("Répertoire?")
     End If
End Function

JB
 

Pièces jointes

  • ArborescenceRepertoireMenuForm.xls
    120.5 KB · Affichages: 41
Dernière édition:

erics83

XLDnaute Impliqué
Re : Menu déroulant (ou vertical/horizontal) en fonction de la structure d'un réperto

Super merci JB,

On commence à se rapprocher du résultat....j'essaye de mettre les Listbox sur 1 feuille Excel et de voir si possibilité de mettre le survol....évitant ainsi le USF....
J'ai bien noté le temps que risquait de prendre le survol, mais....si on sort la liste dès le début dans les colonnes A:F, "normalement" le code lit ces cellules....

Merci pour votre aide,
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix

Pièces jointes

  • CreeOrgaArborescenceDossierShapes.zip
    838.3 KB · Affichages: 46
  • SansTitre.png
    SansTitre.png
    14.6 KB · Affichages: 45
Dernière édition:

erics83

XLDnaute Impliqué
Re : Menu déroulant (ou vertical/horizontal) en fonction de la structure d'un réperto

Merci JB,

Perso j'étais en train d'essayer de compiler vos différents codes :D :

Sur le fichier "Essai Eric ArborescenceRepertoireMenu" un essai permettant de régler la hauteur des listbox en fonction de leur contenu avec des listbox dans une feuille Excel, et "FormCascadeListBoxSurvol 6 niveaux essai eric" qui ressemble un peu à ce que je recherchais : positionnement des listbox en fonction de la sélection, et j'étais justement en train de chercher :
Comment mettre ces listbox dans une feuille Excel (=éviter de passer par un USF)
Comment compiler vos codes : ne pas passer par les colonnes A:D et le listage des dossiers/sous dossiers et chercher plutôt dans le path, comme vous l'avez fait dans ArborescenceRepertoireMenu.

Et je cherche toujours.......:(
(en ouvrant, apparemment nos messages se sont croisés : vous disiez que vous aviez fait un essai qui n'est pas très/trop visuel....je n'ai pas eu le temps de lire votre message, ni de télécharger le fichier.....)
Merci pour votre aide,
 

Pièces jointes

  • FormCascadeListBoxSurvol 6 niveaux essai eric1.xls
    81 KB · Affichages: 22
  • ArborescenceRepertoireMenu essai eric.xls
    70 KB · Affichages: 20
Dernière édition:

erics83

XLDnaute Impliqué
Re : Menu déroulant (ou vertical/horizontal) en fonction de la structure d'un réperto

Je continue mes essais....je suis "arrivé" à récupérer le niveau1 d'un répertoire, mais je n'arrive pas à avoir les niveaux 2,3, etc....

Et je ne comprends pas pourquoi.....

Merci pour votre aide,
 

Pièces jointes

  • FormCascadeListBoxSurvol 6 niveaux essai eric V1.xls
    83.5 KB · Affichages: 22

erics83

XLDnaute Impliqué
Re : Menu déroulant (ou vertical/horizontal) en fonction de la structure d'un réperto

Bonjour,

A force d'essais, je me rapproche de la solution finale....:D

J'ai juste un problème avec le positionnement et la taille exacte des listbox....si vous pouviez me venir en aide....

Merci,

Merci JB, j'ai vu que vous avez modifié votre message et vous avez LA solution pour le positionnement, mais je n'arrive pas à la reproduire....et vous aviez raison pour le temps de latence, mais il est "raisonnable"

Merci pour votre aide,
 

Pièces jointes

  • ArborescenceRepertoireMenu essai eric presok.xls
    72.5 KB · Affichages: 22

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Menu déroulant (ou vertical/horizontal) en fonction de la structure d'un réperto

Bonjour,

Essai avec Rollover (pb)

Réponse #27

Positionnement de ListBox2

Déclarer x1, y1,x2,y2,..... en tête de module
Dim x1,y1

Dans la procédure ListBox1_MouseMove

Private Sub Listbox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
x1= X
y1 = Y
End Sub

Dans ListBox1, pour positionner ListBox2
ListBox2.Top = ListBox1.Top + y1

Dans ListBox2, pour positionner ListBox3
ListBox3.Top = ListBox2.Top + y2
JB
 

Pièces jointes

  • ArborescenceRepertoireMenuFormyy.xls
    138.5 KB · Affichages: 30
Dernière édition:

erics83

XLDnaute Impliqué
Re : Menu déroulant (ou vertical/horizontal) en fonction de la structure d'un réperto

SUPER MERCI JB,

Merci pour les explications et compréhension logique, notamment manipulation Mousemove...

En pj, j'ai mis votre fichier, agrémenté jusqu'à un 8 ème niveau, car j'ai la manie de mettre pas mal de sous-sous-sous....dossiers....:eek:

Merci pour votre aide, une fois de plus....

Je vais essayer de voir si on ne pourrait pas changer le "look", car le menu horizontal prend pas mal de place....j'ai vu sur le net (mais en HTLM) qu'il existe des menus en accordéon....qui prennent moins de place, (mais peut-être qu'ils ne pourront pas avoir beaucoup de niveaux....).

Merci pour votre aide,
 

Pièces jointes

  • ArborescenceRepertoireMenu8niveaux.xls
    79 KB · Affichages: 25

Discussions similaires

Réponses
8
Affichages
258
Réponses
1
Affichages
259