Excel Macro Ecraser un fichier existant sans confirmation.

Fermé
JeanVoit - Modifié le 2 avril 2021 à 11:38
 JeanVoit - 6 avril 2021 à 14:44
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
A voir également:

6 réponses

Raymond PENTIER Messages postés 58388 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 17 avril 2024 17 088
1 avril 2021 à 17:38
Tu as essayé FALSE au lieu de TRUE (juste avant End Sub) ?
0
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
0
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
0
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
0
ALS35 Messages postés 1033 Date d'inscription jeudi 18 juillet 2019 Statut Membre Dernière intervention 9 janvier 2024 139
1 avril 2021 à 18:54
Bonjour à tous,

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

Cordialement
0
JeanVoit > ALS35 Messages postés 1033 Date d'inscription jeudi 18 juillet 2019 Statut Membre Dernière intervention 9 janvier 2024
1 avril 2021 à 19:06
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
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
Modifié le 2 avril 2021 à 11:39
Bonjour,

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

eric
0
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
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211 > RoMa.31
Modifié le 1 avril 2021 à 22:36
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
0
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
0

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

Posez votre question
Utilisateur anonyme
Modifié le 2 avril 2021 à 11:33
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 :
0
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
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
2 avril 2021 à 11:41
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
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
Modifié le 2 avril 2021 à 12:09
Si c'est pour un backup, tu aurais sans doute avantage d'utiliser un cloud gratuit comme google drive.
Ta sauvegarde se fera automatiquement (si tu es connecté bien sûr), et tu l'auras toujours même en cas de perte, vol, incendie etc, en plus de pouvoir le consulter de n'importe où
eric
0
Bonjour et MERCI!!
Je viens de faire le test mais en vain.
là je pars en déplacement jusqu' à 17h donc je reprends après.
Si je démarre par:

ChDir "F:\Jean\Banque"
Est-ce utile d'indiquer le chemin dans la condition?
If Dir("F:\Jean\Banque\Agenda.xlsm")...

Pourrait-on écrire :
if Dir("Agendat.xlsm") <> "" Then
C'est juste une question pour que j'apprenne... ;)

cdlt Jean
0
JeanVoit > eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023
2 avril 2021 à 12:23
Merci Eric pour cette idée.
C'est une excellente formule mais, pour ma part, je ne souhaite pas trop utiliser ces services donc le comportement intrusif me derrange au plus haut point...
Cdlt
JG
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211 > JeanVoit
2 avril 2021 à 12:54
Tu peux, mais il faut que tu sois sûr à 100% que le drive et le répertoire actif soient les bons.
Dans l'absolu ChDir n'est pas suffisant, il faudrait aussi ChDrive si besoin.

Si tu restes en local tu as un petit utilitaire, bien fait je trouve, qui crée une copie à chaque enregistrement d'un fichier que tu as décidé de superviser (ça peut être un répertoire aussi).
Pas mal de paramètres dont le nombre d'historique maxi.
Je le préfère à la sauvegarde de windows où on ne maîtrise rien sur ce qu'il fait
La version gratuite est largement suffisante : https://www.filehamster.com/
eric
0
JeanVoit > eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023
5 avril 2021 à 16:02
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
0