IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Changement de nom de fichier [XL-2002]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier

    Profil pro
    Inscrit en
    Août 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 141
    Points : 71
    Points
    71
    Billets dans le blog
    1
    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

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 357
    Points : 355
    Points
    355
    Par défaut
    Bonjour,

    Avec quelque chose dans cet esprit cela devrait être possible.
    (a mettre dans workbook)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Membre régulier

    Profil pro
    Inscrit en
    Août 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 141
    Points : 71
    Points
    71
    Billets dans le blog
    1
    Par défaut
    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

  4. #4
    Membre régulier

    Profil pro
    Inscrit en
    Août 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 141
    Points : 71
    Points
    71
    Billets dans le blog
    1
    Par défaut
    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"...

  5. #5
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  6. #6
    Membre régulier

    Profil pro
    Inscrit en
    Août 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 141
    Points : 71
    Points
    71
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    donc après test de cette macro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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??

  7. #7
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    On va procéder par étape
    On enregistre avec le clos
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  8. #8
    Membre régulier

    Profil pro
    Inscrit en
    Août 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 141
    Points : 71
    Points
    71
    Billets dans le blog
    1
    Par défaut
    Franchement merci pour ton aide :
    Voici le code final, qu'en penses tu?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  9. #9
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    je dirais juste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Kill "P:\Unité Log\" & nom
    ou alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  10. #10
    Membre régulier

    Profil pro
    Inscrit en
    Août 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 141
    Points : 71
    Points
    71
    Billets dans le blog
    1
    Par défaut
    Merci encore pour tout

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 17/01/2014, 00h06
  2. Importer fichier csv avec changement de nom
    Par devilprinprin dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/07/2010, 08h24
  3. Changement de nom des fichiers de données
    Par Tolede78 dans le forum Débuter
    Réponses: 4
    Dernier message: 26/01/2010, 10h55
  4. changement de nom de fichier en Upload
    Par JMLD dans le forum XMLRAD
    Réponses: 7
    Dernier message: 16/02/2006, 16h57
  5. changement de nom de fichier avec smartupload
    Par bourvil dans le forum ASP
    Réponses: 2
    Dernier message: 24/05/2004, 14h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo