Problème Sauvegarde fichier

Pticle94

XLDnaute Nouveau
Bonjour,
J'ai un souci avec ce code
Code:
Application.Workbooks.Add
ActiveWorkbook.SaveAs Filename:="Fichier du " & Format(Date, "dddd d mmm yyyy")
Lors de la première exécution de ce code pas de problèmes.

Variante 1:
Je ferme le classeur ouvert.
Mais dès la deuxième exécution le même jour, j'ai un message qui m'indique qu'un fichier du même nom existe déjà et si je veux le remplacer.
Jusque là tout me va.
Si je clique sur oui pas de soucis le fichier est écrasé (selon ma volonté).
Mais si je clique sur non ou sur annuler j'ai une erreur de Script: "La méthode 'SaveAs' de l'objet '_Workbook' a échoué"

Variante 2:
Je laisse le classeur ouvert.
Je met le classeur avec le code en premier plan et je réexécute le code.
Et là erreur de script: "Impossible d'enregistrer ce classeur sous le même nom qu'un autre classeur [...] ouvert.[...]"

Je sais que je n'ai plus d'erreurs en mettant à la place ce code
Code:
Application.DisplayAlerts = False
Application.Workbooks.Add
ActiveWorkbook.SaveAs Filename:="Tarot du " & Format(Date, "dddd d mmm yyyy")
Application.DisplayAlerts = True
Mais je ne veux pas qu'il écrase le fichier.
Donc méthode non acceptée.


Je voudrais qu'au lieu de me mettre des erreurs de script, Excel me propose de modifier le nom du fichier ou alors rajoute automatiquement (x) à la fin du fichier (où x est un entier ou une lettre non utilisés).

Merci d'avance.
 

Staple1600

XLDnaute Barbatruc
Re : Problème Sauvegarde fichier

Bonsoir

Une petite modif

Application.Workbooks.Add
ActiveWorkbook.SaveAs Filename:="Fichier du " & Format(Date, "dddd d mmm yyyy") & "x" &Format(Time("mm-ss")


Une autre modif
Code:
Dim rnb As Integer
rnb = Int(Rnd() * (90 - 65) + 65) 'création d'un chiffre entre 65 et 90
Application.Workbooks.Add
ActiveWorkbook.SaveAs Filename:="Fichier du " & _
Format(Date, "dddd d mmm yyyy") & LCase(Chr(rnb)) & Format(Time,"ss")
End Sub
 
Dernière édition:

Pticle94

XLDnaute Nouveau
Re : Problème Sauvegarde fichier

Merci de la réponse aussi rapide.

En fait le x je m'en fous un peu.
C'était juste pour avoir quelque chose après mon nom pour éviter qu'il y ait le même nom.


En fait je ne veux mettre quelque chose après "Fichier du jeudi 14 juin 2007" que si ce fichier existe déjà dans le dossier de destination et ce quelque chose j'aimerai que ce soit un entier non déjà utilisé de telle façon que le nouveau nom du classeur n'existe pas dans mon dossier.

Une sorte de vérification pour savoir si le nom du classeur existe déjà si non on enregistre et si oui on rajoute "(1)" et on revérifie l'existence. Si ce nom de fichier existe déjà alors on rajoute non pas "(1)" mais "(2)".


J'espère que c'est pas trop compliqué à comprendre.
 

Pticle94

XLDnaute Nouveau
Re : Problème Sauvegarde fichier

Merci de ton aide.

Mais là encore il est possible (avec beaucoup de malchance) qu'on tombe sur deux noms de fichiers identiques.

C'est déjà mieux en terme de probabilité mais même en prenant un nombre entre 1 et 10000 il y a toujours cette possibilité là.

Je voudrais la rendre nulle.
 

Staple1600

XLDnaute Barbatruc
Re : Problème Sauvegarde fichier

Re

Pour commencer une fonction pour tester la présence d'un fichier

Function FileExists(sFilePath As String) As Boolean
FileExists = (Dir(sFilePath) <> "")
End Function

Et ici quelques exemples (je n'ai pas teste le fichier)
https://www.excel-downloads.com/attachments/exemples_de_sauvegardes_par_vba-zip.5792/


Et voici une facon de traiter un backup
Sub backupBYDATE()
'Don Guillett, misc, 2000-05-08 modified filename for date......
'documented in Backup your files, always take backups
Dim dname as String, strTest as String
dname = "c:\mybackup\B" & Format(Now(), "yyyy_mmdd")
strTest = Dir(dname, vbDirectory)
If (strTest = "") Then MkDir (dname)
ActiveWorkbook.SaveCopyAs dname & "\BK_" & ActiveWorkbook.Name
ActiveWorkbook.Save 'also save current file
End Sub
 
Dernière édition:

Pticle94

XLDnaute Nouveau
Re : Problème Sauvegarde fichier

Merci à toi Staple1600

Voici le code que j'ai finalement utilisé pour enregistrer mon nouveau classeur sous un nom défini en vérifiant tout d'abord que ce nom n'existe pas déjà:
Code:
If FileExists("Fichier du " & Format(Date, "dddd d mmm yyyy") & ".xls") Then Application.Dialogs(xlDialogSaveAs).Show ("Fichier du " & Format(Date, "dddd d mmm yyyy") & " (1)") Else ecraser_sans_avertissement
Avec
Code:
Function FileExists(sFileName As String) As Boolean
    On Error Resume Next
    FileExists = ((GetAttr(sFileName) And vbDirectory) = 0)
End Function

Sub ecraser_sans_avertissement()
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:="Fichier du " & Format(Date, "dddd d mmm yyyy")
Application.DisplayAlerts = True
End Sub

J'espère que ça servira à d'autres.
 

Discussions similaires

Réponses
3
Affichages
426

Statistiques des forums

Discussions
312 555
Messages
2 089 561
Membres
104 211
dernier inscrit
clubdesjeunesdela7