Bonjour à tous,

j'ai un soucis concernant la construction d'une macro en VBA, consistant en un listing des fichiers xls, xlsx et xlsb dans un dossier et ses sous-dossiers afin d'extraire l'une de leur feuille pour l'enregistrer au format csv.

Je suis sous Mac OS, excel est en version 15.15, et je suis novice dans le dev de macros VBA.

J'ai suivi les conseils de http://www.rondebruin.nl/ afin d'avancer sur le sujet. En fait, le code suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Option Explicit
Dim MyFiles As String
Sub ExtractFilesToCSV()
Dim ScriptToRun As String
Dim folderPath As String
Dim FileNameFilter As String
Dim Extensions As String
Dim Level As Long
Level = 2
folderPath = MacScript("choose folder as string")
folderPath = MacScript("tell text 1 thru -2 of " & Chr(34) & folderPath & _
Chr(34) & " to return quoted form of it's POSIX Path")
Extensions = "(xls|xlsx|xlsm|xlsb)"
FileNameFilter = "'.*/[^~][^/]*\\." & Extensions & "$' "
folderPath = MacScript("tell text 1 thru -2 of " & Chr(34) & folderPath & _
                           Chr(34) & " to return quoted form of it's POSIX Path")
folderPath = Replace(folderPath, "'\''", "'\\''")
ScriptToRun = ScriptToRun & "do shell script """ & "find -E " & _
                      folderPath & " -iregex " & FileNameFilter & "-maxdepth " & _
                      Level & """ "
MyFiles = MacScript(ScriptToRun)
MsgBox MyFiles
end sub
M'affiche bien les fichiers présents dans le dossier sélectionné ainsi que dans ses sous-répertoires. Néanmoins ce script sera lancé au sein d'un script bash, et donc j'ai besoin de sélectionner le dossier sans ouvrir le prompt de sélection de dossier. Je l'ai donc sauvegardé dans la cellule A1 en rajoutant la ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
ActiveWorkbook.Sheets("Feuil1").Range("A1").Value = folderPath
Puis je l'ai remplacé par la ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
folderPath = ActiveWorkbook.Sheets("Feuil1").Range("A1").Value
Et là, ça marche ... tant que je ne quitte pas excel. Si je le relance, alors il me met l'erreur
Erreur d'exécution « 5 »:
Argument ou appel de procédure incorrect


Quelqu'un aurait une idée pour faire persister cela même lorsque l'on relance excel ?

Merci d'avance !

PS : l'option du MacID ne marche pas pour moi