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
A voir également:
- Écraser un fichier
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
6 réponses
Bonjour,
On ne peut pas imbriquer une procédure dans une autre :
Il faut les écrire séparément. Puis faire un appel de l'une dans l'autre !
Par exemple :
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 :
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
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 :
eric
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:
Pour autant il affiche toujours la demande " le fichier existe déjà..."
Ai-je fait une erreur dans le code?
Merci encore!!
Cdlt JeanVoit
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 :
On remet éventuellement les DisplayAlerts
PS : penser à utiliser les balises pour poster du code. Exemple pour le VBA :
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
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 :
Si ça fonctionne on fera autrement pour pouvoir la réduire
eric
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
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
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
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
Si je fais l'inverse, ne vais-je pas mettre vrai avant faux?
Merci!
Cdlt JG