Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 30/06/2009, 14h37   #1
Nouveau Membre du Club
 
Inscription : août 2008
Messages : 100
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 100
Points : 26
Points : 26
Par défaut Changement de nom de fichier

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
phal2ip est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2009, 15h08   #2
Membre confirmé
 
Inscription : juillet 2006
Messages : 343
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 343
Points : 285
Points : 285
Bonjour,

Avec quelque chose dans cet esprit cela devrait être possible.
(a mettre dans workbook)
Code :
1
2
3
4
5
6
7
8
 
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
Access Newbie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2009, 15h30   #3
Nouveau Membre du Club
 
Inscription : août 2008
Messages : 100
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 100
Points : 26
Points : 26
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
phal2ip est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2009, 15h32   #4
Nouveau Membre du Club
 
Inscription : août 2008
Messages : 100
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 100
Points : 26
Points : 26
Je viens aussi de remarquer que si on le rouvre sans rien y modifié et qu'on le referme il créé un 3ème fichier avec "clos clos.xls"...
phal2ip est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2009, 15h42   #5
Membre Expert
 
Avatar de Krovax
 
Inscription : juillet 2008
Messages : 1 889
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : juillet 2008
Messages : 1 889
Points : 1 937
Points : 1 937
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 :
1
2
3
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 :
1
2
3
4
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
a ta place je ferais un
msgbox ActiveWorkbook.Path & "\" & Left(ActiveWorkbook.Name, instr(ActiveWorkbook.Name,"_clos") - 1) & ".xls"
Pour voir si tu va bien supprimer le bon
Krovax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2009, 10h32   #6
Nouveau Membre du Club
 
Inscription : août 2008
Messages : 100
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 100
Points : 26
Points : 26
Bonjour,
donc après test de cette macro :
Code :
1
2
3
4
5
6
7
8
9
10
11
 
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
Le problème est que le fichier se ferme à l'instruction :
Code :
1
2
 
        ActiveWorkbook.Close SaveChanges:=True, Filename:="P:\Unité Log\" & Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4) & " clos.xls"
et ne peux donc pas effacer l'ancien fichier qui ne contient pas le "clos"...
Faut-il d'abord l'enregistrer, puis supprimer l'ancien puis fermer le nouveau??
phal2ip est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2009, 10h42   #7
Membre Expert
 
Avatar de Krovax
 
Inscription : juillet 2008
Messages : 1 889
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : juillet 2008
Messages : 1 889
Points : 1 937
Points : 1 937
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"
A ce moment les deux fichier cohabite
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"
ensuite excel fermera tout seul le fichier en cours puisque l'on est dans before close

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.
Krovax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2009, 15h38   #8
Nouveau Membre du Club
 
Inscription : août 2008
Messages : 100
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 100
Points : 26
Points : 26
Franchement merci pour ton aide :
Voici le code final, qu'en penses tu?
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
    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
phal2ip est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2009, 15h45   #9
Membre Expert
 
Avatar de Krovax
 
Inscription : juillet 2008
Messages : 1 889
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : juillet 2008
Messages : 1 889
Points : 1 937
Points : 1 937
je dirais juste

Code :
Kill "P:\Unité Log\" & nom
ou alors
Code :
1
2
3
nom=ActiveWorkbook.Path & "\" & ActiveWorkbook.Name
ActiveWorkbook.SaveAs Filename:= Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4) & " clos.xls"
Kill nom
Après un test direct et la meilleur des corections
Krovax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2009, 15h58   #10
Nouveau Membre du Club
 
Inscription : août 2008
Messages : 100
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 100
Points : 26
Points : 26
Merci encore pour tout
phal2ip est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 12h19.


 
 
 
 
Partenaires

Hébergement Web