Problème de sauvegarde en VBA

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

************

A voir également:

5 réponses

Patrice33740 Messages postés 8931 Date d'inscription   Statut Membre Dernière intervention   1 782
 
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
0
LouisBlanc Messages postés 14 Statut Membre
 
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
0
LouisBlanc Messages postés 14 Statut Membre
 
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
0
Patrice33740 Messages postés 8931 Date d'inscription   Statut Membre Dernière intervention   1 782
 
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LouisBlanc Messages postés 14 Statut Membre
 
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
0