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 :

Récupérer le nom du fichier dans une variable


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Récupérer le nom du fichier dans une variable
    Bonjour,

    J'aimerais récupérer le nom du fichier ouvert dans une variable.
    Thisworkbook.name fonctionne, mais plus quand je l'introduis dans une variable.
    Peut-etre que je déclare mal mes variable...
    Voici mon code :

    |
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim grilledorigine As Variant
    | Dim nomfichier, nomfichier3 [ne fonctionne ni avec Variant, ni avec String, ni sans rien...]
    | nomfichier = ThisWorkbook.Name
    | nomfichier3 = Left(nomfichier, 3)
    Je me suis rendu compte que ca ne fonctionnait pas grace à la 'immediate window' qui donne le résultat suivant :
    |
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ?nomfichier
    |
    |?thisworkbook.Name
    |Grille.xls
    Un grand merci d'avance à qui pourra m'aider !

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 14
    Points : 18
    Points
    18
    Par défaut
    Bonjour Patrick07,

    Heu... je viens de tester le même code que toi et ça fonctionne chez moi...

    Quel erreur que ça t'affiche, en fait?

  3. #3
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    bjr

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nomfichier3 = Left(nomfichier, 3)
    renvoie les 3 premiers caractères du fichier ... c'est voulu?

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par DJ_972 Voir le message
    Bonjour Patrick07,

    Heu... je viens de tester le même code que toi et ça fonctionne chez moi...

    Quel erreur que ça t'affiche, en fait?
    Ha ben oui tiens !
    L'erreur qui se produisait est que
    - dans la 'Immediate Window' la variable nomfichier semblait vide
    - dans le fichier, la suite du code (conditionné par la valeur de la variable) opérait comme si la variable nomfichier ne correspondait pas à mes attentes (ce qui était le cas si cette variable était effectivement vide).
    J'ai pourtant perdu 3 heures là-dessus.

    Je constate qu'il y a encore quelques soucis si j'ai 2 classeurs ouverts, ou ma fenetre de VBA ouverte, mais je devrais pouvoir m'en sortir.
    Si je continue à avoir des soucis, je me permettrai de revenir ici.

    Merci pour la remise sur les rails.
    Merci pour l'édition de mon message initial.

    Citation Envoyé par Arkham46 Voir le message
    bjr

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nomfichier3 = Left(nomfichier, 3)
    renvoie les 3 premiers caractères du fichier ... c'est voulu?
    Oui, c'est pour un test conditionnel sur les 3 premières lettres du nom du fichier seulement (Prof A-M, Prof N-Z, Etudiants A-M, Etudiants N-Z). Merci.

  5. #5
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    Citation Envoyé par Patrick07 Voir le message
    Oui, c'est pour un test conditionnel sur les 3 premières lettres du nom du fichier seulement (Prof A-M, Prof N-Z, Etudiants A-M, Etudiants N-Z). Merci.
    ok je pensais que peut-être tu voulais retirer les 3 caractères de l'extension

    sinon attention lors de l'exécution dans la 'Immediate Window' , ThisWorkBook correspond au projet sélectionné dans l'explorateur de projet
    dans le code, c'est bien le projet dans lequel s'exécute le code

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Arkham46 Voir le message
    sinon attention lors de l'exécution dans la 'Immediate Window' , ThisWorkBook correspond au projet sélectionné dans l'explorateur de projet
    dans le code, c'est bien le projet dans lequel s'exécute le code
    Le problème vient de là en vérité ! Il ne s'agit donc pas d'un problème d'attribution de valeur à une variable comme je le pensais.

    J'ai donc un fichier grille.xls à partir du quel je crée 3 copies profs.xls, etudiants.xls et locaux.xls.
    Pas de problème lorsque je lance ma macro si un seul fichier est ouvert.
    Mais là je viens d'ouvrir les 4 fichiers en meme temps.
    Le premier ouvert est grille.xls.
    Le dernier ouvert est locaux.xls et c'est sur celui-là que je teste ma macro.
    Ma macro affichant une msgbox "nomfichier", c'est 'grille' qui est affiché.
    Bref, Thisworkbook ne fonctionne pas comme je pensais qu'elle le ferait.
    J'aimerais donc que la suite de ma macro réagisse selon le nom du fichier, et pour cela j'avais une condition sur ce nom en utilisant nomfichier=thisworkbook.name

    Merci à qui pourra m'aider !

    Vous voulez le code complet ?

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 14
    Points : 18
    Points
    18
    Par défaut
    Ok, je comprends maintenant.

    Utilise dans ce cas "ActiveWorkbook.Name".

    Si "Locaux.xls" est le fichier que tu veux tester et le dernier fichier ouvert, normalement, activeworkbook devrait le cibler.
    Si "Locaux.xls" n'est pas le dernier fichier ouvert, fais en sorte de tester chaque fichier avec "ActiveWorkbook.Name" avant d'en ouvrir un autre.

    Thisworkbook.Name relève le nom du fichier où tu exécutes la macro.
    ActiveWorkbook.Name par contre rélève le nom du dernier fichier ouvert.

    J'espère que ça résolvera ton problème...

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Je vais déjà essayer activeworkbook. Merci !

    Mais en attendant, je pose déjà la question suivante
    Thisworkbook.Name relève le nom du fichier où tu exécutes la macro.
    C'est ce qu'il me semblait, et c'est pour cela que je l'ai utilisé, mais la description de mon message précédent ne semble pas aller dans ce sens, d'où les soucis rencontrés je crois.
    ActiceWorkbook.Name par contre rélève le nom du dernier fichier ouvert.
    Cela pourrait convenir si on ne travaillait que sur le dernier fichier ouvert, mais mon équipe devra travailler et sur les profs, et sur les étudiants, et sur les locaux en passant de l'un à l'autre et sans se soucier de quel fichier est le dernier ouvert puisque tous ouverts et disponibles à tout moment.
    D'où ma question : activeworkbook se révèlera-t-il plus efficace que thisworkbook finalement ? ...

    Si pas de solution ou plus d'envie de répondre, pas grave : lorsque les 3 fichiers seront créés je personnaliserai le code en enlevant les conditionnelles, et meme en changeant les noms de variables et de macros pour plus de sécurité. Mais une solution moins bourrine serait toutefois plus agréable...

    Citation Envoyé par DJ_972 Voir le message
    ActiceWorkbook.Name par contre rélève le nom du dernier fichier ouvert.
    Bon et bien ActiveWorkbook relève plus le nom du dernier fichier actif que le nom du dernier fichier ouvert, ce qui répond à ma demande.
    J'ai testé en passant d'un fichier à l'autre et c'est la bonne ligne de conditionnelle qui semble chaque fois bien prise en compte.
    Bref, mon problème semble résolu !
    Merci à tous !

  9. #9
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    D'où ma question : activeworkbook se révèlera-t-il plus efficace que thisworkbook finalement ? ...
    La question n'a pas plus de sens que de demander si une hache est plus efficace qu'une pelle.

    A chacun son usage et sa spécificité.

    Thisworkbook est le classeur dans lequel tourne le code.
    Activeworkbook est le classeur actif, et donc souvent le dernier ouvert, mais pas obligatoirement.

    Pour référencer un classeur particulier que tu ouvres ainsi que celui du code VBa qui se charge de l'ouberture, tu peux procéder comme suit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Dim SrcWb as workbook     'Script workbook
    Dim OpnWb as Workbook  'Classeur à ouvrir
    Dim document as string
     
    Set SrcWb = Thisworkbook ' le classeur ou cette macro est suvée et s'exécute
     
    document = "C:\mon premier fichier excel.xls"
    Workbooks.open Filenname:=Document
     
    Set OpnWb = Activeworbook
    La cellule A1 de la première feuille du classeur de cette macro est accédée via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ScrWb.Sheets(1).Range("A1")
    Pour l'autre classeur via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OpnWb.Sheets(1).Range("A1")
    et au fait pour te former, les cours et tutoriels pour apprendre Excel de Microsoft : https://excel.developpez.com/cours/


  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    C'est ca que je n'avais pas saisi et que je commence à comprendre.
    Citation Envoyé par Godzestla Voir le message
    Activeworkbook est le classeur actif, et donc souvent le dernier ouvert, mais pas obligatoirement.
    ...et donc ca m'arrange bien puisque ca fonctionne meme en me baladant d'un fichier à l'autre
    Citation Envoyé par Godzestla Voir le message
    Thisworkbook est le classeur dans lequel tourne le code.
    ... je ne comprenais pas les concepts de 'classeur dans lequel tourne le code' et de projet, car je voyais 4 occurences de mon 'module12' dans la meme fenetre de VBA, ignorant qu'ils étaient subordonnés au 'classeur dans lequel tourne le code'

    Merci !

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 14
    Points : 18
    Points
    18
    Par défaut
    J'ai édité mon message. Je viens de voir dans ta citation, Patrick07 que j'ai marqué "ActiceWorkbook..." alors que c'est "ActiveWorkbook..."

    Je voulais me corriger pour le "dernier fichier ouvert" mais vous m'avez devancé.

    Effectivement, quand je disais "dernier fichier ouvert" je voulais dire "le fichier actif".
    Et Excel fait en sorte que le dernier fichier ouvert soit le fichier actif. Mais ce fichier actif peut changer si on navigue parmi les fichiers ouverts.

    Désolé, je me suis emmêlé les pinceaux et merci pour la correction.

    Ben si ton problème est résolu, Patrick07, c'est le bon

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

Discussions similaires

  1. Récupérer des noms de fichier dans une table pour les placer en masque du tfilelist
    Par charliplanete dans le forum Développement de jobs
    Réponses: 11
    Dernier message: 24/08/2011, 17h16
  2. [load] Nom de fichier dans une variable
    Par captaine93 dans le forum MATLAB
    Réponses: 6
    Dernier message: 20/09/2009, 12h55
  3. [Système]Récupérer un nom de fichier dans une table
    Par denis76000 dans le forum Access
    Réponses: 7
    Dernier message: 04/04/2007, 11h24
  4. Récupérer des noms de fichiers dans une table ?
    Par florus dans le forum Access
    Réponses: 5
    Dernier message: 25/03/2006, 17h34
  5. Shell: récupérer le bon nom de fichier dans une variable
    Par claralavraie dans le forum Linux
    Réponses: 1
    Dernier message: 10/01/2006, 11h45

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