Erreur d'exécution '1004' sur fermeture d'un fichier sauvegardé

Bonjour,

j'ai un petit soucis, j'ai un classeur (.xlsm) que je sauvegarde dans un dossier sauvegarde, le classeur sauvegarder et renommer avec la date du jour et son nom (.xlsm) Quand j'ouvre la sauvegarde aucun soucis et quand je ferme j'ai cette erreur

2022 02 23 17 24 30

Que puis je faire pour remédier à ce problème.

Voila le code pour le classeur actif.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Procédure permettant de réaliser un fichier de sauvegarde à la fermeture
'Déclaration des variables
Dim NomFichier As String
'Affectation des variables
NomDossier = "C:\Users\domto\Desktop\Test\classeur\Sauvegarde\"
'Désactiver les messages d'alertes
Application.DisplayAlerts = True
'Création du nom du fichier de sauvegarde (Date + Nom)
NomFichier = Format(Date, "YYYY-MM-DD") & "_" & "Classeur.xlsm"
'Sauvegarde du fichier backup
ActiveWorkbook.SaveCopyAs NomDossier & NomFichier
'On affiche le message de confirmation
Application.DisplayAlerts = False
MsgBox "Votre fichier de sauvegarde intitul_ : " & NomFichier & vbNewLine & _
"est dans le dossier suivant : " & NomDossier, vbOKOnly + vbInformation, "CONFIRMATION"
Application.Quit
End Sub

merci pour votre aide

Bonjour

La réponse est dans le message que vous recevez

En premier, cliquez sur "debogage" et dites sur quelle ligne le code s'arrête

Cordialement

Salut à tous,

Si tu ouvre le fichier dans la même journée tu te retrouve avec ce message d'erreur ajoute l'heure dans ton format pour créer un fichier unique.

NomFichier = Format(Now, "YYYY-MM-DD-hh-mm") & "_" & "Classeur.xlsm"

Bonjour à vous

Jean Paul: le code fonctionne c'est sur car je rajoute 2 données en plus (heure et minute). Le problème c'est qu'il va créer une nouvelle archive à chaque ouverture. L'avantage c'est de savoir si le fichier a été consulté je trouve cela bien (au moins tu sais si ton responsable la consulté )

et l'inconvénient c'est si le fichier est consulté 30 fois dans la journée :)

Dan : il y a une erreur car à l'ouverture, il active le contenu des macros, donc il ne peut pas sauvegarder avec le même nom de fichier

ActiveWorkbook.SaveCopyAs NomDossier & NomFichier

Donc je pense qu'il faudrait un code qui désactive le code des fichiers archivés

Donc je pense qu'il faudrait un code qui désactive le code des fichiers archivés

Avez-vous besoin du code dans le fichier sauvegardé ?

Non pas vraiment

Dans votre code posté, remplacez cette ligne

ActiveWorkbook.SaveCopyAs NomDossier & NomFichier

par ceci

With ActiveWorkbook
    .SaveCopyAs NomDossier & NomFichier
    With .VBProject.VBComponents("ThisWorkbook").CodeModule
        .DeleteLines 1, .CountOfLines
    End With
End With

Autre chose : j'éviterais absolument l'instruction "Application.quit" qui va fermer purement et simplement excel et fermera donc tous les fichiers ouverts.

Mettez plutot --> Activeworkbook.close

Salut à tous,

Pour suivre les ouvertures, tu peux aussi écrire dans un fichier log les évènements

' // WriteLinesInTextFile By Jean-Paul (Valtrase) le : 10/12/2021
' // Ecrit dans un fichier log un message
Sub WriteLinesInTextFile(FileName As String, Lines, Optional Replace As Boolean)
    Dim Channel As Long
    Dim Counter As Long

    Channel = FreeFile
    If Replace Then
        Open FileName For Output As Channel
    Else
        Open FileName For Append As Channel
    End If
    For Counter = LBound(Lines) To UBound(Lines)
        Print #Channel, Lines(Counter)
    Next Counter
    Close Channel
End Sub

' // WriteLog By Jean-Paul (Valtrase) le : 10/12/2021
' // Formate un message pour l'ecriture dans un fichier log
Sub WriteLog(Message)
Dim strDate As String
Dim strFullPath As String

    strDate = Format(Now, "yyyy-mm-dd hh:nn:ss")
    strFullPath = ThisWorkbook.Path & "\" & Replace(ThisWorkbook.Name, ".", "_") & ".log"
    Message = strDate & " | " & Environ("username") & " | " & Message
    WriteLinesInTextFile strFullPath, Message, False
End Sub

Tu appelles la Sub dans workBook_Open et _Close

Private Sub Workbook_Open()
    WriteLog "Informations | Ouverture du classeur par: " & Application.UserName
End Sub

Re,

Dan, je te remercie biensur pour l'aide

j'ai essayé erreur

2022 02 24 13 07 26
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Procédure permettant de réaliser un fichier de sauvegarde à la fermeture
'Déclaration des variables
Dim NomFichier As String
'Affectation des variables
NomDossier = "C:\Users\domto\Desktop\Test\classeur\Sauvegarde\"
'Désactiver les messages d'alertes
Application.DisplayAlerts = True
'Création du nom du fichier de sauvegarde (Date + Nom)
NomFichier = Format(Now, "DD-MM-YYYY") & "_" & "Classeur.xlsm"
'Sauvegarde du fichier backup
'ActiveWorkbook.SaveCopyAs NomDossier & NomFichier
With ActiveWorkbook
    .SaveCopyAs NomDossier & NomFichier
With .VBProject.VBComponents("ThisWorkbook").CodeModule
        .DeleteLines 1, .CountOfLines
    End With
End With
'On affiche le message de confirmation
Application.DisplayAlerts = False
MsgBox "Votre fichier de sauvegarde intitul_ : " & NomFichier & vbNewLine & _
"est dans le dossier suivant : " & NomDossier, vbOKOnly + vbInformation, "CONFIRMATION"
ActiveWorkbook.Close
End Sub

Re,

Si tu veux utiliser ce code tu dois Ajouter la référence Microsoft Visual Basic for Application Extensibility 5.X je pense

Re,

Jean paul,

aujourd'hui je suis chez moi et je fait des tests sur mon propre PC, et je serais surement pas autoriser à mettre à jour ou à installer quoi que ce soit sur le PC de l'entreprise

peux tu m'expliquer comment puis je mettre ton code pour suivre l'ouverture du fichier sans le sauvegarder (comme tu là compris je suis novice ++ donc trés novice voilà pourquoi les ++ )

sinon je pense l'avoir fait sur mon PC

2022 02 24 14 22 28

Cela fonctionne sans l'extension Extensibility

Remplacez le code que je vous ai proposé par celui ci-dessous

ActiveWorkbook.SaveAs NomDossier & NomFichier
With ActiveWorkbook
        With .VBProject.VBComponents("ThisWorkbook").CodeModule
            .DeleteLines 1, .CountOfLines
        End With
        .Close SaveChanges:=True
End With

Re

J'ai bien remplacer et toujours la méme erreur

2022 02 24 17 15 06

Votre macro est bien placée dans Thisworbook ?

Re,

Pour répondre à ta question.

  • Aller dans l'environnement VBE avec Alt + F11
  • Ajouter un module avec [Alt + I] et M
  • Renommer ou pas le module (par défaut Module1)
image
  • Copier et Coller le code que je t'ai donné je le remet
' // WriteLinesInTextFile By Jean-Paul (Valtrase) le : 10/12/2021
' // Ecrit dans un fichier log un message
Sub WriteLinesInTextFile(FileName As String, Line As String, Optional Replace As Boolean)
    Dim Channel As Long
    Dim Counter As Long

    Channel = FreeFile
    If Replace Then
        Open FileName For Output As Channel
    Else
        Open FileName For Append As Channel
    End If
        Print #Channel, Line
    Close Channel
End Sub

' // WriteLog By Jean-Paul (Valtrase) le : 10/12/2021
' // Formate un message pour l'ecriture dans un fichier log
Sub WriteLog(Message)
    Dim sDate As String
    Dim sFullPath As String
    Dim Counter As Byte
Dim sEntete As String

    sDate = Format(Now, "yyyy-mm-dd hh:nn:ss")
    sFullPath = Left(ThisWorkbook.FullName, InStrRev(ThisWorkbook.FullName, ".") - 1) & ".log"
    sEntete = sDate & " | " & ThisWorkbook.Name & " | "

    For Counter = LBound(Message) To UBound(Message)
        WriteLinesInTextFile sFullPath, sEntete & Message(Counter), False
    Next
End Sub

Maintenant dans la méthode de ThisWorkBook_Open tu peux mettre ce code :

image
Private Sub Workbook_Open()
    WriteLog "Ouverture du classeur par : " & Environ("username")
End Sub

tu as la possibilité de mettre plusieurs lignes avec un Array

Voilà tu trouvera un fichier texte dans le répertoire du classeur intitulé NomDuClasseur.log

Tu peux automatiser l'ouverture du fichier avec un bouton et la commande ci-dessous par exemple

vba.Shell "C:\WINDOWS\NOTEPAD.EXE " & Left(ThisWorkbook.FullName, InStrRev(ThisWorkbook.FullName, ".") - 1) & ".log",vbNormalFocus

Bonsoir à vous,

Votre macro est bien placée dans Thisworbook ?

oui Dan, quand j'ouvre le fichier d'origine (celui qui n'est pas sauvegardé), j'ai cette erreur.

2022 02 25 00 14 00 2022 02 24 13 07 26

Jean Paul je vois cela demain car il y a aussi une erreur et je voudrais d'abord résoudre la première

2022 02 24 23 52 31 2022 02 25 00 03 47

tu as la possibilité de mettre plusieurs lignes avec un Array

Voilà tu trouvera un fichier texte dans le répertoire du classeur intitulé NomDuClasseur.log

Tu peux automatiser l'ouverture du fichier avec un bouton et la commande ci-dessous par exemple

vba.Shell "C:\WINDOWS\NOTEPAD.EXE " & Left(ThisWorkbook.FullName, InStrRev(ThisWorkbook.FullName, ".") - 1) & ".log",vbNormalFocus

et là je n'ai pas bien compris ce que je dois faire

Bonne nuit à vous

Bonjour

oui Dan, quand j'ouvre le fichier d'origine (celui qui n'est pas sauvegardé), j'ai cette erreur.

Là je ne comprends pas ce que vous faites. le code n'agit qu'à la fermeture du fichier d'origine.

Faites un test avec ce fichier

14classeur2.xlsm (13.06 Ko)

Salut,

Va dans centre de gestion de la confidentialité depuis les options puis paramètres des macros et tu coches selon cette vue.

image

Bonjour Dan & Jean Paul

Bonne nouvelle si si

Alors j'ai essayé Le classeur 2 que tu as envoyé Dan snifff même erreur 1004.

et juste derrière Jean Paul poste un message et je m'empresse de faire la modification et là je retest , ton classeur 2 fonctionne Dan

je vous remercie énormément, je vais tester sur mon lieu de travaille et rajouter un code pour envoyer un message par mail pour indiquer ou est le fichier sauvegarder, je vais rajouter heure et minute dans la sauvegarde.

je vous tiens au courant lundi car pour l'instant je ne peux pas essayer sur mon lieu de travaille (je travaille que les weekend).

merci encore vous êtes trop fort.

bonsoir à vous,

voila je viens de tester sur mon poste de travail.

alors premier test non fructueux toujours cette erreur

donc j'ai modifié comme Jean Paul me l'a préconisé et op tout fonctionne.

j espère ne pas avoir d ennuis avec l'administrateur du réseau...

quand pensez vous ?

img 20220226 224139
Rechercher des sujets similaires à "erreur execution 1004 fermeture fichier sauvegarde"