Page 1 sur 1

[Calc] lister le contenu d'un répertoire

Publié : 20 sept. 2008 15:47
par Philippe BRONCHART
Bonjour

Une méthode pour sélectionner et lister le contenu d'un répertoire.

Le code est largement commenté.

Re: [Calc] lister le contenu d'un répertoire

Publié : 04 août 2010 11:12
par Scap
Bonjour,

Super ce code, ça m'a bien aidé à faire ce que je voulais
Répertoire.ods
Recherche de répertoire cible
(10.3 Kio) Téléchargé 2472 fois
C'était beaucoup plus simple que ce que je pensais en fait, merci encore :)
Je pensais qu'il fallait créer et charger une nouvelle boite de dialogue..

Re: [Calc] lister le contenu d'un répertoire

Publié : 23 nov. 2010 10:53
par lochot
Merci pour ce code, gros gain de temps.

Deux petites choses tout de même, pour fonctionner sous linux ou mac, il faut modifier la partie création du chemin, et mettre "/" (unix) à le place de "\" (dos) chemin

Remplacer

Code : Tout sélectionner

'on fabrique le chemin de direction

Direction=dir((lerep)&"\*.*",0)' les fichiers du repertoire ( si on veut du .ods on remplace ((lerep)&"\*.*",0) par ((lerep)&"\ods.*",0)
par

Code : Tout sélectionner

'on fabrique le chemin de direction

Direction=dir((lerep)&"/*.*",0)' les fichiers du repertoire ( si on veut du .ods on remplace ((lerep)&"\*.*",0) par ((lerep)&"\ods.*",0)
et pour ceux qui veulent le listing du nombre complet de fichier (il en manque un par défaut), il faut définir X à 1 avant d'entrer dans la boucle :

Code : Tout sélectionner

MonDoc = ThisComponent 'Sélectionne le document en cours
MesFeuilles=MonDoc.sheets ' les feuilles du classeur
MaFeuille = Mesfeuilles.GetByName("Feuille1")' la feuille1
'On défini X à 1 pour commencer à la cellule 1 (et pas 0) :)
X = 1

Re: [Calc] lister le contenu d'un répertoire

Publié : 29 nov. 2012 14:20
par alhazred
Bonjour,

Je viens de constater que la 3ème modification proposée dans le message précédent ne résout pas le problème du premier élément manquant (il est donné par le premier appel de Dir()) : la solution est de placer l'appel suivant en fin de boucle, ce qui donne :

Code : Tout sélectionner

'Cette macro va lister sous calc le contenu d'un répertoire
'Philippe Bronchart 2008 (modifications par alhazred, signalées par ***)

Sub Listerunrepertoire

	Dim MonDoc as object, Mesfeuilles as object, MaFeuille as object
	Dim Dossier As object ,  Valeur As Integer , lerep as string, Ocurseur as object
	Dim Direction As string , Resultat As String
	
	MonDoc = ThisComponent 'Sélectionne le document en cours
	MesFeuilles=MonDoc.sheets ' les feuilles du classeur
	MaFeuille = Mesfeuilles.GetByName("feuille1")' la feuille1
	
	'la boite de dialogue pour choisir le dossier     
	Dossier = CreateUnoService("com.sun.star.ui.dialogs.FolderPicker") 'création du service sélection d'un fichier
	Valeur = Dossier.Execute()
	
	'si il y au moins un choix
	If Valeur = 1 Then lerep=ConvertFromUrl(Dossier.getDirectory()) Else Exit Sub '*** on convertit l'URL, sinon on ne fait rien
	
	'on fabrique le chemin de direction
	Direction=dir((lerep)&"\*",0) '*** tous les fichiers du répertoire	
	'Direction=dir((lerep)&"\*.ods",0) '*** seulement les classeurs .ods
	'Direction=dir((lerep)&"\*",16) '*** seulement les sous-répertoires

	'on fait une boucle tant qu'il il y a des fichiers
	oCurseur = MaFeuille.createCursor  '*** création du curseur avant la boucle (inutile de répéter)
	x = 1  '*** si on veut commencer en ligne 2
	Do While Len(Direction) > 0	
		MaFeuille.getCellByPosition(0,x).string = Direction     ' on écrit en A2 feuille1 (0,X) où x = 1 au départ puis 2 3 4 5 .....
		X=X+1 ' on ajoute 1 à X
		Direction=Dir() '*** élément suivant
	Loop ' on boucle

End Sub

Re: [Calc] lister le contenu d'un répertoire

Publié : 02 déc. 2012 14:16
par TChatenet
Merci à tous .
Grâce à cet exemple j'ai pu conclure une petite macro de renommage de fichiers sur mon disque .
Cordialement

Re: [Calc] lister le contenu d'un répertoire

Publié : 02 déc. 2012 17:51
par Piaf
Bonsoir
Juste deux petites remarques. Selon la configuration de l'utilisateur menu Options > Général Utiliser les boites de dialogue (coché ou décoché).
  • La macro peut peut retourner les fichiers du répertoire au-dessus.
    Il suffit de changer la ligne :

    Code : Tout sélectionner

    Dossier = CreateUnoService("com.sun.star.ui.dialogs.FolderPicker") 'création du service sélection d'un fichier
    Par :

    Code : Tout sélectionner

    Dossier = CreateUnoService("com.sun.star.ui.dialogs.OfficeFolderPicker") 'création du service sélection d'un fichier
  • Pour que la macro puisse fonctionner sous Windows et sous Linux, ajouter :

    Code : Tout sélectionner

    'GetGUIType est en Integer en cas d'utilisation avec l'option Explicit
    If GetGUIType = 1 Then ' 1 pour Windows, 4 pour GNU_Linux,
              Direction = dir((lerep)&"\*.*",0)' les fichiers du repertoire ( si on veut du .ods on remplace ((lerep)&"\*.*",0) par ((lerep)&"\ods.*",0)
    	Else 'pour GNU_Linux
              Direction = dir((lerep)&"/*.*",0)' les fichiers du repertoire ( si on veut du .ods on remplace ((lerep)&"/*.*",0) par ((lerep)&"/ods.*",0)
    	End If
[HS] Je pense que Philippe BRONCHART peut légitimement être fier que son post datant de 2008 soit encore d'actualité et fonctionne toujours aussi bien.
A+

Re: [Calc] lister le contenu d'un répertoire

Publié : 03 déc. 2012 00:38
par Alain de La Chaume
Bonjour Piaf et tous les autres

Pour que la macro puisse fonctionner sous Windows et sous Linux...
le plus simple à mon avis est d'utiliser convertToUrl puisque la fonction Dir accepte la notation URL.