Microsoft 365 Problème création de dossier pour l'enregistrement

raf26

XLDnaute Occasionnel
]Bonjour le forum

J'ai un souci de d'enregistrement lorsque le dossier existe déjà sur le bureau.

J'utilise un fichier "de base" vierge et une macro (déclenchée par la validation d'une cellule) enregistre ce fichier :

- en le nommant suivant la valeur d'une cellule
- dans un répertoire sur le bureau (nom du répertoire suivant la valeur d'une cellule, le nom change suivant la date du jour).

Pas de souci au premier enregistrement, le fichier est bien enregistré dans le bon dossier sur mon bureau

Par contre, lorsque je réutilise mon fichier vierge, j'ai un bug, le fichier ne s'enregistre pas dans le dossier précédemment créer par la première utilisation du fichier


voici ma macro



Sub enregistrement() Dim chemin As String Dim NomFichier As String Dim NomDossier As String Application.DisplayAlerts = False chemin = ThisWorkbook.Path & "\" NomFichier = Sheets("mafeuille").[Z2].Value NomDossier = Sheets("mafeuille").[Z4].Value If Len(Dir(NomDossier, vbDirectory)) = 0 Then MkDir chemin & NomDossier End If ActiveWorkbook.SaveAs Filename:=chemin & NomDossier & "\" & NomFichier ActiveWorkbook.save Application.DisplayAlerts = True End Sub /ICODE] Comment écrire pour que si le dossier existe déjà, l'enregistrement se fasse bien dans ce dossier déjà créé ? Merci d'avance pour votre aide. Bonne journée Cordialement
 

Phil69970

XLDnaute Barbatruc
Bonjour Raf, le forum

Le code suivant teste si le dossier existe ou non
Code:
If Dir(Chemin, vbDirectory) = "" Then MkDir Chemin

Le code ci dessous écrase le fichier sans avertissement si le fichier existe
VB:
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:= chemin & NomDossier & "\" & NomFichier 'Ecrasement fichier existant
Application.DisplayAlerts = True
@Phil69970
 

patricktoulon

XLDnaute Barbatruc
bonjour
l'erreur est simple
ici tu teste le nom du sous dossier pas le chemin du dossier complet
If Len(Dir(NomDossier, vbDirectory)) = 0 Then
MkDir chemin & NomDossier

donc la correction c'est
If Len(Dir(chemin &"\"& NomDossier, vbDirectory)) = 0 Then
MkDir chemin & NomDossier
 

raf26

XLDnaute Occasionnel
bonjour Phil et Patricktoulon

merci pour votre aide, nickel !

par contre quand je ressaisis dans la cellule qui déclenche la macro
cela me crée un sous dossier dans le dossier initial avec le même nom

comment écrire pour que la macro écrase le fichier existant sans me créer un sous dossier

merci

cordialement
 

patricktoulon

XLDnaute Barbatruc
?????????
re
hoh!! tu picolle toi

si le nom de ton sub dossier est repêché dans les cellules
NomFichier = Sheets("mafeuille").[Z2].Value
NomDossier = Sheets("mafeuille").[Z4].Value

et que ta Z4 ne change pas il n'y a aucune raison pour que ça te créé un autre dossier

maintenant si ta Z4 change il va te falloir alors revoir toute ta conception
après avoir cuvé bien sur
 

raf26

XLDnaute Occasionnel
Re Patrick

j‘ai oublié de préciser que 4 cellules sur 4 feuilles différentes peuvent déclencher cette macro, le nom de fichier restant le même (Z4)

feuil1 A1
feuil 2 A2
etc

le premier enregistrement (feuil1 par ex) c’est ok
mais si après je saisis dans feuil2 A2 c’est là que cela crée un sous dossier


A la tienne :)
 

Phil69970

XLDnaute Barbatruc
Bonjour Raf, Patrick, le forum

Un essai :
VB:
Sub test()
Dim Chemin As String
Dim NomDossier As String
Dim NomFichier As String

Application.DisplayAlerts = False

NomDossier = ActiveSheet.[Z4].Value
NomFichier = ActiveSheet.[Z2].Value

NomFichier = NomFichier & ".xlsm"

Chemin = Application.ActiveWorkbook.Path & "\" & NomDossier & "\"
If Dir(Chemin, vbDirectory) = "" Then MkDir Chemin

ActiveWorkbook.SaveCopyAs Filename:=Chemin & NomFichier

Application.DisplayAlerts = True
End Sub

ATTENTION :Si le fichier existe la macro l'écrase sans avertissement

@Phil69970
 

patricktoulon

XLDnaute Barbatruc
bonsoir @Phil69970
VB:
Sub test()
    Dim Chemin$, NomDossier$, NomFichier$, response As VbMsgBoxResult
    Application.DisplayAlerts = False
    NomDossier = ActiveSheet.[Z4].Value
    NomFichier = ActiveSheet.[Z2].Value
    NomFichier = NomFichier & ".xlsm"
    Chemin = Application.ActiveWorkbook.Path & "\" & NomDossier & "\"
    If Dir(Chemin, vbDirectory) = "" Then MkDir Chemin
    response = vbYes
    If Dir(Chemin & NomFichier) <> "" Then
        response = MsgBox("un fichier du meme nom existe " & vbCrLf & " voulez vous l'ecraser", vbYesNo)
    End If
    If response = vbYes Then ActiveWorkbook.SaveCopyAs Filename:=Chemin & NomFichier
    Application.DisplayAlerts = True
End Sub
 

raf26

XLDnaute Occasionnel
Bonjour Phil et Patrick

un grand merci pour vos retours, les 2 solutions proposées fonctionnent.

Je retiens la solution de Phil puisque effectivement l'écrasement du fichier sans avertissement ne me pose pas de problèmes.

Toutefois, même si le dossier est bien créé et le fichier est enregistré au bon nom dans ce dossier, je travaille sur la version originale du fichier et non pas sur le fichier crée par la macro

C'est à dire que si j'enregistre (via l'icone dans la barre des menus), cela enregistre le fichier original avec les valeurs saisies, et non pas le fichier créé via la macro

Or dans ma macro initiale, dès la macro lancée, je travaillais non plus sur l'original mais bien sur le fichier crée.

Quelle ligne modifier pour résoudre ce problème ?

Cordialement
 

raf26

XLDnaute Occasionnel
Pour résumer :

1 fichier original qui sert de base : fichier01.xlsm

Macro9 déclenchée par saisie d'une valeur dans 4 cellules de 4 feuilles différentes (ça c'est ok)

Cette macro9 enregistre le fichier original sous le nom Z2 et crée si besoin un dossier sur le bureau nommé Z4 : C/ bureau / nomdossierZ4 / nomfichierZ2.xlsm

Dès cette macro9 exécutée, le fichier à l'écran n'est plus l'original mais le fichier créé nommé via Z2 : nomfichierZ2.xlsm

Si on enregistre ce fichier, cela écrase le fichier dans le dossier : C/ bureau / nomdossierZ4 / nomfichierZ2.xlsm sans créer de sous dossier, puisque dossier et fichier existent


Si la macro9 est lancée à nouveau : cela écrase le fichier dans le dossier : C/ bureau / nomdossierZ4 / nomfichierZ2.xlsm sans créer de sous dossier, puisque dossier et fichier exisent


Si je réouvre mon fichier original fichier01.xlsm celui doit etre vierge

J'espère avoir été assez clair.

Bonne journée.

Cordialement
 

Phil69970

XLDnaute Barbatruc
Raf

Si j'ai bien compris :

1)Tu as un fichier modèle que tu ouvres puis tu remplis les cellules que tu souhaites
2)Après c'est un peu le flou dans mon esprit sur ce que tu veux faire.

A)==> Tu enregistres le nouveau fichier et tu gardes le fichier modèle ouvert pour rentrer de nouvelles valeur ?
Ou bien
B)==> Tu fermes le fichier modèle et tu travailles sur le nouveau fichier qui vient d'être crée mais alors pourquoi l'enregistrer si tu n'as pas fini de travailler avec.
C)==> Tu fais autres choses et réexpliques lentement !!!:rolleyes:

Chaque option A, B, et C s’exclue mutuellement.
Voir un bout de ton fichier éventuellement

En te relisant j'ai cru comprendre que tu veux désactivé l'enregistrement via le menu
C'est à dire que si j'enregistre (via l'icone dans la barre des menus), cela enregistre le fichier original avec les valeurs saisies, et non pas le fichier créé via la macro


@Phil69970
 
Dernière édition:

raf26

XLDnaute Occasionnel
Re Phil,

1)Tu as un fichier modèle que tu ouvres puis tu remplis les cellules que tu souhaites
---> OUI, la première saisie est le nom (qui déclenche la macro)


B)==> Tu fermes le fichier modèle et tu travailles sur le nouveau fichier qui vient d'être crée mais alors pourquoi l'enregistrer si tu n'as pas fini de travailler avec.
---> OUI

pourquoi l'enregistrer ? des données peuvent être saisies dans les autres feuilles. Avec ta macro, je travaille sur l'original et les nouvelles saisies réalisées après l'éxécution de la macro ne sont pas enregistrées dans le nouveau fichier

En te relisant j'ai cru comprendre que tu veux désactivé l'enregistrement via le menu
---> NON j'ai besoin d'enregistrer (sur le fichier créé par la macro) les données saisies


Ta dernière macro me convient, je veux juste en plus :

travailler sur le fichier enregistré dès que la macro est exécutée, et non pas sur fichier original et ainsi lorsque j'enregistre à nouveau (via le menu) que ce soit sur le fichier créé par la macro et non pas sur le fichier original


Je joins un fichier se rapprochant de mon original

Cordialement
 

Pièces jointes

  • Classeur1.xlsm
    24.9 KB · Affichages: 16
Dernière édition:

Discussions similaires