Erreur 76 lors de la création d'un répertoire

Bonjour,

encore merci à ceux qui m'ont aidé lors de l'amélioration de ma première macro. voici encore une amélioration que je n'arrive pas à faire.

dans ma macro de départ, je récupère des infos que je copie dans un second onglet pour n'avoir que les valeur (donc sans formule) et je crée une copie de cet onglet dans un nouveau classeur .xlsx

Sub Bouton1_Cliquer()
Dim FE_depart As Integer, FE_fin As Integer, duree_de_boucle As Integer, chemin As String, nom As String
' génération boite pour demander numéro de FE de départ et final
FE_depart = Application.InputBox("Entrer le numéro de la première FE à génerer", Type:=1)
FE_fin = Application.InputBox("Entrer le numéro de la denière FE à génerer", Type:=1)
' boucle de création
duree_de_boucle = FE_fin - FE_depart + 1
For i = 1 To duree_de_boucle
    ' copie du numéro de FE dans sa case (pour mettre à jour la fiche)
    Range("J4").Value = FE_depart

    'copie les valeurs du premier onglet dans le second
    Worksheets("Ficheenquete2").Range("A1:L48").Value = Worksheets("Ficheenquete").Range("A1:L48").Value

    ' configure le nom et chemin d'enregistrement en utilisant le premier onglet
    chemin = ThisWorkbook.Path & "\"
    nom = "FE " & [J4].Value & "(" & [Q3].Value & ").xlsx" 'nom sous forme FE 1289 (ref doc)
    Worksheets("Ficheenquete2").Copy 'copie l'onglet avec les valeurs

    With ActiveWorkbook
        Application.DisplayAlerts = False  ' enleve le message d'alerte car il enregistre sous format xlsx
        .SaveAs Filename:=chemin & nom, FileFormat:=xlOpenXMLWorkbook 'enregistre l'onglet au format xlsx
        .Close
    End With
    FE_depart = FE_depart + 1  ' incrémentation
Next
End Sub

j'aimerais maintenant créer un répertoire qui aura un nom défini (variable FE_depart) et enregistrer mon nouveau classeur.xlsx dans ce répertoire. j'ai donc pensé à ça :

Sub Bouton1_Cliquer()
Dim FE_depart As Integer, FE_fin As Integer, duree_de_boucle As Integer, Nom As String, Chemin As String
' génération boite pour demander numéro de FE de départ et final
FE_depart = Application.InputBox("Entrer le numéro de la première FE à génerer", Type:=1)
FE_fin = Application.InputBox("Entrer le numéro de la denière FE à génerer", Type:=1)
' boucle de création
duree_de_boucle = FE_fin - FE_depart + 1
For i = 1 To duree_de_boucle
    ' copie du numéro de FE dans sa case (pour mettre à jour la fiche)
    Range("J4").Value = FE_depart

    'copie les valeurs du premier onglet dans le second
    Worksheets("Ficheenquete2").Range("A1:L48").Value = Worksheets("Ficheenquete").Range("A1:L48").Value

    ' configure le chemin d'enregistrement
    Chemin = ThisWorkbook.Path & "\"
    MkDir (Chemin & FE_depart)         ' cree le repertoire qui va contenir la FE

    ' configure le nom d'enregistrement en utilisant le premier onglet
    Nom = "FE " & [J4].Value & "(" & [Q3].Value & ").xlsx" 'nom sous forme FE 1289 (ref doc)
    Worksheets("Ficheenquete2").Copy 'copie l'onglet avec les valeurs

    With ActiveWorkbook
        Application.DisplayAlerts = False  ' enleve le message d'alerte car il enregistre sous format xlsx
        .SaveAs Filename:=Chemin & Nom, FileFormat:=xlOpenXMLWorkbook 'enregistre l'onglet au format xlsx
        .Close
    End With
    FE_depart = FE_depart + 1  ' incrémentation
Next
End Sub

mais bizzarement, Excel me retourne une erreur 76 sur la portion

MkDir (Chemin & FE_depart)         ' cree le repertoire qui va contenir la FE

j'ai vérifié en faisant afficher le chemin dans une boite et je n'ai pas d'espaces, par contre, Chemin & FE_depart ça donne un truc du genre " c:/....../....\FE_depart "

je me demande si l'erreur ne vient pas des / et du \ final. mais comment y remédier ?

merci d'avance pour votre aide.

Bonsoir

je me demande si l'erreur ne vient pas des / et du \ final. mais comment y remédier ?

A voir ce que vous donnez dans le chemin --> / c'est de là que vient l'erreur

Ce qui est bizarre c'est que je ne vois pas cela dans votre code. comment vous arrivez à avoir --> / avec windows ?? De mémoire cela me semble être sous Unix que vous pouvez avoir un séparateur comme ceci -> /

Merci Dan,

En fait, si je met un

    MsgBox Chemin & FE_depart
    MkDir (Chemin & FE_depart) 

je vois ceci (désolé je dois mettre des infos persos)

72305 5f0554fae7a3d755210349

Edit modo : quelques du chemin suffisent ;-)
Edit nighty: ha oui, j'aurais du y penser. je ferais plus attention. merci :)

on voit clairement que le chemin qui apparaît indique des /

comment puis-je faire pour avoir un chemin correct ?

bon, en fait j'ai contourné le problème en indiquant un endroit précis où enregistrer le répertoire et la fiche dans le répertoire.

j'indique le "c:\" c'est brutal et efficace à mon avis. Mais j'aimerais tout de même trouver une solution qui quelqu'un en a une.

Re

Le chemin montré n'est pas ce que vous dites plus haut dans le fil. D'où a question où est enregistré votre fichier --> en local, sur un serveur local ou sur le web ?

Aussi où est placé votre fichier contenant la macro ?

j'ai vérifié en faisant afficher le chemin dans une boite et je n'ai pas d'espaces, par contre, Chemin & FE_depart ça donne un truc du genre " c:/....../....\FE_depart "

Là vous devriez avoir c:\ et pas c:/

réponse:

onedrive permet de stocker des fichiers en ligne qu'il est possible de synchroniser sur un PC. onedrive crée alors sur un pc, un répertoire qui est géré par lui et sur lequel sons copiés les fichiers synchronisés.
mon fichier Excel se trouve à cet endroit (dans un sou-sou-sous ... répertoire) et la macro est voulue pour créer un autre sous répertoire et y enregistrer une copie d'un onglet.

le fichier Excel contenant la macro se trouve donc sur un disque dur de pc portable sous windows, à un endroit géré par le logiciel de synchronisation onedrive. (Excel 365 permet même un enregistrement automatique du fichier car il est mis à jour en temps réel sur le réseau de onedrive).

une question que je vais tester demain au boulot: et si je prend le chemin par l'explorateur de fichier au lieu de " ThisWorkbook.Path" ? bien que je ne puisse pas appliquer cette solution si elle fonctionne car le fichier Excel doit fonctionner pour moi... et pour mon collègue qui l'utilise sur son PC (il en a une copie sur son PC... mise à jour par le même réseau onedrive.... le fichier est partagé par onedrive)

Suite:

Je viens de regarder le chemin dans l'explorateur de fichier et il est du type
C:\Users\XXXXX\OneDrive - xxxx\TRAxxxxx-DPI_18xx2_IL-XX\FRONT OFFICE\DOCS DE PROJET\AUDITS DOCUMENTAIRES\Audit 1

Ce qui est différent de ce qu'indique "ThisWorkbook.Path" (https//xxxxx/personal/XXX ......)

Il me semble donc que si je voulais utiliser le fichier uniquement pour moi, je pourrais utiliser le chemin de l'explorateur de fichier, mais pour une utilisation en équipe, je suis obligé d'utiliser un chemin commun à tout le monde comme " C:\ "

Au moins j'aurais appris un peu plus sur le fonctionnement d'un fichier Excel géré par onedrive.
Il me reste à trouver s'il y a un autre moyen que ThisWorkbook.Path pour avoir un chemin sur un disque PC de façon adaptative (pour chaque utilisateur)

Bonjour

Le Thisworkbook.path fonctionne si vous gérez votre fichier sur votre PC uniquement (hors répertoire Onedrive je pense). Dans votre cas vous êtes sur Onedrive et excel ne voit pas la même chose. Cela se confirmerait d'ailleurs au vu des essais de récupération de chemin que vous avez fait.

Faites un essai en déclarant votre Chemin en partant de cette idée :

c:\users\nom utilisateur\onedrive\repertoire

ce qui pourrait donner pour vous :

Chemin = "C:\Users\" & Environ("username") & "\OneDrive - xxxx\TRAxxxxx-DPI_18xx2_IL-XX\FRONT OFFICE\DOCS DE PROJET\AUDITS DOCUMENTAIRES\Audit 1\"

Merci Dan,

j'ai testé votre méthode et elle fonctionne pour moi... mais pas pour mon collègue. je pense que cela pourrais fonctionner pour un fichier placé à un endroit standard, le soucis c'est que onedrive crée des chemins parfois un peu différents (je m'explique).
onedrive permet de partager des fichiers pour pouvoir y travailler à plusieurs, mais il y a toujours un "proprietaire" de fichiers (et surtout du onedrive où ils sont) et des "utilisateurs". chaque personne a donc plusieurs endroits sur son PC : un pour son onedrive et un autre pour les "onedrive partagés" appartenant aux autres. et il me semble que cela donne des chemins différents.
c'est pour cela que je trouvais utile l'utilisation de Thisworlbook.Path car il devais s'adapter à chacun... mais il semble cibler vers la version réseau où se trouve le fichier (sur le serveur de onedrive).

décidément, un petit casse tête sympa. heureusement qu'il y a la parade d'utiliser le "C:\"
je ne vais pas monopoliser votre temps Dan, j'arrive à mes fins et c'est le principal; même si je ne fais pas exactement pile poil ce que je voulais :)

Bonjour

chaque personne a donc plusieurs endroits sur son PC : un pour son onedrive et un autre pour les "onedrive partagés" appartenant aux autres. et il me semble que cela donne des chemins différents.

je ne vais pas monopoliser votre temps Dan, j'arrive à mes fins et c'est le principal; même si je ne fais pas exactement pile poil ce que je voulais :)

Pas de souci. Peut être qu'une solution serait celle-ci :

- Vous créez une variable pour chaque personne qui reprend le chemin qui sera utilisé sur chaque PC comme ceci -->

Public Const mavariable As Integer = "c:\........"
Public Const savariable As Integer = "c:\........"

Ensuite dans le code, vous devrez mettre une condition qui permet d'identifier le nom de l'utilisateur, genre ceci :

if Environ("username") = votrenom then chemin = mavariable else: Chemin = savariable

A tester si vous comprenez ce que je veux expliquer

Attention que ces variables Public doivent être impérativement placée en entête de module et pas dans un code. Elle doivent être donc placées avant toutes les macros comprises dans un module ou dans un module séparé dédié aux variables de votre projet par exemple

Cordialement

bonjour,

ha oui.... pas mal. je comprends comment les utiliser. quand j'aurais un peu de temps je vais essayer de les mettre en place.
Mais cela restera surement pour mon apprentissage car pour mes collègues je vais privilégier la simplicité qui s'adapte et qui fonctionne pour tout le monde. (si une nouvelle personne veut l'utiliser, il faut mettre la macro à jour avec son username).

merci beaucoup d'avoir pris du temps pour moi. surtout quand ça débouche sur une solution.

Rechercher des sujets similaires à "erreur lors creation repertoire"