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

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

5 réponses

  1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
     
    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
  2. 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
  3. 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
  4. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. 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