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 :

Obtenir nom de la feuille d'une source de données graphique. [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2014
    Messages : 18
    Points : 9
    Points
    9
    Par défaut Obtenir nom de la feuille d'une source de données graphique.
    Bonjour,

    Mon problème est le suivant:

    Je cherche à écrire une macro qui devra rajouter des étiquettes de données sur des graphiques. Pour cela j'ai besoin d'obtenir le nom de la feuille qui contient les données à partir d'une "seriescollection". Je suis certain qu'il y a une solution très simple mais je le trouve pas.

    Merci d'avance pour votre aide.


  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Pour scruter toutes les feuilles d'un classeur, il suffit d'un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For each LaFiche in Worksheets
    Ensuite, tu regardes dans chacune si elle contient un graphique avec la propriété Count de sa méthode ChartObjects.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Expert éminent sénior
    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
    Points : 18 677
    Points
    18 677
    Par défaut

    Bonjour, bonjour !

    Conformément aux règles de ce forum, concernant le VBA ce serait mieux de poster dans le bon forum

    Sinon la réponse est dans l'aide intégrée au VBA : une série est attachée à un graphique lui même rattaché à une feuille,

    donc la propriété Parent du graphique pointe bien sur la feuille et en lui ajoutant la propriété Name

    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2014
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    Menhir, mon graphique n'est pas un objet il se situe sur une page de type Graph.

    Marc, "ActiveChart.Parent.Name" me renvoie le nom du fichier. Je cherche à obtenir le nom de la feuille où se situe les données utilisées dans le graph.

    Sinon j'ai reçu un message qui me dit que ma discussion a été déplacée, mais il semble que ça ne soit pas le cas. Est ce que je peux faire quelque-chose pour la mettre au bon endroit?


    Merci pour votre aide.

  5. #5
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Encore plus facile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For each LeGraph in Charts
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2014
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    Menhir,

    Mon fichier contient plusieurs pages de données et de nombreux graphiques. Il arrive sur certains graphiques que des données soient issues de plusieurs feuilles. J'ai besoin en partant du graphique de connaitre le nom de la feuille ou se situe les données d'une "SeriesCollection".

    Je pense à ce type de commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveChart.SeriesCollection(1).Values.Sheets.Name
    Mais ça me renvoie une erreur

    Merci

  7. #7
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par fanlabise31 Voir le message
    Je pense à ce type de commande: ActiveChart.SeriesCollection(1).Values.Sheets.Name
    Un Sheets derrière un Values, c'est sûr que ça ne va pas le faire.
    Tout comme un Name derrière un Sheets (au pluriel). Un Name, c'est pour un objet, pas une collection.

    Tu as essayé ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SeriesCollection(1).Parent.Name
    Au pire, tu peux essayer de récupérer SeriesCollection(1).Formula dans une variable String et de la disséquer.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2014
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    SeriesCollection(1).Parent.Name ne fonctionne pas (méthode non gérée)

    Je vais essayer ton idée et te tiens au courant.

    Merci

  9. #9
    Expert éminent sénior
    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
    Points : 18 677
    Points
    18 677
    Par défaut



    Normal, il faut respecter la hiérarchie - suivre l'ordre … - des objets !

    Merci de poster ton code …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2014
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    feuille = ActiveChart.SeriesCollection(1).Parent.Name

  11. #11
    Expert éminent sénior
    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
    Points : 18 677
    Points
    18 677
    Par défaut

    LoL ‼


    Citation Envoyé par Marc-L Voir le message
    Sinon la réponse est dans l'aide intégrée au VBA : une série est attachée à un graphique lui même rattaché à une feuille
    Le parent d'une série est donc un graphique ! La feuille est le parent du graphique …


    __________________________________________________________________________________________
    Définition Je me suis fait un bleu : expression couramment utilisée par Zahia !
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2014
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    Le parent d'un graphique est le fichier et non la feuille.

  13. #13
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par fanlabise31 Voir le message
    Le parent d'un graphique est le fichier et non la feuille.
    Mais que représente le parent de la série.
    Essaye de créer une variable de type Variant, d'y mettre ActiveChart.SeriesCollection(1).Parent, de mettre un stop sur ton programme juste après et de regarder ce qu'elle contient.

    A mon avis, on loupe un intermédiaire entre la série et le parent. Un truc qui pointerait uniquement sur les valeurs Y de la série. Je ne le trouve pas dans l'aide.
    Peut-être "Points" mais ça m'étonnerait, ça semble plutôt désigner l'élément graphique.
    Ce n'est pas non plus Values qui ne renvoie que des valeurs sans lien avec la source.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  14. #14
    Expert éminent sénior
    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
    Points : 18 677
    Points
    18 677
    Par défaut



    Suffit pourtant de lire l'aide de Chart, le B-A-BA …


    __________________________________________________________________________________________
    Définition Oui-Oui : fils illégitime de Sissi !
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  15. #15
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Une fonction qui permet de donner le nom de la feuille des données de la série k d'un graphique Ch

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function WorkheetDataName(ByVal Ch As Chart, ByVal k As Integer) As String
    Dim T As String
     
    If k <= Ch.SeriesCollection.Count Then
        T = Mid(Ch.SeriesCollection(k).Formula, 9)
        WorkheetDataName = Replace(Left(T, InStr(T, "!") - 1), "'", "")
    End If
    End Function
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  16. #16
    Membre chevronné
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 036
    Points : 1 917
    Points
    1 917
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par mercatog Voir le message
    Une fonction qui permet de donner le nom de la feuille des données de la série k d'un graphique Ch

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function WorkheetDataName(ByVal Ch As Chart, ByVal k As Integer) As String
    Dim T As String
     
    If k <= Ch.SeriesCollection.Count Then
        T = Mid(Ch.SeriesCollection(k).Formula, 9)
        WorkheetDataName = Replace(Left(T, InStr(T, "!") - 1), "'", "")
    End If
    End Function
    :appo:
    Bonne idée!
    Ousmane


    Quand on tombe dans l'eau, la pluie ne fait plus peur.

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2014
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    Ta fonction me renvoie le "nomdelasérie,nomdelafeuillededonnées". Mais en la modifiant un peu avec les fonctions (que tu mas fait découvrir) mid et replace, j'arrive parfaitement a mes fins.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        T = Mid(ActiveChart.SeriesCollection(1).Formula, 9)
        wd = Replace(Left(T, InStr(T, "!") - 1), "'", "")
        mypos = InStr(1, wd, ",")
        wd2 = Mid(wd, 1, mypos)
       nomfeuille = Replace(wd, wd2, "")

    Merci à tous.

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

Discussions similaires

  1. [XL-2003] Nom de la feuille d'une plage de donnée
    Par hallscar dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/02/2013, 22h44
  2. [XL-2007] Nom fichier et feuille dans une cellule
    Par Scuba69 dans le forum Excel
    Réponses: 2
    Dernier message: 07/05/2010, 14h28
  3. Obtenir le nom d'un noeud d'une source de données
    Par ADePs dans le forum InfoPath
    Réponses: 7
    Dernier message: 30/04/2009, 13h50
  4. Récupérer le nom de la feuille d'une cellule appelante
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/10/2006, 20h12

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