Salut,
J'ai bien lu tous les posts et tu résumes ce que tu cherches par :
Citation:
... 4créer un bouton qui fait une sauvegarde de chaque .xls dans un fichier sauvegarde et ouvre le .xls SOURCE pas la sauvegarde
se qu'on fait la... c'est trouvé un moyen pour que les sauvegarde s'incremente
je m'explique l'utilisateur clique sur le bouton...sa créer une sauvegarde Monfichier_01 et sa ouvre MonFichier....il fait des modification dans MonFichier...fait un ctrl+s et le ferme... elle reclicke sur le bouton... il faut reouvrir Monfichier et créer un MonFichier_02...ainsi desuite
Or il me semble que l'instruction FileCopy ne peut s'appliquer à lui-même.
en gros tu lui dis : "copie toi à l'endrois ou je te dis" et comme il est ouvert il peut pas d'où le message d'erreur du début
J'ai donc pensé à une astuce et pondu une macro qui fait exactement ce que tu veux à savoir :
Quand tu cliques sur le bouton a il se sauvegarde dans l'endrois de sauvegarde voulu puis on ouvre le fichier d'aurigine et on ferme de fichier qui viens de se sauvegarder
on se retrouve donc au final avec ta copie dont le fichier s'est incrémenté et le fichier d'aurigine ouvert
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| Sub Bouton1_QuandClic()
Dim i As Long
Dim chemin, nom_fic, chem_sav As String
i = 0
chemin = ThisWorkbook.Path
nom_fic = ThisWorkbook.Name
nom_source = ThisWorkbook.Name
long_nom = Len(nom_fic) - 4
chem_sav = chemin & "\sauvegarde\"
nom_fic = Mid(nom_fic, 1, long_nom)
nom_fic_sav1 = nom_fic & "_" & Format(i, "000") & ".xls"
Do
i = i + 1
nom_fic_sav = nom_fic & "_" & Format(i, "000") & ".xls"
nom_fic_sav_complet = chem_sav & nom_fic_sav
Loop Until Dir(nom_fic_sav) = ""
ActiveWorkbook.SaveAs Filename:=nom_fic_sav_complet
nom_source = chemin & "\" & nom_source
Workbooks.Open Filename:=nom_source
Windows(nom_fic_sav).Activate
Windows(nom_fic_sav).Close SaveChanges:=False
End Sub |
Je remercie au passage bbil pour son bout de code : test si fichier existe ou pas
je précise :
1 : ce code fonctionne sur 2000 : je l'ai tester
2 : ce code n'est pas optimisé
3 : Il n'est peut-être pas très bien écrit, mais bon cela fonctionne
4 : j'utilise pas ton "Application.Caller "
Dis si cela te conviens
Igloobel