Enregistrer classeur vba

matthieu2701

XLDnaute Occasionnel
Bonjour,

Je souhaite enregistrer mon classeur dans un chemin définit. Il s'enregistre sous le nom que j'ai définis c'est a dire NOM Prénom PCE GAZ-Perd.

Cela fonctionne.

Par contre, lorsque je souhaite le réouvrir pour le modifier puis le ré-enregistrer j'ai un message d'errer qui est : "impossible d'accéder à NOM Prénom PCE Gaz-Perd.xlsm"

Je vous joint mon code. Pouvez m'aider à résoudre ce soucis ? Je souhaiterais qu'il indique que le fichier existe déjà et qui demande si je souhaite le remplacer ou pas.

Sub Enregistrer_Classeur()

With Sheets("Echéancier")
Nom = .Range("B2")
PCE = .Range("G6")
End With

If Nom = "" Or PCE = "" Then
MsgBox "Pour enregistrer le classeur d'un client, veuillez remplir les champs Nom Prénom et PCE et créer le dossier client.", vbInformation, "Information"
Exit Sub
End If

If Dir("Q:\AAGP2\PDD GAZ\PDD\Dossiers PDD\En cours\" & "\" & Nom & " " & PCE, vbDirectory) = "" Then
MsgBox "Le dossier numérique de " & Nom & " " & PCE & " n'a pas été créé. Veuillez le créer puis recommencer.", vbCritical, "Attention"
Exit Sub
End If

If Dir("Q:\AAGP2\PDD GAZ\PDD\Dossiers PDD\En cours\" & "\" & Nom & " " & PCE & "\" & Nom & " " & "Gaz-Perd", vbDirectory) <> "" Then
MsgBox "Le classeur de " & Nom & " a déjà été créé.", vbCritical, "Attention"
Exit Sub
End If

ChDir "Q:\AAGP2\PDD GAZ\PDD\Dossiers PDD\En cours\" & "\" & Nom & " " & PCE
ActiveWorkbook.SaveAs Filename:= _
"Q:\AAGP2\PDD GAZ\PDD\Dossiers PDD\En cours\" & "\" & Nom & " " & PCE & "\" & Nom & " " & "Gaz-Perd", FileFormat:=xlOpenXMLWorkbookMacroEnabled, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
End Sub

Merci par avance
 

Herdet

Nous a quitté
Repose en paix
Re : Enregistrer classeur vba

Bonjour matthieu2701,

Voici une solution avec création du répertoire manquant puis demande de confirmation d'écrasement.
Cordialement
Robert

Code:
Sub MOD_Enregistrer_Classeur()
   ThisWorkbook.Activate
   With Sheets("Echéancier")
      Nom = .Range("B2")
      PCE = .Range("G6")
      If Nom = "" Or PCE = "" Then
         .Range("B2").Select
         MsgBox "Pour enregistrer le classeur d'un client, veuillez remplir les champs Nom Prénom et PCE.", vbInformation, "Information"
         End
      End If
   End With
   
   Dossier = "Q:\AAGP2\PDD GAZ\PDD\Dossiers PDD\En cours\" & "\" & Nom & " " & PCE
   Fichier = Nom & " " & "Gaz-Perd"
   
   ' création du dossier s'il n'existe pas
   If Dir(Dossier, vbDirectory) = "" Then MkDir Dossier
   ChDir Dossier
   
   If Dir(Dossier & "\" & "Gaz-Perd") <> "" Then
      Reponse = MsgBox("Le classeur de " & Nom & " existe déjà." & vbLf & vbLf & _
                       "Confirmez-vous son remplacement ?", vbYesNo, "Attention")
      If Reponse = vbNo Then End
   End If
   
   ' sauvegarde du fichier
   ThisWorkbook.SaveAs Filename:=Dossier & "\" & Fichier, FileFormat:=xlOpenXMLWorkbookMacroEnabled

End Sub
 

Herdet

Nous a quitté
Repose en paix
Re : Enregistrer classeur vba

Merci pour votre réponse.

Je viens de tester et j'ai un message d'erreur : Fonction ou variable attendue
L'erreur peut provenir de la déclaration de "Reponse" lorsqu'on utilise Option explicit
Si nécessaire ajouter en tête de la sub : Dim Reponse as variant

Ligne à corriger car il y a des double \ :
Dossier = "Q:\AAGP2\PDD GAZ\PDD\Dossiers PDD\En cours\" & Nom & " " & PCE

au lieu de
Dossier = "Q:\AAGP2\PDD GAZ\PDD\Dossiers PDD\En cours\" & "\" & Nom & " " & PCE


Sinon sur quelle ligne (en jaune dans le code exécuté) ?

Mon test fonctionne bien après ces corrections.
A+
Robert
 

Jack2

XLDnaute Occasionnel
Re : Enregistrer classeur vba

Bonjour,

Est-ce que le problème ne viendrait pas du fait que lors de la sauvegarde le fichier est sauvé avec une extension xlsx alors que lors de la réouverture, l'extension est est ajoutée au nom du fichier est xls ?

A+
 
Dernière édition:

Herdet

Nous a quitté
Repose en paix
Re : Enregistrer classeur vba

Bon, je pense que le pb vient de ce que le fichier est enregistré sous en .xlsm mais l'enregistrer-sous suivant est fait par défaut en .xlsx.
Il faut donc forcer le .xlsm
Le code ci-dessous fonctionne pour Excel 2007 et suivants mais quid pour Excel 2003 (?)
A+
Robert

Version corrigée :
Code:
Sub MOD_Enregistrer_Classeur()
   ThisWorkbook.Activate
   With Sheets("Echéancier")
      Nom = .Range("B2")
      PCE = .Range("G6")
      If Nom = "" Or PCE = "" Then
         .Range("B2").Select
         MsgBox "Pour enregistrer le classeur d'un client, veuillez remplir les champs Nom Prénom et PCE.", vbInformation, "Information"
         End
      End If
   End With
   
   Dossier = "Q:\AAGP2\PDD GAZ\PDD\Dossiers PDD\En cours\" & Nom & " " & PCE

   Fichier = Nom & " " & "Gaz-Perd"
   
   ' création du dossier s'il n'existe pas
   If Dir(Dossier, vbDirectory) = "" Then MkDir Dossier
   ChDir Dossier

   If Dir(Dossier & "\" & Fichier & ".xlsm", vbNormal) <> "" Then
      Reponse = MsgBox("Le classeur de " & Nom & " existe déjà." & vbLf & vbLf & _
                       "Confirmez-vous son remplacement ?", vbYesNo, "Attention")
      If Reponse = vbNo Then End
   End If
   
   ' sauvegarde du fichier
   ThisWorkbook.SaveAs Filename:=Dossier & "\" & Fichier& ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled

End Sub
 

Jack2

XLDnaute Occasionnel
Re : Enregistrer classeur vba

Je veux dire que le fichier est sauvé comme fichier.xlsm et il est rappelé sans extension dans les test Dir (c'est une suggestion, excuses pour les erreurs de frappe)
 
Dernière édition:

Jack2

XLDnaute Occasionnel
Re : Enregistrer classeur vba

Herdet c'est mieux exprimé que moi pour le problème d'extension.

Pour éviter une erreur 1004 sous 2007, mettre la derrière ligne sans le chemin
Code:
ThisWorkbook.SaveAs Filename:=Fichier & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
de toute façon, il y a eut un Chdir

A+
 
Dernière édition:

Jack2

XLDnaute Occasionnel
Re : Enregistrer classeur vba

Bonjour matthieu2701, Bonjour le Forum,

Je veux bien essayer de t'aider (je suis débutant). Tu as ci-après le code de Herdet qui fonctionne également chez moi. Est-ce que tu peux le recopier, y compris Option Explicit, et dire à quel endroit ça plante (avec F8 par exemple) :
Code:
Option Explicit

Sub MOD_Enregistrer_Classeur()
Dim Nom As String, PCE As String
Dim Ext As String, Dossier As String, Fichier As String
Dim Reponse As Integer

    Ext = ".xls" ' extension à adapter selon la version d'Excel
    
    ThisWorkbook.Activate
    With Sheets("Echéancier")
      Nom = .Range("B2")
      PCE = .Range("G6")
      If Nom = "" Or PCE = "" Then
         .Range("B2").Select
         MsgBox "Pour enregistrer le classeur d'un client, veuillez remplir les champs Nom Prénom et PCE.", vbInformation, "Information"
         End
      End If
   End With
   
   Dossier = "D:\Excel\Aides\" & Nom & " " & PCE
   Fichier = Nom & " " & "Gaz-Perd" & Ext
   
   ' création du dossier s'il n'existe pas
   If Dir(Dossier, vbDirectory) = "" Then MkDir Dossier
   ChDir Dossier

   If Dir(Dossier & "\" & Fichier, vbNormal) <> "" Then
      Reponse = MsgBox("Le classeur de " & Nom & " existe déjà." & vbLf & vbLf & _
                       "Confirmez-vous son remplacement ?", vbYesNo, "Attention")
      If Reponse = vbNo Then End
   End If
   
   ' sauvegarde du fichier
   ThisWorkbook.SaveAs Filename:=Dossier & "\" & Fichier ', FileFormat:=xlOpenXMLWorkbookMacroEnabled
End Sub
La principale différence avec ton code, c'est de mettre une extension à ton fichier qui soit toujours la même.

Bonne chance et
A+
 

Discussions similaires

Réponses
10
Affichages
309

Statistiques des forums

Discussions
312 229
Messages
2 086 426
Membres
103 206
dernier inscrit
diambote