Excel Macro Ecraser un fichier existant sans confirmation.
JeanVoit
-
JeanVoit -
JeanVoit -
Bonjour,
C'est ma 1er demande, merci de votre indulgence ):
voici ma macro :
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
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
-
Tu as essayé FALSE au lieu de TRUE (juste avant End Sub) ?
-
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 -
Bonjour,
supprime-le avant s'il existe :If Dir("F:\Jean\Banque\Agenda.xlsm") <> "" Then Kill "F:\Jean\Banque\Agenda.xlsm"
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
-
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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
-
-
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
-
-
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 -
-
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 -
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
-