Comment afficher le contenu d'un dossier dans une treeview [Résolu]

Messages postés
166
Date d'inscription
dimanche 22 janvier 2012
Dernière intervention
30 juillet 2015
- - Dernière réponse : cco86260
Messages postés
166
Date d'inscription
dimanche 22 janvier 2012
Dernière intervention
30 juillet 2015
- 10 déc. 2013 à 09:13
Bonjour a tous,

Suite à plusieurs recherche sans résultat, je m'en remet à vous.

Voici mon soucis :

J'ai un USF composé de :

Une ComboBox qui m'affiche les feuilles d'un classeur
4 boutons servant à :
Convertir en PDF (qui sert à convertir la feuille sélectionner dans le ComboBox)
Créer un dossier (qui créer un dossier)
Supprimer une sélection (supprime la sélection soit dans le combo soit dans le treeview <ce code est inexistant pour le moment>
Fermer
Puis une TreeView qui me servirait à afficher les élément contenu dans un dossier
ex: le dossier par défaut est "POINTAGES" c'est sur ce dossier que doit agir le TreeView

Dans ce dossier sont situer d'autre dossier qui eux contiennent les fichiers

Je voudrais donc savoir: Comment afficher l'arborescence du dossier "POINTAGES" dans cette TreeView ?

De plus est il possible, dans le cas ou une feuille ai été converti par erreur, de la supprimer en la sélectionnant dans le treeview ?

Merci a tous pour votre aide

Bonne journée

Christian
--
Afficher la suite 

Votre réponse

13 réponses

Messages postés
5585
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
6 décembre 2018
cs_Le Pivert
Messages postés
5585
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
6 décembre 2018
-
Voir aussi ceci,

Il y a un fichier exemple à télécharger

http://silkyroad.developpez.com/VBA/XlOrganigramme/
Commenter la réponse de cs_Le Pivert
Messages postés
166
Date d'inscription
dimanche 22 janvier 2012
Dernière intervention
30 juillet 2015
0
Merci
Salut cs_Le Pivert

Donc je viens de regarder et essayer ce que tu m'as proposé mais c'est non concluant, sur un fichier vierge, j'ai poser un USF, un boutons et une TreeView. Le code fonctionne mais ne donne pas le résultat attendu.

Voici le code :

 
Option Explicit

Dim tvn As Node


Private Sub CommandButton1_Click()
Dim monrep As String

TreeView1.Nodes.Clear
' on définit ici le répertoire à "déployer"
monrep = "C:\Users\Christian\Documents\POINTAGES"

If Right$(monrep, 1) <> "\" Then monrep = monrep$ + "\"

Set tvn = TreeView1.Nodes.Add(, vbNullString, monrep, monrep)
deployons monrep
End Sub


Sub deployons(ByVal chemin As String)
Dim nomfic As String, numfic As Integer, tp As String, i As Integer

If Right$(chemin, 1) <> "\" Then chemin = chemin & "\"
nomfic = Dir$(chemin, vbDirectory)
numfic = 1

Do While nomfic <> ""
If nomfic <> "." And nomfic <> ".." Then
tp = chemin & nomfic
If GetAttr(tp) And vbDirectory Then
Set tvn = TreeView1.Nodes.Add(chemin, tvwChild, tp + "\", nomfic)
deployons tp
nomfic = Dir$(chemin, vbDirectory)
For i = 2 To numfic
nomfic = Dir$
Next
End If
End If
nomfic = Dir$: numfic = numfic + 1
Loop
End Sub


'Récupère le chemin du dossier lorsque vous double cliquez sur l'élément
Private Sub TreeView1_DblClick()
MsgBox TreeView1.SelectedItem.FullPath
End Sub




Mon but étant que ma TreeView m'affiche en temps réel le contenu du dossier "POINTAGES" qui lui contient les sous-dossier "Pointages-S1", "Pointages-S2" qui eux contienne les PDFs.

Merci de ton aide

Christian

--
Commenter la réponse de cco86260
Messages postés
166
Date d'inscription
dimanche 22 janvier 2012
Dernière intervention
30 juillet 2015
0
Merci
Correction faite, un TreeView n'est peut être pas la solution, une ListView peut être...

--
Commenter la réponse de cco86260
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Bonjour
Une listvew ne saurait remplacer une treeview, qui affiche, elle une arborescence.
Dans le code que tu as monjtré (de ta treeview), je ne vois aucune condition Else (pour traiter le contenu des dossiers trouvés) ! ===>>> Elle M A N Q U E GRAVEMENT !

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Si tu avais bien lu le lien en cause, tu aurais vu :
que l'auteur (Il se trouve que c'est ... euh ... moi-même ...) a précisé :
Comment afficher l'arborescence de dossiers dans un TreeView ?
Je n'y avais traité QUE les DOSSIERS.
En cherchant sur CE forum (et non "là-bas") tu devrais trouver une discussion dans laquelle j'ai donné du plus complet, à savoir : dossiers, sous-dossiers et leurs fichiers et (cerise sur le gâteau) avec possibilité de filtrer sur les noms.
A toi d'utiliser le moteur de recherche de ce forum. Si tu n'y parviens vraiment pas (à trouver), je recommencerai ce travail.
Commenter la réponse de ucfoutu
Messages postés
166
Date d'inscription
dimanche 22 janvier 2012
Dernière intervention
30 juillet 2015
0
Merci
Bonjour ucfoutu

Bon, je vais chercher la solution, et en même m'apprendre. Il est vrai que j'ai vite de me perdre la dedans (niveau VBA) mais bon.. je vais persister... je ne dois pas utiliser les bon mot clé.

Alors je cherche, trouve les bouts de code et met les mains dans le camboui... et si ça veut pas faudra que ça dise pourquoi... ;)

Merci a toi et à toute l'équipe

--
Commenter la réponse de cco86260
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Bon...
Je viens de m'y "remettre"
Un peu bâclé, mais voilà ===>>>

Dans un module standard :
Public tvn As Node
Public Sub deployons(O As Object, ByVal chemin As String, montv As Object, quoi As String, ficflt As String, dosflt As String)
If Right$(chemin, 1) <> "\" Then chemin = chemin$ + "\"
montv.Nodes.Clear
MsgBox "oui"
Set tvn = montv.Nodes.Add(, vbNullString, chemin, chemin)
deployons1 O, chemin, montv, quoi, ficflt, dosflt
End Sub

Private Sub deployons1(ByVal O As Object, ByVal chemin As String, montv As Object, quoi As String, ficflt As String, dosflt As String)
Dim nomfic As String, numfic As Integer, tp As String, i As Integer
If Right$(chemin, 1) <> "\" Then chemin = chemin & "\"
nomfic = Dir$(chemin, vbDirectory)
numfic = 1
Do While nomfic <> ""
If nomfic <> "." And nomfic <> ".." Then
tp = chemin & nomfic
If (GetAttr(tp) And vbDirectory) And (quoi = "D" Or quoi = "DF") And nomfic Like dosflt Then
Set tvn = montv.Nodes.Add(chemin, tvwChild, tp + "\", nomfic)
deployons1 O, tp, montv, quoi, ficflt, dosflt
nomfic = Dir$(chemin, vbDirectory)
For i = 2 To numfic
nomfic = Dir$
Next
ElseIf (quoi = "DF" Or quoi = "F") And nomfic Like ficflt Then
Set tvn = O.TreeView1.Nodes.Add(chemin, tvwChild, tp, nomfic)
End If
End If
nomfic = Dir$: numfic = numfic + 1
Loop
End Sub

Et là où tu as inséré la treeview1, depuis un CommanButton1 :

Private Sub CommandButton2_Click()
Dim monrep As String, filtre_fichier As String, filtre_dossier As String, quoi As String
monrep = "d:\monoutil\" ' on définit ici le répertoire à "déployer"
quoi = "DF"
' quoi = "D"
'quoi = "F"
filtre_fichier = "*.*"
filtre_dossier = "*ra*"

deployons Me, monrep, TreeView1, quoi, filtre_fichier, filtre_dossier
End Sub

Tu auras deviné, hein ...
Selon que tu commentes ou décommentes ===>>> DF pour avoir dossiers et Fichiers, D pour dossiers seuls, F pour fichiers seuls
Et tu mets le filtre que tu veux toi ...


Regarde ensuite ce qui se passe en double cliquant sur un article de la treeview
Private Sub TreeView1_DblClick()
MsgBox TreeView1.SelectedItem.FullPath
End Sub

Voilà.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
Commenter la réponse de ucfoutu
Messages postés
166
Date d'inscription
dimanche 22 janvier 2012
Dernière intervention
30 juillet 2015
0
Merci
Bonsoir,

Alors le code fonctionne avec le résultat attendu a quelque détail près : (je t'explique le fonctionnement de cette partie de mon application)

La fenêtre est composée comme suit :

une ComboBox: elle m'affiche les feuilles à convertir
un bouton "creer un dossier" : (comme son nom l'indique)
un bouton "convertir en PDF": lui fait la conversion et me les stock dans un sous-dossier créer précédemment qui lui se trouve dans le dossier "POINTAGES" qui lui est ça racine.
Une treeview: elle devrait normalement m'afficher en temps réel (sans rien cliquer) le contenu de ce dossier "POINTAGES" sans message intermédiaire.

Me suis-je bien expliqué?

n'hésite pas à me reprendre si tu ne m'as pas compris, ton aide m'est très précieuse ;)

Bonne soirée à toi

Christian

--
cco86260
Messages postés
166
Date d'inscription
dimanche 22 janvier 2012
Dernière intervention
30 juillet 2015
-
Si tu le souhaite je peux te mettre les codes de chaque élément de mon USF si tu veux faire des essais
Commenter la réponse de cco86260
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Non.
Je ne suis venu et intervenu ici que pour traiter ce qui est exposé par le titre, à savoir :
"Comment afficher le contenu d'un dossier dans une treeview"
confirmé par :
"Je voudrais donc savoir: Comment afficher l'arborescence du dossier "POINTAGES" dans cette TreeView ?"
Sujet que j'ai donc traité.
En te rappelant le principe : une seule question spécifique et isolée par discussion. (on ne traite ici qu'une difficulté et non un ensemble).
Si cet aspect est résolu : discussion à clore (un clic sur le tag "RESOLU" au niveau de ton premier message)
Si tu as maintenant d'autres questions ===>>> autre discussion. en ISOLANT cette autre question.
C'est ici la règle et j'y tiens , personnellement.
ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
-
Et la nouvelle discussion que tu devrais ouvrir devrait être du genre :*
Comment mettre à jour le contrôle de mon choix (listbox, listview, combobox; treeview, ou autre) qui me sert à lister les fichiers d'un dossier, chaque fois que j'ajoute un fichier dans le dit dossier.
En d'autres termes : comment provoquer une telle mise à jour automatique.
Plus rien à voir véritablement avec le contrôle d'affichage à proprement parler, mais tout à voir avec le reste du mécanisme de ton appli
cco86260
Messages postés
166
Date d'inscription
dimanche 22 janvier 2012
Dernière intervention
30 juillet 2015
-
Pour une personne qui fait du VBA depuis longtemps c'est plus facile d'exposer un problème.
Pour ma part je pensais que cela traitait le même sujet étant donnée que le but est d'afficher le contenu d'un dossier et de ses sous dossier dans une treeview :)
Commenter la réponse de ucfoutu
Messages postés
166
Date d'inscription
dimanche 22 janvier 2012
Dernière intervention
30 juillet 2015
0
Merci
Pas de soucis, je post un nouveau sujet

Merci encore

--
Commenter la réponse de cco86260
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Bien.
N'oublie pas de clore celui-ci, donc.
Commenter la réponse de ucfoutu
Messages postés
5585
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
6 décembre 2018
0
Merci
Bonjour ucfoutu,

cco86260, je crois que tu t'éloignes de ton but avec une treeview d'après ce que tu m'as expliqué sur MP. Il y a plus simple. Je ne peux pas te contacter sur ton MP, il n'est pas activé.

A l'ouverture du classeur une boite de dialogue de création de dossier s'ouvre. Le chemin du dossier ainsi créé est stocké dans une cellule. A la prochaine ouverture si cette cellule est rempli, la boite de dialogue ne s'ouvre plus. L'utilisateur peut enregistrer dans ce dossier sans s'occuper de son chemin. Le chemin est spécifique pour chaque machine.
Voilà c'est simple
Commenter la réponse de cs_Le Pivert
Messages postés
166
Date d'inscription
dimanche 22 janvier 2012
Dernière intervention
30 juillet 2015
0
Merci
J'ai créer un nouveau post :)

les MP sont a nouveau actif ;)

--
Commenter la réponse de cco86260

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.