Excel Macro Ecraser un fichier existant sans confirmation.

Signaler
-
 JeanVoit -
Bonjour,
C'est ma 1er demande, merci de votre indulgence ):
voici ma macro :

Sub SauvAgenda()
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.displayalert = False
'
' SauvAgenda Macro
'
    ChDir "F:\Jean\Banque"
        ActiveWorkbook.SaveAs Filename:="F:\Jean\Banque\Agenda.xlsm", FileFormat:= _
        xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
Application.displayalert = True
End Sub
End Sub


Pour autant, elle me demande confirmation "le fichier existe déjà..."
Je fais mes 1ers pas alors je ne comprends pas bien où et l'erreur..
Pouvez-vous m'aider?
Cdlt JG

6 réponses

Messages postés
53586
Date d'inscription
lundi 13 août 2007
Statut
Contributeur
Dernière intervention
8 avril 2021
15 632
Tu as essayé FALSE au lieu de TRUE (juste avant End Sub) ?
J'ai reproduit la double réponse identique à la même question en 2010...sur ce site
Si je fais l'inverse, ne vais-je pas mettre vrai avant faux?
Merci!
Cdlt JG
Bonjour,

On ne peut pas imbriquer une procédure dans une autre :

Sub SauvAgenda()
Private Sub Workbook_BeforeClose(Cancel As Boolean)
....
End Sub
End Sub


Il faut les écrire séparément. Puis faire un appel de l'une dans l'autre !

Par exemple :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
.... Call SauvAgenda()
End Sub

Sub SauvAgenda()
...
End Sub
Merci infiniment...
Voici ma traduction de votre indication :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call SauvAgenda
End Sub
Sub SauvAgenda()
Application.displayalert = False
'
' SauvAgenda Macro
'
    ChDir "F:\Jean\Banque"
        ActiveWorkbook.SaveAs Filename:="F:\Jean\Banque\Agenda.xlsm", FileFormat:= _
        xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
Application.displayalert = True
End Sub

A l’exécution, il n'y a pas de changement, la question demeure "le fichier existe déjà..."
Ai-je mal placé ou mal écrit la commande application.displayalert = ?
Merci de votre aide précieuse.
Cdlt JG
Messages postés
648
Date d'inscription
jeudi 18 juillet 2019
Statut
Membre
Dernière intervention
6 avril 2021
46
Bonjour à tous,

C'est Application.DisplayAlerts (avec un "s" à la fin).

Cordialement
>
Messages postés
648
Date d'inscription
jeudi 18 juillet 2019
Statut
Membre
Dernière intervention
6 avril 2021

Bonsoir ALS35,
Merci de cette information que j'ai appliqué immédiatement sans changer la structure ci dessus.
A l’exécution, il n'y a pas de changement, la question demeure "le fichier existe déjà..."
Désolé, je ne suis pas assez initié pour identifier le problème.
Merci de votre aide!!
Cdlt JG
Messages postés
23989
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
8 avril 2021
6 718
Bonjour,

supprime-le avant s'il existe :
If Dir("F:\Jean\Banque\Agenda.xlsm") <> "" Then Kill "F:\Jean\Banque\Agenda.xlsm" 

eric
En essayant continuellement, on finit par réussir. 
Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
Cette solution devrait résoudre le problème en effet.
Ça devrait aussi marcher en passant le paramètre ConflictResolution:=xlLocalSessionChanges ?
https://docs.microsoft.com/fr-fr/office/vba/api/excel.xlsaveconflictresolution
Messages postés
23989
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
8 avril 2021
6 718 > RoMa.31
De mémoire, ça c'est pour résoudre les conflits dans les classeurs partagés (sur réseau, à l'ancienne). Lorsqu'il y a une collision entre 2 modifs
eric
Bonjour,
Merci eriiic et RoMa 31 de votre aide précieuse.
Voici l script:
Sub SauvAgenda()
'
' SauvAgenda Macro
'
If Dir("F:\Jean\Banque\Agenda.xlsm") <> "" Then Kill "F:\Jean\Banque\Agenda.xlsm"
    ChDir "F:\Jean\Banque"
          ActiveWorkbook.SaveAs Filename:="F:\Jean\Banque\Agenda.xlsm", FileFormat:= _
                xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End Sub

Pour autant il affiche toujours la demande " le fichier existe déjà..."
Ai-je fait une erreur dans le code?
Merci encore!!
Cdlt JeanVoit
Messages postés
346
Date d'inscription
samedi 7 novembre 2020
Statut
Membre
Dernière intervention
8 avril 2021
70
C'est étonnant puisque le fichier d'origine est effacé s'il existe !
Il n'y a pas un problème avec Agenda.xlsm ? On peut l'effacer de façon classique avec l'explorateur de Windows ?

Manifestement la macro est appelée depuis le fichier Agenda.xslm (ActiveWorkbook ?) auquel cas, il n'a pas envie de se suicider !
Dans ce cas, au lieu .SaveAs... il faudrait simplement utiliser .Save sauf la première fois où il faut donner un nom au fichier :
Ca pourrait alors donner quelque chose du genre :
Sub SauvAgenda()
'
' SauvAgenda Macro
'
Application.DisplayAlerts=false
ChDir "F:\Jean\Banque"
If Dir("F:\Jean\Banque\Agenda.xlsm") <> "" Then  'Existe déjà
 ActiveWorkbook.Save
else ' Le fichier n'existe pas encore
 ActiveWorkbook.SaveAs Filename:="F:\Jean\Banque\Agenda.xlsm", FileFormat:= _
 xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
endif
Application.DisplayAlerts=true

On remet éventuellement les DisplayAlerts

PS : penser à utiliser les balises pour poster du code. Exemple pour le VBA :
Merci!! Roma_31

Sub SauvAgenda()
'
' SauvAgenda Macro
'
Application.DisplayAlerts = False
ChDir "F:\Jean\Banque"
If Dir("F:\Jean\Banque\Agenda.xlsm") <> "" Then 'Exite déjà
ActiveWorkbook.Save
Else ' Le fichier n'existe pas déjà
ActiveWorkbook.SaveAs Filename:="F:\Jean\Banque\Agenda.xlsm", FileFormat:= _
xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End If
Application.DisplayAlerts = True
End Sub

... Mais la question demeure.
Le ficher existe dans "banque", il n'est peut-être pas utile de faire une condition.
C'est ma sauvegarde supplémentaire dans le cas ou le fichier ouvert, un surf sur internet vienne le détériorer comme cela vient d'arriver...
Je comprends le code et ne comprends pas pourquoi cela ne fonctionne pas.
Peut être faut-il simplement décocher une option dans l'enregistrement, type "confirmer avant d'écraser" coche oui/non.
Je suis un peu naïf peut-être

PS: Je fait un copier/collé du code dans le module directement, sans utiliser les balises...
Cdlt
Jean
Messages postés
23989
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
8 avril 2021
6 718
Bonjour,

s'il ne s'agit pas de lui-même et que c'est bien SaveAs qu'il faut, il faut peut-être un petit délai pour que l'effacement se fasse.
Teste en insérant une tempo de 1s pour voir :
Application.Wait DateAdd("s", 1, Now())

Si ça fonctionne on fera autrement pour pouvoir la réduire
eric
>
Messages postés
23989
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
8 avril 2021

Bonjour Eric,
Merci pour ces infos.
Je ne souhaite pas charger une appli pour une chose aussi simple.
J'ai compris que la meilleure solution était de supprimer le fichier existant avant :
"F:\" est un HD externe.

Ce code ne fonctionne pas.
Où est l'erreur?

Kill "F:\Jean\Banque\Agenda.xlsm"
Application.Wait DateAdd("s", 1, Now())

Le fichier ne s'efface pas :((
Cdlt
Jean
Messages postés
23989
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
8 avril 2021
6 718 > JeanVoit
Bonjour,

aucune idée...
Tu es bien sur PC et il s'agit bien d'un HD externe et non sur réseau ?
Parfois vba a du mal avec les chemins réseau et il faut plus lui passer le chemin UNC : https://fr.wikipedia.org/wiki/Universal_Naming_Convention
eric
>
Messages postés
23989
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
8 avril 2021

Bonjour,
Oui, je ne suis pas en réseau.
Merci pour tout Eric.
Pour l'instant je vais laisser tomber et reprendrais plus tard si je trouve une astuce.
Bonne soirée.
Cdlr
Jean
Messages postés
23989
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
8 avril 2021
6 718 > JeanVoit
Et tu n'as pas de message d'erreur ?
Qu'affiche :
msgbox Dir("F:\Jean\Banque\Agenda.xlsm")

?
>
Messages postés
23989
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
8 avril 2021

Ben, non.
La fenêtre de confirmation s'ouvre "le fichier existe déjà..."
Lorsque je tente d'enregistrer un macro dans laquelle j'efface le fichier dans "banque", la macro est vide.
J'ai observé un option cochée qui enregistre le fichier dans Excel par sécurité, dans le cas ou ça "ferme" sans enregistrer.
Je vais donc me fier à cette option en cas de bug du PC.
Merci de ton aide précieuse. Sans cela je n'aurais pas été attentif aux options...