Problème de sauvegarde en VBA
LouisBlanc
Messages postés
14
Statut
Membre
-
LouisBlanc Messages postés 14 Statut Membre -
LouisBlanc Messages postés 14 Statut Membre -
Bonjour,
Je me suis peut être trompé de rubrique, alors je repose ma question ici
Je réalise une Macro VBA Excel pour traiter des données.
En fin de programme, j'ouvre la boite "enregistrer sous" avec un nom proposé par défaut.
Tout fonctionne bien sauf si le nom de fichier existe déjà. Un message d'alerte apparait me demandant si je veux tout de même sauver, si je veux annuler, et je peux aussi fermer la boite avec la petite "X" en haut à droite.
Si je sauve quand même, pas de problème. Mais si j'annule ou je ferme la fenêtre, bug de la macro.
Je ne trouve pas les codes permettant de traiter les réponses à cette boite de dialogue.
A savoir que je sais éviter son affichage, mais ça ne m'intéresse pas, car cette sécurité est importante pour moi.
Auriez vous des propositions ?
Si dessous la partie de code concernée.
Merci d'avance
*************
Do
NomSauve = Application.GetSaveAsFilename(InitialFileName:=NomDeSauvegarde, FileFilter:="fichier excel, *.xls", Title:="Entrer un nom")
If NomSauve <> "Faux" Then Exit Do
Loop
ActiveWorkbook.SaveAs Filename:= _
NomSauve _
, FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
************
Je me suis peut être trompé de rubrique, alors je repose ma question ici
Je réalise une Macro VBA Excel pour traiter des données.
En fin de programme, j'ouvre la boite "enregistrer sous" avec un nom proposé par défaut.
Tout fonctionne bien sauf si le nom de fichier existe déjà. Un message d'alerte apparait me demandant si je veux tout de même sauver, si je veux annuler, et je peux aussi fermer la boite avec la petite "X" en haut à droite.
Si je sauve quand même, pas de problème. Mais si j'annule ou je ferme la fenêtre, bug de la macro.
Je ne trouve pas les codes permettant de traiter les réponses à cette boite de dialogue.
A savoir que je sais éviter son affichage, mais ça ne m'intéresse pas, car cette sécurité est importante pour moi.
Auriez vous des propositions ?
Si dessous la partie de code concernée.
Merci d'avance
*************
Do
NomSauve = Application.GetSaveAsFilename(InitialFileName:=NomDeSauvegarde, FileFilter:="fichier excel, *.xls", Title:="Entrer un nom")
If NomSauve <> "Faux" Then Exit Do
Loop
ActiveWorkbook.SaveAs Filename:= _
NomSauve _
, FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
************
5 réponses
-
Bonjour,
Essaies ce code :Option Explicit Sub Sauve() Dim NomSauve As Variant Dim NomDeSauvegarde As String NomDeSauvegarde = "Nom du fichier" Sauve_Loop: NomSauve = Application.GetSaveAsFilename(InitialFileName:=NomDeSauvegarde, _ FileFilter:="fichier excel, *.xls", Title:="Entrer un nom") If NomSauve = False Then Exit Sub On Error GoTo Sauve_Error ActiveWorkbook.SaveAs NomSauve On Error GoTo 0 Exit Sub Sauve_Error: Select Case Err.Number Case 1004 Resume Sauve_Loop Case Else MsgBox "Erreur " & Err.Number & vbCr & Err.Description End Select End Sub -
Merci.
J'ai bosser sur une macro tout le weekend et une grande partie de la nuit.
Je suis obligé de décrocher maintenant.
Normalement je reprends ça la semaine prochaine.
Je testerai et reviendrai vers vous
Cordialement -
Bonjour à tous
Merci Pratrice33740, j'ai essayé et adapté ton code, et ça marche bien.
Me reste 2 petits soucis :
- dans la boite d'alerte à la sauvegarde, les boutons "non" et "annuler" ont le même effet, et je n'ai pas réussi à changer. Est il possible que l'action "annuler" de cette boite d'alerte m'envoie en fin de programme (End Sub)
- en plus, comme je suis débutant, je ne comprend pas tout ton code (voir ci dessous) . Si tu pouvais m'éclairer ?
Et merci encore.
**************
On Error GoTo Sauve_Error
ActiveWorkbook.SaveAs NomSauve
On Error GoTo 0 '''la, c'est quoi ce goto 0
Exit Sub
Sauve_Error:
Select Case Err.Number
Case 1004
Resume Sauve_Loop ''' ici pourquoi resume et pas goto
Case Else
MsgBox "Erreur " & Err.Number & vbCr & Err.Description
End Select -
Bonjour,
« dans la boite d'alerte à la sauvegarde, les boutons "non" et "annuler" ont le même effet, et je n'ai pas réussi à changer. »
Effectivement, les boutons "Non" et "Annuler" renvoient la même réponse False, il n'est pas simple de les différencier.
« Est il possible que l'action "annuler" de cette boite d'alerte m'envoie en fin de programme (End Sub) »
C'est le cas : Exit Sub permet de terminer la procédure.
On Error GoTo Sauve_Error : permet de remplacer la gestion d'erreur du système par une gestion personnalisée (située en Sauve_Error)
On Error GoTo 0 : permet de rendre la gestion d'erreur au système.
Resume : permet de sortir de la gestion d'erreur personnalisée pour reprendre l'exécution normale de la procédure. Resume Sauve_Loop : reprend l'exécution à l'endroit indiqué (à Sauve_Loop). GoTo Sauve_Loop n'aurait pas permis de sortir de la gestion d'erreur -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Bonjour
J'étudie et approfondis ça plus tard.
Dans tous les cas, merci pour les réponses... j'aurais aimé que le bouton non me repropose la boite enregistrersous pour changer le nom du fichier, et que le bouton annuler arrête le programme, mais bon, c'est trop fort pour moi !!!
Salutations à tous