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 :

[VBA-E]Noms de zones dupliqués


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Par défaut [VBA-E]Noms de zones dupliqués
    Bonjour, je souhaite récupérer une zone ("MaZone") dans Excel à partir de son nom.
    Le problème est quand la zone est définie dans la Feuil3 (par exemple) et que dans la Feuil1 il y a une seconde zone nommée "Feuil1!MaZone".

    ActiveSheet est la Feuil3.
    J'essaie les méthode suivantes pour récupérer MaZone située dans la Feuil3 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        MsgBox ThisWorkbook.Names("Feuil3!MaZone").Name
        MsgBox ThisWorkbook.Names("MaZone").Name
     
        MsgBox ThisWorkbook.ActiveSheet.Names("Feuil3!MaZone").Name
        MsgBox ThisWorkbook.ActiveSheet.Names("MaZone").Name
    Le premier cas me fait une erreur 1004.
    Le second cas me donne Feuil1!MaZone.
    Le troisième cas me fait une erreur 1004.
    Le quatrième cas me fait une erreur 1004.

    J'ai cherché dans tous les sens, je ne vois pas de solution.
    Pour information si on avait défini la zone "MaZone" dans Feuil1 et "Feuil3!MaZone" dans Feuil3, il n'y a pas de problème, il suffit de faire directement pour récupérer la zone (avec ActiveSheet la bonne feuille ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox ThisWorkbook.ActiveSheet.Names("MaZone").Name
    Je pense que c'est un problème dans VBA. Je suis avec Excel 2003 SP2.
    Quelqu'un a-t-il déjà eu ce problème et comment peut-on le résoudre ?
    Merci.

  2. #2
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Juste une question préliminaire:

    Comment arrives-tu à avoir 2 fois le même nom dans le même classeur?
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Application.Goto Reference:="LaZone"
    J'ajoute que le nom LaZone est valable pour tout le classeur. Tu n'as pas à définir la feuille

    A+

  4. #4
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Citation Envoyé par ouskel'n'or
    J'ajoute que le nom LaZone est valable pour tout le classeur.
    D'où ma question:
    Citation Envoyé par AlainTech
    Comment arrives-tu à avoir 2 fois le même nom dans le même classeur?
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Citation Envoyé par Alain
    Citation:
    ouskel'n'or a écrit :
    J'ajoute que le nom LaZone est valable pour tout le classeur.

    D'où ma question:

    Citation:
    AlainTech a écrit :
    Comment arrives-tu à avoir 2 fois le même nom dans le même classeur?
    d'où ma réponse
    Citation Envoyé par ouskel'n'or
    ouskel'n'or a écrit :
    J'ajoute que le nom LaZone est valable pour tout le classeur.


    A+

  6. #6
    Membre éclairé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Par défaut
    Dans Feuil3 tu créés ta zone MaZone, puis dans Feuil1, tu créés une zone qui s'appelle Feuil1!MaZone, on appelle se genre de zone parfois des zones locales ou des zones restreintes à une feuille.

    Il n'est pas facile de les créer à la main, mais en code c'est fort simple de créer plusieurs zones ayant le même nom.

    ouskel'n'or, merci pour ton aide, mais justement, j'ai besoin de retrouver la zone dans la feuille en cours et non pas la zone globale, je vais essayer ta solution pour voir ce que ça donne.

  7. #7
    Membre éclairé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Par défaut
    En fait, je vais reposer ma question car peut-être existe-t-il une autre solution plus simple.
    Je voudrais récupérer la valeur de la zone MaZone située dans la feuille si elle existe dans l'ActiveSheet, sinon la valeur de la zone globale s'il n'existe pas de zone MaZone dans l'ActiveSheet.

    Le problème est que quand il y a plusieurs zone avec le même nom, si on cherche directement dans le ThisWorkbook, on ne récupère pas la zone de l'ActiveSheet mais du classeur.

  8. #8
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    j'ai pas testé mais de mémoire c'est ok..:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MsgBox ThisWorkbook.Sheets("Feuil3").range("MaZone").Name

  9. #9
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Petite info supplémentaire:

    Ne jamais mettre de code, traitant plusieurs feuilles, dans une feuille.

    Toujours le mettre dans un module.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  10. #10
    Membre éclairé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Par défaut
    Citation Envoyé par bbil
    j'ai pas testé mais de mémoire c'est ok..:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MsgBox ThisWorkbook.Sheets("Feuil3").range("MaZone").Name
    Non ce n'est pas bon, car je ne sais pas à priori où se situe la zone.


    Citation Envoyé par AlainTech
    Toujours le mettre dans un module.
    Merci pour l'info, mais en réalité, je travaille en Delphi avec les objets automation pour travailler avec Excel, donc ça fonctionne comme en VBA, d'ailleurs, je fais tous les tests en VBA dans un module avant de l'intégrer dans Delphi.

  11. #11
    Membre éclairé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Par défaut
    C'est bon j'ai trouvé.
    Mon erreur était de vouloir remonter sur la zone pour redescendre sur la valeur, j'étais parti au départ sur quelquechose du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.Names.Item( 'ZoneBis', EmptyParam, EmptyParam ).RefersToRange.Value
    Avec des manipulations avec l'ActiveSheet mais il y a beaucoup plus simple, c'est de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox Range("MaZone").Value
    Récupérer directement depuis l'application la range correspondante sans chercher à passer par les Names et les RefersToRange.

    Merci, c'est enfin [Résolu].

  12. #12
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Dans Feuil3 tu créés ta zone MaZone, puis dans Feuil1, tu créés une zone qui s'appelle Feuil1!MaZone, on appelle se genre de zone parfois des zones locales ou des zones restreintes à une feuille.
    J'ignorais cette possibilité d'où ma question à ceux qui savent : Est-ce également le cas dans VB97 ?
    Merci

    Maintenant, pour répondre à ta question : Si tu as plusieurs fois le même nom, que tu ignore la feuille dans laquelle il se trouve, comment souhaites-tu pouvoir déterminer si c'es el bon ?

    Sinon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub NomsRechercher()
    Set LeNom = ActiveWorkbook.Names
    For i = 1 To ActiveWorkbook.Worksheets.Count
        Set LaFeuille = Worksheets(i)
        For j = 1 To LeNom.Count
                MsgBox "Nom de la feuille " & LaFeuille.Name & " Nom de la zone " & LeNom(j).Name
        Next j
    Next
    End Sub
    Permet d'afficher tous les noms insérés dans les feuilles de calculs... et chez moi (VBA97) répète les mêmes noms pour chaque feuille.

    A toutes fins utiles

    A+

  13. #13
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    et cela :

    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
     
    Sub test()
     Dim n As Name
     Const MAZONE = "Mazone"
     On Error Resume Next
      Set n = ActiveSheet.Name(MAZONE)
     If n Is Nothing Then
      Set n = ThisWorkbook.Names(MAZONE)
     End If
     On Error GoTo 0
     If n Is Nothing Then
       MsgBox "Zone introuvable"
     Else
      MsgBox n.RefersTo
     End If
     
    End Sub

  14. #14
    Membre éclairé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Par défaut
    @ ouskel'n'or :
    j'utilise l'unité Excel97 dans mon projet, donc ça génère du code valable pour Excel97 donc oui ça existe dans Excel 97.

    @ bbil : ton code ne fonctione pas, quelque soit l'ActiveSheet (Feuil1 ou Feuil3) il retourne Feuil1!$A$1.
    Tu peux essayer, je suis resté longtemps bloqué sur ce bug de VBA en essayant de trouver une solution utilisant les collection Names.

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

Discussions similaires

  1. [C#] Pilotage Excell - Attribuer un nom à une zone...
    Par diaboloche dans le forum Windows Forms
    Réponses: 2
    Dernier message: 05/01/2006, 20h42
  2. [VBA][Excel] Nom de colonne a partir du numéro
    Par ddams dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/01/2006, 09h43
  3. [VBA][Excel] importer une zone délimitée de texte
    Par Amanck dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/12/2005, 14h59
  4. Vba excel agrandir la zone d'impression a droite
    Par mb95 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/12/2005, 07h42
  5. Réponses: 10
    Dernier message: 13/06/2005, 16h02

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