Macro Excel pour obtenir liste et taille des répertoires

jnr91

Membre confirmé
24 Janvier 2014
13
0
Bonjour,
Je cherche une macro sous excel 2011/mac qui soit capable de donner la liste et la taille des répertoires de premier niveau contenus dans un répertoire donné.
Sous Windows, il n'y avait pas de problème car on disposait d'une FileSystemObject qui contenait toutes les caractéristiques des répertoires et fichiers.
Sous Mac, j'échoue à trouver la solution à ce problème.
Je remercie les personnes qui voudront bien m'aider.
Bonne année à vous.
jnr91
 

Aliboron

Chercheur de son
Club MacG
1 Janvier 2008
14 521
1 139
Toulouse.cong
faq.office.macintosh.free.fr
Concernant la gestion des relations avec les fichiers et dossiers dans le VBA d'Excel, tu trouveras beaucoup d'éléments dans ces pages de Ron de Bruin.

Mais, dans la mesure où tu t'intéresses aussi à la taille des dossiers, je pense que tu devrais plutôt faire appel à des commandes Unix en lançant des shell scripts via l'instruction MacScript("do shell script ""ta commande...""") dans Excel 2011. Cela te permettra plus facilement de récupérer des informations liées au système.
 

jnr91

Membre confirmé
24 Janvier 2014
13
0
Concernant la gestion des relations avec les fichiers et dossiers dans le VBA d'Excel, tu trouveras beaucoup d'éléments dans ces pages de Ron de Bruin.

Mais, dans la mesure où tu t'intéresses aussi à la taille des dossiers, je pense que tu devrais plutôt faire appel à des commandes Unix en lançant des shell scripts via l'instruction MacScript("do shell script ""ta commande...""") dans Excel 2011. Cela te permettra plus facilement de récupérer des informations liées au système.

Merci Aliboron pour cette information. Après une tentative personnelle pour résoudre ce problème, je me suis enfin tourné vers Ron de Bruin avec qui j'ai ensuite eu quelques échanges. Il a écrit un module intéressant très exploitable mais seulement sous Excel 2016 pour Mac. Le programme a été écrit aussi pour Excel 2011/Mac mais ne fonctionne pas correctement.
http://www.rondebruin.nl/mac/mac013.htm
 

zeltron54

Membre expert
Club MacG
29 Mars 2008
2 649
418
Lorraine
Bonsoir,
Un petit applescript peut obtenir la liste et la taille des dossiers.
Ensuite on peut soit appeler ce script avec le menu script d 'excel 2011
Soit inclure ce script dans une macro, comme a dit Aliboron via macScript.

Je te mets ci-dessous pour exemple le script qui te demande de choisir le dossier à lister puis écrit la liste et la taille des dossiers contenus sur une feuille excel 2011 ou 2016 (nom de la feuille: feuil1 )en colonne A et B, qui doit être ouverte au lancement du script.

Bloc de code:
set folderPath to (choose folder) as string
set fileList to list folder folderPath

set laligne to 1 as string

repeat with aFile in fileList
    set theFile to contents of aFile
    set infoRec to info for file (folderPath & theFile)

    if folder of infoRec then
        set lefichier to theFile as string
        set lataille to size of infoRec
     
        tell application "Microsoft Excel"
            activate
            select sheet "Feuil1"
            set lacell to "a" & laligne
            set value of range lacell to lefichier
            set lacell to "b" & laligne
            set value of range lacell to lataille
            --display dialog lefichier & " taille " & lataille
        end tell

        set laligne to laligne + 1
    end if
end repeat
 
Dernière édition:

jnr91

Membre confirmé
24 Janvier 2014
13
0
Bonsoir,
Un petit applescript peut obtenir la liste et la taille des dossiers.
Ensuite on peut soit appeler ce script avec le menu script d 'excel 2011
Soit inclure ce script dans une macro, comme a dit Aliboron via macScript.

Je te mets ci-dessous pour exemple le script qui te demande de choisir le dossier à lister puis écrit la liste et la taille des dossiers contenus sur une feuille excel 2011 ou 2016 (nom de la feuille: feuil1 )en colonne A et B, qui doit être ouverte au lancement du script.

Bloc de code:
set folderPath to (choose folder) as string
set fileList to list folder folderPath

set laligne to 1 as string

repeat with aFile in fileList
    set theFile to contents of aFile
    set infoRec to info for file (folderPath & theFile)

    if folder of infoRec then
        set lefichier to theFile as string
        set lataille to size of infoRec
    
        tell application "Microsoft Excel"
            activate
            select sheet "Feuil1"
            set lacell to "a" & laligne
            set value of range lacell to lefichier
            set lacell to "b" & laligne
            set value of range lacell to lataille
            --display dialog lefichier & " taille " & lataille
        end tell

        set laligne to laligne + 1
    end if
end repeat


Merci Zeltron, sauf que mon niveau d'excel VBA est bien insuffisant pour inclure ce code dans une macro, ni même lancer ce script d'une autre façon. C'est la première fois que j'entends parler de script excel et je n'ai pas trouvé de commande relative à cela dans les menus excel.
Si tu peux éclairer ma lanterne ou transformer le code en vba, ce serait parfait pour moi...
Un grand merci d'avance
 

zeltron54

Membre expert
Club MacG
29 Mars 2008
2 649
418
Lorraine
Dans excel 2011 Il y a dans la barre de menu un menu script (petite page) depuis ce menu on peut accéder au dossier pour recevoir le script.
Pour faire fonctionner le script que j'ai mis, tu dois le copier dans l'éditeur de script, qui se trouve dans applications--> utilitaires.
Depuis là tu fais tes essai , si cela te convient il faut alors l'enregistrer au format application puis le mettre dans le dossier de scripts.
Fait déjà l'essai et dis moi si celà te convient je te donnerais ensuite la marche à suivre.
 

jnr91

Membre confirmé
24 Janvier 2014
13
0
Dans excel 2011 Il y a dans la barre de menu un menu script (petite page) depuis ce menu on peut accéder au dossier pour recevoir le script.
Pour faire fonctionner le script que j'ai mis, tu dois le copier dans l'éditeur de script, qui se trouve dans applications--> utilitaires.
Depuis là tu fais tes essai , si cela te convient il faut alors l'enregistrer au format application puis le mettre dans le dossier de scripts.
Fait déjà l'essai et dis moi si celà te convient je te donnerais ensuite la marche à suivre.

Un grand merci pour tes explications. J'ai pu trouver le menu script puis faire des essais et enfin créer l'application.
C'est parfait.
Juste une question pour finir : le langage de script m'est inconnu. Où trouver des infos pour programmer ?
 

zeltron54

Membre expert
Club MacG
29 Mars 2008
2 649
418
Lorraine
Si tout fonctionne, impec, si besoin de complément ou d'aide n'hésite pas à demander.
Pour les infos sur le langage applescript, j'ai juste un livre (déjà ancien) de Jean-Philippe Moreux et Aurélien Gaymay, et je cherche sur internet.
 

jnr91

Membre confirmé
24 Janvier 2014
13
0
Eh bien, Zeltron, il y a quand même un petit problème dans le script, que je n'ai pas su résoudre :
- si des fichiers existent directement placés sous le répertoire choisi, ils ne sont pas comptabilisés
- si l'on fait le test sur un répertoire de dernier niveau, la taille est nulle.
Tu ne devrais pas avoir de difficulté à corriger ce petit manque.
Merci d'avance
 

zeltron54

Membre expert
Club MacG
29 Mars 2008
2 649
418
Lorraine
Le script prend en compte uniquement les DOSSIERS de 1ER NIVEAU contenu dans le dossier sélectionné, Comme demandé dans ton 1er message.
Tu veux quoi exactement ?

Edit: en me relisant je trouve ma demande agressive!, ce n'est pas le cas !
Que voudrais-tu obtenir exactement ? pour que je puisse modifier le script en conséquence.
 
Dernière édition:

jnr91

Membre confirmé
24 Janvier 2014
13
0
Ton script répond bien à ma demande initiale mais incomplète, ce dont je me suis aperçu aujourd'hui :
- il donne bien la liste des répertoires de 1er niveau et la taille de tout ce qui est contenu dans chacun des ces répertoires, y compris les répertoires de niveau 2,3, etc..
- mais il me manque la taille globale des fichiers de 1er niveau qui ne sont pas contenus dans ces répertoires.
Il faudrait calculer la taille de ces fichiers et l'ajouter dans une ligne "fichiers de 1er niveau" dans la feuille excel.
J'espère que mon explication te sera plus claire maintenant.
Merci
 

zeltron54

Membre expert
Club MacG
29 Mars 2008
2 649
418
Lorraine
Le script lit tous les fichiers et dossiers du 1er niveau, puis il vérifie si c'est un dossier, si oui il l'affiche, sinon suivant.
Il suffit donc d'enlever cette vérification.
Au lieu de l'effacer, je met les 2 lignes sous forme de commentaires
La Ligne 7 (vérifie s'il s'agit d'un dossier et l' avant dernière ligne du script qui terminée la boucle de "if" vérification.
Tu auras donc la liste de tous les dossiers et fichiers de 1er rang y compris les fichiers invisibles !

Bloc de code:
set folderPath to (choose folder) as string
set fileList to list folder folderPath

set laligne to 1 as string

repeat with aFile in fileList
    set theFile to contents of aFile
    set infoRec to info for file (folderPath & theFile)

   -- if folder of infoRec then
        set lefichier to theFile as string
        set lataille to size of infoRec
    
        tell application "Microsoft Excel"
            activate
            select sheet "Feuil1"
            set lacell to "a" & laligne
            set value of range lacell to lefichier
            set lacell to "b" & laligne
            set value of range lacell to lataille
        end tell
        set laligne to laligne + 1
   -- end if
end repeat
 
  • J’aime
Réactions: igorbatchev

jnr91

Membre confirmé
24 Janvier 2014
13
0
Cette fois-ci, le problème est complètement résolu. Il y a parfaite identité entre les informations obtenues avec clic droit + "voir les informations" sur un répertoire et le détail obtenu par ton script.
Un grand merci