Création de dossier

Bonsoir le Forum,

Je ne sais pas s'il y a un rapport avec mon problème, je suis sous MAC ...

Dans la macro "Auto_Open" je récupère le chemin de mon fichier dans une cellule nommée "Repert" : Range("Repert").Value = ThisWorkbook.Path

Jusque là tout va bien, ce qui coince, c'est qu'à la suite je souhaite vérifier s'il existe à cet endroit un sous dossier nommé "Suivi tension" et le créer s'il n'existe pas.

J'ai fait des recherches sur différents forums et testé 2 ou 3 douzaines de syntaxes différentes. Quasiment toutes se sont soldées par un erreur d'exécution "76", chemin d'accès introuvable.

Une piste pourrait être de modifier la première ligne de code trouvée sur le site de Ron de Bruin : à la rubrique filesandfolders/makefolder/

FolderPath = MacScript("return (path to desktop folder) as string") & "Suivi tension"

MkDir MacScript("return POSIX path of (" & Chr(34) & FolderPath & Chr(34) & ")")

en modifiant "desktop" par "ThisWorkbook.Path"

D'avance merci pour votre lecture et le temps consacré.

Bonjour

Dans la macro "Auto_Open" je récupère le chemin de mon fichier dans une cellule nommée "Repert" : Range("Repert").Value = ThisWorkbook.Path

Déjà là, oubliez les macros Auto_open. C'est l'antiquité d'excel cela (2004 et avant ....)
Vous disposez de la fonctionnalité Workbook_Open().
Pour votre code Auto_open, remplacez-la par celle-ci :

Private Sub Workbook_Open()
Range("Repert").Value = ThisWorkbook.Path
End Sub

Placez ce code en allant dans l'éditeur VBA et en cliquant sur Thisworkbook

Ensuite pour votre souci, regardez le début du code que j'ai donné ici à Zef7 (qui n'a d'ailleurs jamais répondu ...)--> https://forum.excel-pratique.com/s/goto/1143337
Faites un test.

Cordialement

Merci Dan pour votre réponse.

Vous disposez de la fonctionnalité Workbook_Open().

Je ne l'avais jamais envisagé sous cet "angle". Mais je vais dorénavant suivre votre conseil et procéder de la sorte.

Pour la suite, cela me semble assez complexe (trop pour mon besoin ?), mais je vais tester et voir ce que ça donne et/ou essayer d'adapter votre code.

Je ne pensais pas que ma demande soit aussi compliquée. J'ai simplement besoin de vérifier si dans le répertoire qui contient mon fichier .xlsm il existe un sous-répertoire bien précis, et le cas échéant créer ce sous répertoire.

Bien cordialement

Je viens de tester la suite en adaptant votre code ...

Sub ListeClasseursDansDossier()

Dim Chemin

' Spécifiez le chemin d'accès au dossier contenant les classeurs
Chemin = ThisWorkbook.Path & "/test"

    ' Vérifie si le dossier existe
                If Dir(Chemin, vbDirectory) = "" Then
                        MsgBox "Le dossier spécifié n'existe pas.", vbCritical

                '   MkDir Chemin
                MkDir Chr(34) & Chemin & Chr(34)

                        Exit Sub
                Else
                        MsgBox "Le dossier spécifié existe."
                End If
End Sub

Le test du dossier fonctionne bien, mais impossible de créer le dossier s'il est manquant.

J'ai essayé avec MkDir, alternativement avec et sans les guillemets, et j'ai toujours l'erreur d'exécution "76"

Bonjour

la fonction Mkdir ne fonctionne pas sur MAC... (ou du moins elle n'existait pas il y a quelques années... )

tu peux consulter le site de rondebruin qui est/était une référence quand j'avais besoin de faire des macros sous mac il y a quelques années... tu trouveras certainement ton bonheur

https://www.macexcel.com/examples/filesandfolders/makefolder/

Fred

Merci Fred pour la réponse.

Comme précisé dans mon premier message, j'ai bien consulté le site que vous recommandez.

J'y ai même trouvé un "semblant de début" de piste... il suffirait "simplement" de remplacer "Desktop" par "chemin de ce fichier Excel"... et c'est précisément LÀ que ça coince...

Quelle serait la bonne syntaxe en MacScript ?

Bonjour

certainement remplacer

FolderPath = MacScript("return (path to desktop folder) as string") & "TestFolder1"

Par

Folderpath = ThisWorkbook.Path & "/testFolder1"

Mais je ne peux pas essayé...

Fred

Merci Fred pour la réponse, malheureusement ça ne marche pas.

FolderPath = MacScript("return (path to desktop folder) as string") & "DossierPDF"
MkDir MacScript("return POSIX path of (" & Chr(34) & FolderPath & Chr(34) & ")")
MsgBox FolderPath

Les deux premières lignes de code ci-dessus créent bien le dossier DossierPDF sur le bureau, donc MkDir fonctionne bien.

La réponse de la 3e ligne est SSD APPLE System:Users:jean-laurentxxx:Desktop:DossierPDF

Le problème reste de déclarer le chemin désiré.

J'ai essayé différentes combinaisons du chemin "en dur" ci dessus avec : au lieu de / comme séparateur. Rien à faire, ça ne marche pas. Seule différence j'alterne le message d'erreur "76" avec erreur d'exécution "5" Argument ou appel de procédure incorrect

bonjour à tous,

dans l'hypothèse où il faut remplacer le string "desktop" par le contenu de thisworkbook.path, je propose ceci.

FolderPath = MacScript("return (path to " & thisworkbook.path & " folder) as string") & "TestFolder1"

Merci h2so4,

L'idée c'est exactement çà ... mais pas la syntaxe, ni les différentes variantes que j'ai essayé en ajoutant/supprimant/déplaçant les ", & , ( , )

à suivre donc.

Je ne pensais pas que ce problème, qui paraît simple en fait, soit si ardu !

Que renvoi ces deux lignes :

Folderpath = ThisWorkbook.Path
MsgBox FolderPath

Fred

La commande

FolderPath = ThisWorkbook.Path & "/" & "DossierPDF"
MsgBox FolderPath

retourne

/Volumes/SSD Données/Archives/DossierPDF

et la commande

FolderPath = MacScript("return (path to desktop folder) as string") & "DossierPDF"
MsgBox FolderPath

retourne

SSD APPLE System:Users:jean-laurentxxx:Desktop:DossierPDF

A noter, le changement de séparateur, / devient :

A noter également que dans la seconde commande il n'est pas nécessaire d'ajouter de séparateur avant le nom du dossier à créer

Dans ce cas je ferais :

FolderPath = ThisWorkbook.Path & "/TestFolder1"
MsgBox FolderPath
MkDir MacScript("return POSIX path of (" & Chr(34) & FolderPath & Chr(34) & ")")

Fred

C'est toujours la galère avec VBA et MAc dans le cadre de la gestion d'arborescence de fichiers/dossiers

Bon j'ai retrouvé dans mes archives un code que j'avais déployé à l'époque pour office2011 pour MAC

'appel de la fonction     
FolderPath = ThisWorkbook.Path & "/TestFolder1"
MakeFolderIfNotExist (FolderPath)

avec la fonction :

Sub MakeFolderIfNotExist(FolderString As String)
'*********************************************************************************************************
'Creation d'un dossier si il n'existe pas sous MAC
'*********************************************************************************************************
Dim ScriptToMakeDir As String
ScriptToMakeDir = "tell application " & Chr(34) & "Finder" & Chr(34) & Chr(13)
ScriptToMakeDir = ScriptToMakeDir & "do shell script ""mkdir -p "" & quoted form of posix path of " & Chr(34) & FolderString & Chr(34) & Chr(13)
ScriptToMakeDir = ScriptToMakeDir & "end tell"
On Error Resume Next
MacScript (ScriptToMakeDir)
On Error GoTo 0
End Sub

je ne sais pas si cela fonctionne avec une version plus récente de office pour mac

Fred

Dans ce cas je ferais :

FolderPath = ThisWorkbook.Path & "/TestFolder1"

MsgBox FolderPath

MkDir MacScript("return POSIX path of (" & Chr(34) & FolderPath & Chr(34) & ")")

Fred

Toujours erreur 76 ...

@ Fred

Concernant le dernier message, le dossier n'est pas créé, mais je n'ai pas non plus de message d'erreur.

J'ai rajouté des msbox à chaque étape pour suivre l'évolution de "ScriptToMakeDir", le code se déroule normalement.

J'ai aussi constaté que le séparateur est / et non : comme sur la commande qui crée bien un dossier sur le bureau (voir plus haut)

le message d'erreur n'apparait pas car il y a ceci :

On Error Resume Next

Mais si le dossier n'est pas créé, il y a certainement une erreur.. non visible a cause de l'instruction ci dessus... 'il suffit de la mettre en commentaire pour voir apparaitre l'erreur

peut-être que Dan aura une solution pour toi

Désolé

Edit : je viens de voir quelque chose...

tu avais mis

La commande

FolderPath = ThisWorkbook.Path & "/" & "DossierPDF"

MsgBox FolderPath

retourne

/Volumes/SSD Données/Archives/DossierPDF

FolderPath = MacScript("return (path to desktop folder) as string") & "DossierPDF" MsgBox FolderPath

retourne

SSD APPLE System:Users:jean-laurentxxx:Desktop:DossierPDF

Première chose il semble que le fichier ne soit pas sur le volume système.. je commencerais déjà par essayer de mettre le fichier sur le volume système.

2e chose à l'époque je sais que les lettres accentuées étaient mal gérées dans les chemins des dossiers, a faire un essai dans un chemin ou il n'y a pas de lettre accentuées

Fred

Effectivement, il y a une erreur d'exécution "5" à la ligne

MacScript (ScriptToMakeDir)

J'ai transféré mon fichier sur le disque système, et après des premiers test rien n'a changé

@ Fred2406

Vous avez bien raison, les caractères accentués ne sont guère appréciés , car la commande suivante fonctionne bien, même en dehors du disque système.

MkDir MacScript("return POSIX path of (" & Chr(34) & "SSD Donnees:Affaires courantes:Sante:DossierPDF" & Chr(34) & ")")

Je vais donc essayer d'écrire la macro complète.

Rechercher des sujets similaires à "creation dossier"