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 :

appeler le contenu d'un range nommé sur un classeur donné


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
    Janvier 2005
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 94
    Billets dans le blog
    1
    Par défaut appeler le contenu d'un range nommé sur un classeur donné
    Bonjour

    J'ai une application vba sur excel qui m'affiche un userform. Pour le remplissage je fais appel à des range nommés. Tout se passe bien mais...
    lorsque je suis amené à ouvrir un autre classeur, le userform ne comprend plus les range nommé puisqu'il se réfèrre au dernier classeur ouvert.

    Comment puis-je mémoriser le classeur source de mon appli pour que mes range nommés se réfèrent systématiquement à ce classeur et non pas au dernier classeur ouvert ?

    ce que j'ai jusque maintenant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    range("macellule").value 'ceci renvoi le contenu de la cellule nommée macellule
    mais la cellule 'macellule' n'existe bien évidemment pas dans le classeur que je peux ouvrir entre temps.

    Une solution ?

  2. #2
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    bonsoir
    essaie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ThisWorkbook.Sheets(3).Range("macellule").Value
    remplace le 3 par ton nom (ou index) de feuille

    @+
    fred65200

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 94
    Billets dans le blog
    1
    Par défaut
    Salut et merci

    Le problème c'est que je perd l'intérêt des cellules nommées si je dois indiquer la feuille dans laquelle elles se trouvent...

    J'aimerais bien mémorisé mon classeur pour appelé la cellule nommé de tel classeur. Un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dim monclasseur as workbook
    set monclasseur = activeworkbook
     
    msgbox monclasseur.range("macellule")
    Mais bien entendu cela ne fonctionne pas puisque l'objet range ne se réfère pas à un classeur mais à une feuille (et pourtant ca fonctionne sans nommé la feuille lorsque le seul classeur concerné est ouvert)
    Alors, est-ce que je nage en pleine science-fiction ou y'a t'il une solution ?

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Ardèche (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 652
    Par défaut
    Bonsoir

    Sans ouvrir le classeur source (+ rapide), macro dite de Walkenbach:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    chemin = ThisWorkbook.Path
    tavariable= ExecuteExcel4Macro("'" & chemin & "\[source.xls]Feuil1'!R1C1")
    valeur de "chemin" à adapter à ton cas; "tavariable" renvoie la valeur inscrite dans la cellule A1 (R1C1)de la feuille1 du classeur "source.xls"

    bonne fin de soirée

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 94
    Billets dans le blog
    1
    Par défaut
    Merci Michel_M mais ce n'est pas ce que j'ai voulu expliquer. fred65200 est tout à fait dans le juste mais la solution ne me convient pas et j'en suis à me demander si il existe une autre solution (voir mon post précédent)

  6. #6
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    re:

    peux tu, avant d'ouvrir ton second classeur faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    maVar = range("maCellule").Value
    et dans le second classeur utiliser maVar?

    @+
    fred65200

  7. #7
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    re

    ou encore ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ThisWorkbook.Names("macellule").RefersToRange.Value
    @+
    fred65200

  8. #8
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 94
    Billets dans le blog
    1
    Par défaut
    Oui je peux faire tout ca, mais je vais préciser quand même certains points.

    Le second classeur est ouvert non pas par mon application, mais parce que l'utilisateur a ouvert pour d'autres raisons un autre classeur qui est donc devenu actif (et qui ne contient à priori pas les cellules nommées dont j'ai besoin)

    Donc, comme le suggère tes pistes on pourrait imaginer mémoriser toutes les références des cellules nommées avant de faire quoique ca soit mais je trouve ca très lourd non ?
    Tu m'as également donné une idée. Si je ne peux mémoriser le classeur pour m'en re-servir ultérieurement pour mes range nommés, et puisque je n'ai besoin de ces cellules nommées que lors de la manipulation de mon formulaire, alors j'ai tenté de forcer l'activation du classeur support de l'application à chaques fois que j'ai besoin d'y trouver les cellules nommées

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public WB as workbook
    'dans l'initialisation du userform :
    set WB = activeworkbook
    'et dans tous les évènements ou sub dont j'ai besoin d'un range("macellule"),
    ' je commence par activer le classeur de l'application en faisant
    WB.Activate
    Cela semble me convenir mais j'ai encore cette maudite impression qu'il y a une meilleur facon de faire. Je ne mettrais donc pas résolu tout de suite, histoire de voir si on trouve une meilleur idée

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

Discussions similaires

  1. Appeler une fois de plus une fonction() sur un temps donné
    Par Tendhor57 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 17/01/2013, 09h58
  2. Copier tout le contenu d'une BD MYSQL sur un autre PC
    Par condor_01 dans le forum Outils
    Réponses: 4
    Dernier message: 06/09/2006, 23h53
  3. Réponses: 3
    Dernier message: 20/06/2006, 07h06
  4. [VBA-E] Modifier le contenu d'un range sans boucle
    Par MatMeuh dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 25/04/2006, 11h19
  5. Réponses: 5
    Dernier message: 07/03/2006, 12h09

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