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

Vos meilleures macros et portions de code sont publiées dans cette section.
Aucun support sur une question de programmation ici !

Modérateur: Vilains modOOs

Règles du forum
Aucune question dans cette section !
Celle-ci rassemble les meilleures macros et portions de code. Vous pouvez en revanche commenter ou argumenter le code exposé. Vous pouvez même remercier l'auteur (cela fait toujours plaisir) en indiquant par exemple dans quel cadre ou contexte vous en avez eu l'utilité.
Si vous avez à poster quelque chose, faites-le depuis la section Macros et API et demandez à un modérateur de l'y déplacer.

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

Messagepar Philippe BRONCHART » 20 Sep 2008 14:47

Bonjour

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

Le code est largement commenté.
Pièces jointes
Lister les fichiers d'un répertoire.ods
(8.99 Kio) Téléchargé 3143 fois
lister.jpg
Amicalement Philippe BRONCHART

Win 10 Libre office 5.0 (perso)
Philippe BRONCHART
Membre cOOnfirmé
Membre cOOnfirmé
 
Message(s) : 244
Inscrit le : 17 Jan 2007 20:18
Localisation : Lille(59) - Lesboeufs (80)

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

Messagepar Scap » 04 Août 2010 10:12

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é 1811 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..
Windows XP professionnel SP3 + OpenOffice 3.3
Ubuntu 10.04 LTS - Le lynx Lucide + GNOME 2.30.2 + OpenOffice 3.2.1
Kubuntu 10.10 + KDE 4.5.1 + OpenOffice 3.2.0
Mac OS X - Snow Leopard + OpenOffice 3.2.1 (Intel)
Scap
Membre hOOnoraire
Membre hOOnoraire
 
Message(s) : 177
Inscrit le : 28 Juil 2010 14:21

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

Messagepar lochot » 23 Nov 2010 10:53

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   AgrandirRéduire
'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   AgrandirRéduire
'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   AgrandirRéduire
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
OpenOffice.org 3.2.1 / ubuntu 10.04.1
lochot
Fraîchement OOthentifié
 
Message(s) : 1
Inscrit le : 23 Nov 2010 10:44

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

Messagepar alhazred » 29 Nov 2012 14:20

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   AgrandirRéduire
'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
À bientôt

LibO 4.1.5.3 et AOO 4.0.1 sous Windows 7, MRI et SDK pour les macros.

Et la sauvegarde incrémentée, c'est sympa !
Avatar de l’utilisateur
alhazred
ManitOOu
ManitOOu
 
Message(s) : 3028
Inscrit le : 01 Mai 2011 00:08
Localisation : Casablanca (Maroc)

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

Messagepar TChatenet » 02 Déc 2012 14:16

Merci à tous .
Grâce à cet exemple j'ai pu conclure une petite macro de renommage de fichiers sur mon disque .
Cordialement
Libre Office Version 4.1.5.3 sous W8.1
Libre Office Version 3.5.4.2 sous Ubuntu 12.04 /64
TChatenet
Membre OOrganisé
Membre OOrganisé
 
Message(s) : 79
Inscrit le : 02 Juin 2012 12:54

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

Messagepar Piaf » 02 Déc 2012 17:51

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   AgrandirRéduire
    Dossier = CreateUnoService("com.sun.star.ui.dialogs.FolderPicker") 'création du service sélection d'un fichier
    Par :
    Code : Tout sélectionner   AgrandirRéduire
    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   AgrandirRéduire
    '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+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Piaf
GourOOu
GourOOu
 
Message(s) : 5622
Inscrit le : 25 Nov 2011 19:07
Localisation : Guyane

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

Messagepar Alain de La Chaume » 03 Déc 2012 00:38

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.
(API-culteur et pêcheur de macros en mode loisirs occasionnels, mais toujours les pieds dans l'OO)
AOO 4.1.2 sous Linux Xubuntu Voyager 14.04 (x86_64)
Avatar de l’utilisateur
Alain de La Chaume
HédOOniste
HédOOniste
 
Message(s) : 1527
Inscrit le : 28 Sep 2008 13:56
Localisation : ʇsǝnoo,ꞁ ɐ ʇuǝɯǝʇǝꞁdɯoↃ


Retour vers Suprême de code

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 1 invité