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 :

Accèder aux "noms définis" d'un workbook caché depuis un autre workbook [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2015
    Messages : 10
    Par défaut Accèder aux "noms définis" d'un workbook caché depuis un autre workbook
    Bonjour,

    Je vais tenter d'expliquer mon problème le plus simplement possible. Si vous ne comprenez pas, n'hésitez pas à poser des questions. Merci

    Je m'excuse par avance, si ce problème a déjà été résolu auparavant. J'ai beau chercher sur le net, je n'ai pas trouvé la solution à mon problème...

    Mon problème :

    J'utilise un userform qui lors de son ouverture cache un workbook (classeur) via ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WorkBookName = ActiveWorkbook.Name
    Windows(WorkBookName).Visible = False
    Un moment donné, j'ai besoin d'accéder à un nom définissant une cellule d'une feuille de calcul de mon workbook :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim LieuxStock() As String
    LieuxStock = Split(Range("LISTE_LIEUX_STOCKAGE"), "/:*:/")
    Le problème, c'est qu'à ce moment là, le workbook en question est caché.

    J'obtiens du coup, l'erreur "La méthode Range de l'objet Global a échoué".

    Une solution possible (mais pas du tout optimisé pour mon cas) serait de rendre visible temporairement le workbook, de le selectionner et de le recacher une fois terminé.

    Une autre solution serait de spécifier dans quel workbook on cherche le nom défini :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim LieuxStock() As String
    LieuxStock = Split(Windows(WorkBookName).Range("LISTE_LIEUX_STOCKAGE"), "/:*:/")
    Mais cela ne marche pas et je ne sais pas si cela est possible !

    Est-ce que vous voyiez là où je veux en venir ?

    Merci !

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2015
    Messages : 10
    Par défaut Up
    N'ayant toujours pas de réponse, je vais poser ma question autrement :


    Comment peut on lire des "noms définis" dans un "workbook A" (classeur) depuis un "workbook B" ?

    Imaginons, je suis actuellement dans le "workbook B" et j'ai besoin de récupérer un "nom défini" dans le le "workbook A" ayant pour nom "LISTE_LIEUX_STOCKAGE".

    Si je fais ce code dans le "workbook A", ça marche !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("LISTE_LIEUX_STOCKAGE")

    Si je le fais dans le "workbook B", ça plante !

    J'obtiens l'erreur d'éxécution '1004' "La méthode 'Range' de l'objet '_Global' a échoué".

    C'est normal car il cherche le nom défini dans le workbook actif (donc le "workbook B") et je n'arrive justement pas à lui préciser que c'est dans le "workbook A" qu'il faut le trouver.

    Need Help !

  3. #3
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut




    Bonjour,

    en indiquant juste le classeur et la feuille avant la plage : Workbooks("A").Range("NomFeuille!LISTE_LIEUX_STOCKAGE")




    _____________________________________________________________________________________________________
    Je suis Charlie - Je suis Bardo

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2015
    Messages : 10
    Par défaut
    Marc-L
    Non ça ne marche pas, si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("nom_de_mon_workbook" & ".xls").Range("LISTE_LIEUX_STOCKAGE")
    J'obtiens l'erreur :

    Erreur d'exécution '438' Propriété ou méthode non gérée par cet objet


    Rdurupt

    Merci par contre (en oubliant mon code dans mon premier post) si mon nom "LISTE_LIEUX_STOCKAGE" défini une plage de cellule où chaque cellule a pour valeur un lieu de stockage, comment je fais ?

  5. #5
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut





    Il manque la feuille de calculs, voir le code de Robert et mon précédent message !

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2015
    Messages : 10
    Par défaut
    Marc-L

    J'ai toujours le même soucis avec la même erreur.

    Je crois que c'est le ".Range(...)" juste après le Workbook("A") qui pose problème.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    en imaginant que "LISTE_LIEUX_STOCKAGE" est une cellule pas une plage de cellules!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub test()
    Dim Wb As Workbook, R As Range
    Set Wb = ActiveWorkbook
    Windows(Wb.Name).Visible = False
    Set R = Wb.Sheets("Data").Range("LISTE_LIEUX_STOCKAGE")
    LieuxStock = Split(R, "/:*:/")
    Windows(Wb.Name).Visible = True
    End Sub

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/11/2007, 15h32
  2. Accéder aux propriétés d'une interface par son nom
    Par slimjoe dans le forum Langage
    Réponses: 1
    Dernier message: 06/07/2007, 14h31
  3. Réponses: 17
    Dernier message: 16/10/2005, 21h01

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