Problème de sauvegarde en VBA

Fermé
LouisBlanc Messages postés 12 Date d'inscription samedi 7 octobre 2006 Statut Membre Dernière intervention 27 novembre 2012 - 17 nov. 2012 à 12:03
LouisBlanc Messages postés 12 Date d'inscription samedi 7 octobre 2006 Statut Membre Dernière intervention 27 novembre 2012 - 27 nov. 2012 à 21:27
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

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



5 réponses

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 778
18 nov. 2012 à 15:32
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 12 Date d'inscription samedi 7 octobre 2006 Statut Membre Dernière intervention 27 novembre 2012
Modifié par LouisBlanc le 18/11/2012 à 18:12
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 12 Date d'inscription samedi 7 octobre 2006 Statut Membre Dernière intervention 27 novembre 2012
25 nov. 2012 à 11:22
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 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 778
27 nov. 2012 à 17:46
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 12 Date d'inscription samedi 7 octobre 2006 Statut Membre Dernière intervention 27 novembre 2012
27 nov. 2012 à 21:27
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