|
Publicité | ||||||||||||||||||||||
|
|
#1 (permalink) |
|
Membre du Club
![]() Date d'inscription: août 2008
Messages: 81
|
Bonjour à tous
Voilà j'ai une petite question, je voudrais simplement savoir si c'est faisable ou non et si oui comment. Voici ma question : J'ai plusieurs fichiers contenant les données de plusieurs commandes (1 commande par onglet avec entre 50 à 200 commandes/onglet par fichier). J'y ai intégré un onglet caché où je mets toutes mes données... Je voulais savoir s'il était possible de changer le nom du fichier juste avant de le quitter en lui ajoutant un mot dans son nom. exemple : fichier original "test.xls" Quand toutes les commandes ont été passées, il devient "test clos.xls". Puis dès que l'on rajoute une commande à faire il redevient "test.xls" Je pensais ajouter dans mon onglet caché un nombre de commande à faire et un nombre de commande faites puis comparer les 2 nombres. S'ils sont égaux ont mets clos sinon on laisse le nom tel quel. J'espère m'avoir fait comprendre dans mon explication un peu biscornue. Merci d'avance |
|
|
|
|
|
#2 (permalink) |
|
Membre Confirmé
![]() Date d'inscription: juillet 2006
Messages: 276
|
Bonjour,
Avec quelque chose dans cet esprit cela devrait être possible. (a mettre dans workbook) Code :
Private Sub Workbook_BeforeClose(Cancel As Boolean) If MettreIciLaConditionQuiVaBien Then ActiveWorkbook.Close SaveChanges:=True, Filename:="c:\" & Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4) & "_clos.xls" End If End Sub |
|
|
|
|
|
#3 (permalink) |
|
Membre du Club
![]() Date d'inscription: août 2008
Messages: 81
|
Merci pour cette réponse rapide qui marche à merveille mais qui me créé un 2ème fichier avec le nom + clos et il y a donc 2 fichiers dans mon répertoire.
Moi je voudrais qu'il n'en reste qu'un à chaque fois. Soit il s'appelle "test clos.xls" si tout est commandé soit "test.xls". Merci encore |
|
|
|
|
|
#5 (permalink) |
|
Expert Confirmé
![]() Date d'inscription: juillet 2008
Localisation: Elsass
Âge: 24
Messages: 1 887
|
Ben oui c'est normal il prend le nom et rajoute _clos a la fin du nom
Tu peux faire un test avec instr savoir si il y a deja un _clos Code :
if instr((ActiveWorkbook.Name,_clos)<>0 then ActiveWorkbook.Close SaveChanges:=True, Filename:="c:\" & Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4) & "_clos.xls" End If Et même a la main tu ne peux pas modifier le nom d'un fichier excel en étant sous excel (en tout cas je ne sais pas faire). Par contre une fois la sauvegarde faites tu peu supprimer le fichier sans le clos (je n'ai pas testé alors lance le en mode as a pas et dans un fichier indépendant Et vérifie qu'il n'y a pas d'erreur de frappe Code :
if instr((ActiveWorkbook.Name,_clos)<>0 then ActiveWorkbook.Close SaveChanges:=True, Filename:="c:\" & Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4) & "_clos.xls" kill ActiveWorkbook.Path & "\" & Left(ActiveWorkbook.Name, instr(ActiveWorkbook.Name,"_clos") - 1) & ".xls" End If msgbox ActiveWorkbook.Path & "\" & Left(ActiveWorkbook.Name, instr(ActiveWorkbook.Name,"_clos") - 1) & ".xls" Pour voir si tu va bien supprimer le bon |
|
|
|
|
|
#6 (permalink) |
|
Membre du Club
![]() Date d'inscription: août 2008
Messages: 81
|
Bonjour,
donc après test de cette macro : Code :
Sub test() instruct = InStr(1, ActiveWorkbook.Name, "clos", 1) resultat = Sheets("liste agents").Range("N1").Value - Sheets("liste agents").Range("O1").Value If resultat = 0 And instruct = 0 Then ActiveWorkbook.Close SaveChanges:=True, Filename:="P:\Unité Log\" & Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4) & " clos.xls" Kill Left(ActiveWorkbook.Name, InStr(ActiveWorkbook.Name, " clos") - 1) & ".xls" End If End Sub Code :
ActiveWorkbook.Close SaveChanges:=True, Filename:="P:\Unité Log\" & Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4) & " clos.xls"
Faut-il d'abord l'enregistrer, puis supprimer l'ancien puis fermer le nouveau?? |
|
|
|
|
|
#7 (permalink) |
|
Expert Confirmé
![]() Date d'inscription: juillet 2008
Localisation: Elsass
Âge: 24
Messages: 1 887
|
On va procéder par étape
On enregistre avec le clos Code :
ActiveWorkbook.Saveas:=True, Filename:="P:\Unité Log\" & Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4) & "_clos.xls" on supprime l'ancienne version qui ne contient pas _clo c'est ta première demande Code :
Kill Left(ActiveWorkbook.Name, InStr(ActiveWorkbook.Name, "_clos") - 1) & ".xls" Pour faire l'inverse (enregistrer sans le _clos et supprimer le _clos) je te laisse adapter, ca te permettra de comprendre ce qui se passe (ou plutôt ca te forcera a comprendre ce qui se passe Essaye puis revient nous voir avec ta version du code
Dernière modification par Krovax ; 01/07/2009 à 11h18. |
|
|
|
|
|
#8 (permalink) |
|
Membre du Club
![]() Date d'inscription: août 2008
Messages: 81
|
Franchement merci pour ton aide :
Voici le code final, qu'en penses tu? Code :
Application.DisplayAlerts = False
'si instruct = 0 : il a pas trouver clos sinon instruct<>0
instruct = InStr(1, ActiveWorkbook.Name, "clos", 1)
resultat = Sheets("liste agents").Range("N1").Value - Sheets("liste agents").Range("O1").Value
If resultat = 0 And instruct = 0 Then
nom = ActiveWorkbook.Name
ActiveWorkbook.SaveAs Filename:="P:\Unité Log\" & Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4) & " clos.xls"
Kill nom
Else
If resultat <> 0 And instruct = 0 Then
ActiveWorkbook.Save
Else
If resultat = 0 And instruct <> 0 Then
ActiveWorkbook.Save
Else
If resultat <> 0 And instruct <> 0 Then
nom = ActiveWorkbook.Name
ActiveWorkbook.SaveAs Filename:="P:\Unité Log\" & Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 9) & ".xls"
Kill nom
End If
End If
End If
End If
Application.DisplayAlerts = True
|
|
|
|
|
|
#9 (permalink) |
|
Expert Confirmé
![]() Date d'inscription: juillet 2008
Localisation: Elsass
Âge: 24
Messages: 1 887
|
je dirais juste
Code :
Kill "P:\Unité Log\" & nom
Code :
nom=ActiveWorkbook.Path & "\" & ActiveWorkbook.Name ActiveWorkbook.SaveAs Filename:= Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4) & " clos.xls" Kill nom
|
|
|
|
|
|
![]() |
||
[XL-2002] Changement de nom de fichier
|
||
| Outils de la discussion | |
|
|