Enregitrement qui boucle

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

olivepao

XLDnaute Occasionnel
Bonjour à tous du forum

Je rencontre un petit problème lorsque je sauvegarde mon formulaire au format xls depuis mon formulaire-modèle au format xlt.

Je n'arrive pas à comprendre pourquoi il fait une boucle au moment du save.

En effet l'enregistrement se fait en arrière plan, ce que je désire. Mais une fois sauvé, la combobox de sauvegarde s'ouvre, ce que je ne désire pas.

Merci à tous pour votre aide

Voici les 2 macros qui sont liées à l'enregistrement.


Je joins également le fichier zipé (j'ai enlevé toutes les fioritures de présentation pour qu'il fasse moins de 48,8 Ko)


Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

' Macro exécutée à l'enregistrement du fichier

 MsgBox "Utilisateur " & Environ("username") + Chr$(13) + Chr$(13) _
                         & "Nous sommes le " & Date & " il est  " & Time & " " + Chr$(13) + Chr$(13) + Chr$(13) _
                         & "La demande de remplacement va être enregistrée sur votre disque personnel." + Chr$(13) + Chr$(13) + Chr$(13) _
                         & "Le fichier est enregistré sur le disque I:\DemandeTournants    " + Chr$(13) + Chr$(13) + Chr$(13) _
                         & "il se nomme CASS-Nom du Collaborateur-Date du remplacement     " + Chr$(13) + Chr$(13) + Chr$(13) + Chr$(13) _
                         & "Il ne vous reste plus qu'à lca faire parvenir par m@il au RU responsable du pool Tournants.        " + Chr$(13) + Chr$(13), _
                         vbOKOnly + vbExclamation, "                             -  LA DEMANDE EST REMPLIE CORRECTEMENT  -          "         ' <-- Mise en forme du message enregistrement

Dim Chemin As String, Lieu As String, NomAbs As String, m


Chemin = "C:\DemandeTournants"
Lieu = Sheets("Remplacement").Range("B3")       ' <-- Récupère la cellule B3 (Lieu de travail) de la feuille "Remplacement"
NomAbs = Sheets("Remplacement").Range("C5") ' <-- Récupère la cellule C5 (personne absente) de la feuille "Remplacement"
m = Month(Date)

CreationRepertoire Chemin

If m = 12 Then
ActiveWorkbook.SaveAs Chemin & "\" & Lieu & "-" & NomAbs & "-" & Year(Now) + 1 & "-" & Month(Now) - 11 & ".xls", _
                           FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False ' <-- Décembre
Else
ActiveWorkbook.SaveAs Chemin & "\" & Lieu & "-" & NomAbs & "-" & Year(Now) & "-" & Month(Now) + 1 & ".xls", _
                            FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=True, CreateBackup:=False ' <-- Janvier à novembre
End If


End Sub


Code:
Sub CreationRepertoire(Chemin As String)                        ' <-- Macro liée à EnregistreClasseur
'
' Macro création du répertoire si ce dernier n'existe pô !
'
    If Dir(Chemin, vbDirectory + vbHidden) = "" Then  ' <-- Vérifie si le répertoire existe. S'il n'existe pas, il est créé.
    MkDir Chemin
    End If
                
End Sub
 

Pièces jointes

Re : Enregitrement qui boucle

Bonjour,

ton code de sauvegarde se trouve dans l'evenementielle 'BeforeSave'.
Ce qui se passe :
Tu demande l'enregistrement
La macro BeforeSave se declanche
Elle demande elle aussi un Save as
Donc, de nouveau BeforeSave se declanche
Qui demande de nouveau de faire un save as
Qui declanche de nouveau BeforeSave 😱
ect
ect
...😱

Ben au moins le fichier il est sauvegardé 😀 !

Peut être en utilisant une variable Public qui serait à 0 lors de la demande d'enregistrement et qui passerai à 1 pour bloquer l'execution de l'evenementielle au moment des SaveAs ...
 
Re : Enregitrement qui boucle

Bonjour,

ton code de sauvegarde se trouve dans l'evenementielle 'BeforeSave'.
Ce qui se passe :
Tu demande l'enregistrement
La macro BeforeSave se declanche
Elle demande elle aussi un Save as
Donc, de nouveau BeforeSave se declanche
Qui demande de nouveau de faire un save as
Qui declanche de nouveau BeforeSave 😱
ect
ect
...😱

Ben au moins le fichier il est sauvegardé 😀 !

Peut être en utilisant une variable Public qui serait à 0 lors de la demande d'enregistrement et qui passerai à 1 pour bloquer l'execution de l'evenementielle au moment des SaveAs ...


🙂 Merci de ta réponse

😱 mais en langage clair VBA comment faire pour résoudre mon blème ? !
 
Re : Enregitrement qui boucle

Bonjour à tous,

Et en plus, le fichier n'est pas sauvegardé, puisque tout se passe Avant qu'il enregistre...

tu dois désactiver les évènements autour de tes 2 lignes qui enregistrent :

Code:
[COLOR=red]Application.EnableEvents = False[/COLOR]
If m = 12 Then
ActiveWorkbook.SaveAs Chemin & "\" & Lieu & "-" & NomAbs & "-" & Year(Now) + 1 & "-" & Month(Now) - 11 & ".xls", _
                           FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False ' <-- Décembre
Else
ActiveWorkbook.SaveAs Chemin & "\" & Lieu & "-" & NomAbs & "-" & Year(Now) & "-" & Month(Now) + 1 & ".xls", _
                            FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=True, CreateBackup:=False ' <-- Janvier à novembre
End If
[COLOR=red]Application.EnableEvents = True
[/COLOR]
 
Re : Enregitrement qui boucle

Bonjour à tous,

Et en plus, le fichier n'est pas sauvegardé, puisque tout se passe Avant qu'il enregistre...

tu dois désactiver les évènements autour de tes 2 lignes qui enregistrent :

Code:
[COLOR=red]Application.EnableEvents = False[/COLOR]
If m = 12 Then
ActiveWorkbook.SaveAs Chemin & "\" & Lieu & "-" & NomAbs & "-" & Year(Now) + 1 & "-" & Month(Now) - 11 & ".xls", _
                           FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False ' <-- Décembre
Else
ActiveWorkbook.SaveAs Chemin & "\" & Lieu & "-" & NomAbs & "-" & Year(Now) & "-" & Month(Now) + 1 & ".xls", _
                            FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=True, CreateBackup:=False ' <-- Janvier à novembre
End If
[COLOR=red]Application.EnableEvents = True
[/COLOR]

🙂 Merci tototiti2008, ta soluce me paraissait intéressante mais malheureusement cela ne fonctionne pas comme je le désire.

J'ai tjs la combobox de save qui s'ouvre après que le fichier se soit enregistré correctement.

Pour plus de précision, je veux que ma macro s'exécute totalement en arrière-plan lorsque je fais un clic sur l'une des icônes "enregistrement" ou "enregistrement sous" de la barre de d'outils ou du menu déroulant de "fichier".

😡 Je continue de chercher une soluce dans le forum et autres sites consacré à Excel et VBA mais sans succès pour l'instant.
 
Re : Enregitrement qui boucle

Bonjour à tous,

pour intercepter le mécanisme d'enregistrement classique dans BeforeSave, tu dois mettre :
Cancel = True

ça devrait donner :

Code:
[COLOR=#ff0000]Application.EnableEvents = False[/COLOR]
[COLOR=#ff0000]Cancel = true[/COLOR]
If m = 12 Then
ActiveWorkbook.SaveAs Chemin & "\" & Lieu & "-" & NomAbs & "-" & Year(Now) + 1 & "-" & Month(Now) - 11 & ".xls", _
                           FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False ' <-- Décembre
Else
ActiveWorkbook.SaveAs Chemin & "\" & Lieu & "-" & NomAbs & "-" & Year(Now) & "-" & Month(Now) + 1 & ".xls", _
                            FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=True, CreateBackup:=False ' <-- Janvier à novembre
End If
[COLOR=red]Application.EnableEvents = True
[/COLOR]
 
Re : Enregitrement qui boucle

Bonjour à tous,

pour intercepter le mécanisme d'enregistrement classique dans BeforeSave, tu dois mettre :
Cancel = True

ça devrait donner :

Code:
[COLOR=#ff0000]Application.EnableEvents = False[/COLOR]
[COLOR=#ff0000]Cancel = true[/COLOR]
If m = 12 Then
ActiveWorkbook.SaveAs Chemin & "\" & Lieu & "-" & NomAbs & "-" & Year(Now) + 1 & "-" & Month(Now) - 11 & ".xls", _
                           FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False ' <-- Décembre
Else
ActiveWorkbook.SaveAs Chemin & "\" & Lieu & "-" & NomAbs & "-" & Year(Now) & "-" & Month(Now) + 1 & ".xls", _
                            FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=True, CreateBackup:=False ' <-- Janvier à novembre
End If
[COLOR=red]Application.EnableEvents = True
[/COLOR]

🙂 🙂 Merci tototiti2008
Le code fonctionne mais il plante lorsqu'il y a doublon.

En effet si ma sauvegarde porte déjà le nom d'un fichier enregistré, j'ai la traditionnelle combobox qui m'indique qu'un fichier portant le même nom existe déjà et me demande si je veux l'écraser.

Il y a trois possibilités OUI NON et ANNULE. si je réponds OUI pas de problème par contre si je répond NON ou ANNULE, je reçois une combobox

Erreur d'exécution 1004
La méthode 'SaveAs' de l'objet'_Workb a échoué

Le problème reste entier . . .

Par contre je suis entrain de tester (tout ne fonctionne pas encore) une macro qu'il faut mettre dans un module. Cette macro détourne la valeur de "enregistré" de la barre d'outils et du menu déroulant "fichier". Ca donne ceci :

With Application.CommandBars
.Item(1).FindControl(ID:=3, Recursive:=True).OnAction = "MaMacro"
.Item("Standard").FindControl(ID:=3, Recursive:=True).OnAction = "MaMacro"
End With


Les deux instuctions ci-dessous se rapporte à "Enregistrer".

Il me manque encore l'instruction pour "Enregistrer Sous".

Bien entendu il faut remettre la valeur initiale qui devrait se faire sous :

With Application.CommandBars
.Item(1).FindControl(ID:=3, Recursive:=True).OnAction = ""
.Item("Standard").FindControl(ID:=3, Recursive:=True).OnAction = ""
End With



Pour l'instant, je cherche . . .
 
Re : Enregitrement qui boucle

je te déconseilles les interceptions de boutons... tu ne pourra pas gérer tous les cas (comme le raccourcis Ctrl+S par exemple).

si le fichier existe déjà, tu veux l'écraser ou pas, ou tu veux la boîte de dialogue qui ne plante pas ?
 
Dernière édition:
Re : Enregitrement qui boucle

une proposition qui ne devrait plus bugger :


Code:
Application.EnableEvents = False
On Error Resume Next
Cancel = True
If m = 12 Then
ActiveWorkbook.SaveAs Chemin & "\" & Lieu & "-" & NomAbs & "-" & Year(Now) + 1 & "-" & Month(Now) - 11 & ".xls", _
                           FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False ' <-- Décembre
Else
ActiveWorkbook.SaveAs Chemin & "\" & Lieu & "-" & NomAbs & "-" & Year(Now) & "-" & Month(Now) + 1 & ".xls", _
                            FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=True, CreateBackup:=False ' <-- Janvier à novembre
End If
On Error GoTo 0
Application.EnableEvents = True
 
Re : Enregitrement qui boucle

une proposition qui ne devrait plus bugger :


Code:
Application.EnableEvents = False
On Error Resume Next
Cancel = True
If m = 12 Then
ActiveWorkbook.SaveAs Chemin & "\" & Lieu & "-" & NomAbs & "-" & Year(Now) + 1 & "-" & Month(Now) - 11 & ".xls", _
                           FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False ' <-- Décembre
Else
ActiveWorkbook.SaveAs Chemin & "\" & Lieu & "-" & NomAbs & "-" & Year(Now) & "-" & Month(Now) + 1 & ".xls", _
                            FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=True, CreateBackup:=False ' <-- Janvier à novembre
End If
On Error GoTo 0
Application.EnableEvents = True


🙂 🙂 🙂 🙂

Merci tototiti2008

J'ai fais 4 x le test et ça fontionne nickel. J'espère que je n'aurais pas de mauvaise surprises.

Merci également à Staple1600 pour ces deux renvois
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
201
  • Question Question
Microsoft 365 Excel VBA
Réponses
14
Affichages
890
Réponses
9
Affichages
902
Retour