Problème de sauvegarde en VBA

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

  1. 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
    1. 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
      1. 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
        1. 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
          1. 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