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 :

Confusion de reference range d'un autre fichier


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 66
    Par défaut Confusion de reference range d'un autre fichier
    Bonjour,

    Afin de réaliser des compilations de données, j'ai créé un fichier référence que je duplique à chaque nouveau projet.
    Tout mes titres d'onglets sont référencés sous un nom type "titre1" pour l'onglet 1, "titre2" pour le 2e, etc.
    Ceci permet au responsable de projet de personnaliser soit le contenu des titre, soit le nom de l'obglet, mes macros faisant alors référence à chacun par le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     feuille = range("titreX").worksheet.name
    .
    Cependant j'ai un problème quand je lance une compilation de tous les projets.
    Ma logique voulait que je me réfère à des feuilles précises de chaque projet (fichier) grâce à la référence de leur titre avec un procédure de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    chemin = chemin & "\"
    ChDir chemin
    monfichier = Dir(chemin & "*.xls")
    Workbooks.Open chemin & monfichier
    Workbooks(monfichier).Activate
     
    While monfichier <> ""
        with activeworkbook ' le fichier projet est activé
              workbook("synthese").worksheets(1).cells (3 + k, 2 ) = worksheets(range("titre3").worksheet.name).cells(10,6).value
       end with
    wend
    monfichier = Dir$
    Workbooks(nom_fichier).Activate
    Problème : le fichier "synthèse" dispose lui aussir de référence "titre1", "titre2", etc. Mais les feuilles ne portent pas le même nom que ceux des fichiers de projet. La macro se lance du fichier synthèse et il semble donc que malgré la procédure "with", ce soit le nom de la feuille "titre1" du fichier "synthèse" qui soit retenue.
    Voyez vous une parade ? Merci

  2. #2
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,

    je ne comprends peut-être pas tout mais ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    with activeworkbook ' le fichier projet est activé
              workbook("synthese").worksheets(1).cells (3 + k, 2 ) = worksheets(range("titre3").worksheet.name).cells(10,6).value
       end with
    ça n'active pas ton projet et ne sert à rien dans le code
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    J'ai du mal à comprendre mais si le problème se pose sur pourquoi ne pas essayer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("MonFichier")

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 66
    Par défaut
    Yep... j'ai essayé de simplier le basard, mais du coup, cela perturbe plus que cela n'arrange.

    Autre illustration du probleme.
    J'ai un fichier référence que je dupplique à chaque nouveau projet que j'ai.
    Il y a 3 onglets.
    Le contenu de chaque titre d'onglet et le nom de chaque onglet peuvent varier un peu en fonciton du projet.
    C'est pourquoi je crée la référence titre1, titre2, titre3 au niveau de la cellule de chaque titre pour pouvoir me référencer à l'onglet désiré sans me soucier de la dénomination exacte de la page, ni de l'index de la feuille (car elle peut changer lors de la duplication....).
    J'ai un document de synthèse avec aussi titre1, titre2, titre3 comme référence.
    L'objectif est de centraliser et de faire un grand nombre de calcul en partant des information de chaque projet pour les rapporter sur le document de synthèse.

    Tant que je joue les macros dans un seul fichier, tout va bien.
    Mais si je veux compiler les informations de chaque onglet "titre2" par exemple, y a des soucis car le nom de la page remontée est celui du fichier d'où la macro se joue. Si le nom de l'onglet a été modifié, ca plante (ce qui est contre la philosophie de la programmation effectuée).
    Voila le contexte compliqué....

    Donc la question est en faite plus simple maintenant :
    comment connaitre le nom de la page où figure une référence (ici par exemple "titre3" alors que la macro est lancée d'un autre fichier et qu'elle a aussi une référence qui s'appèle "titre3"...

    Merci.

  5. #5
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

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

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Bonjour,
    je ne comprends pas non plus ton code car il est très spécial.

    Essaie plutôt comme ceci, en espérant que j'ai compris ce que tu souhaites.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    chemin = chemin & "\"
    'ChDir chemin    ** INUTILE **
    monfichier = Dir(chemin & "*.xls")
    Workbooks.Open chemin & monfichier
    'Workbooks(monfichier).Activate *** INUTILE **
     
    While monfichier <> ""
        with workbooks(monfichier)
              workbook("synthese").worksheets(1).cells (3 + k, 2 ) = .worksheets(range("titre3").worksheet.name).cells(10,6).value
       end with
     workbooks(monfichier).close
     monfichier = Dir
    wend
    Il te manquait aussi le close de tes fichiers "monfichier".
    Le Dir de fin doit être dans la boucle et pas en dehors.
    Ton with était inutile car tu ne n'utilisais pas dans ton code. L'impact se fait sur les référence qui commence par .
    Dans mon code, c'est après l'égal. C'est cela qui fait la différence avec le tien, car Ws("Titre3") dans ton code se réfère au fichier actif. dans le mien il, se réfère à mon fichier.

    mais, tu as beau réexpliquer de la même manière, je ne suis quand même pas certain de comprendre.

    NB : on peut aussi lire dans un fichier excel sans l'ouvrir (ADO).

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 66
    Par défaut
    J'aurais jamais du ecrire rapidement les ligne de ma première intervention, est nous distrait du propos.
    Mais merci pour les optimisation, ca me donne de nouvelles idées pour autres choses.

    Je vais encore racourcir la question.
    Votre fichier de travail a une cellule de référence nommer "titre"
    Par une macro, on parcoure d'autres fichiers qui dispose de la référence "titre" également.

    Par quelle ligne de code peut on connaitre la page où se trouve la référence titre sur chacun des fichiers ?

    PS : Godzestla tu dis qu on peut parcourir un fihcier xls sans l'ouvrir ?
    tu peux m'expliquer, stp ?

  7. #7
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

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

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Citation Envoyé par Gautheron Voir le message
    J'aurais jamais du ecrire rapidement les ligne de ma première intervention, est nous distrait du propos.

    PS : Godzestla tu dis qu on peut parcourir un fihcier xls sans l'ouvrir ?
    tu peux m'expliquer, stp ?
    Waw, plus tu expliques, moins je comprends.....

    Pour ce qui est de ta nouvelle question, regarde ici

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 66
    Par défaut
    [QUOTE=Gautheron;4136911]
    Je vais encore racourcir la question.
    Votre fichier de travail a une cellule de référence nommer "titre"
    Par une macro, on parcoure d'autres fichiers qui dispose de la référence "titre" également.

    Par quelle ligne de code peut on connaitre la page où se trouve la référence titre sur chacun des fichiers ?
    QUOTE]

    Dans ce cas, si titre figure dans les différents fichiers et qu on joue la macro contenu dans le fichier de travail, avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    with workbooks("autrefichier.xls") 'autrefichier n'est pas mon fichier de travail
    feuille = range("titre").worksheet.name
    ,
    le code renvoie le nom de la feuille de travail, et non ^pas de autre fichier.
    Comment faire pour etre sur que ce soit celui des l'autre fichier ?
    j'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    feuille = Workbooks("autrefichier.xls".range("titre").worksheet.name
    mais ca ne semble pas marcher... quelsqu'un aurait il une meilleure idée ?

  9. #9
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Votre fichier de travail a une cellule de référence nommer "titre"
    S'agit-il d'une plage nommée ?

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

Discussions similaires

  1. Compter le nombre d'elements d'un range d'un autre fichier
    Par arnogue dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/03/2008, 21h13
  2. Réponses: 2
    Dernier message: 12/12/2006, 13h20
  3. Réponses: 5
    Dernier message: 11/11/2005, 18h26
  4. Importer le contenu un fichier xml dans un autre fichier xml
    Par gedeon555 dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 27/07/2005, 11h49
  5. utilliser un autre fichier xml dans un xsl
    Par New Bee dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 14/04/2003, 10h55

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