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 :

Mettre un titre à des graphiques auto


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingé matériaux
    Inscrit en
    Mai 2019
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingé matériaux

    Informations forums :
    Inscription : Mai 2019
    Messages : 47
    Points : 24
    Points
    24
    Par défaut Mettre un titre à des graphiques auto
    Bonjour à tous,

    Je reviens avec encore une nouvelle question...

    J'ai une feuille avec 3 graphiques, j'aimerai mettre un titre à ces graphiques en appuyant sur un bouton.
    Le nom du graphique corespondant à une case de la feuille précédentes, qui elle peut bouger en fonction de si des lignes sont ajoutées ou retirées dans la feuille précédente.

    J'ai donc implémenté via excel cette offset, grace à la colonne D et E, en D je compte le nombre de lignes de donnée et en E le nombre en plus vis à vis de ce qu'il y avait quand le code a été écris, et j'augmente en fonction de ce qui a été ajouté avant.

    Bref, ce n'est pas gênant si ce n'est pas clair, car mon problème n'est pas à ce niveau,mais au niveau de la façon dont on doit choisir les données, je ne trouve pas la bonne syntaxe... j'ai ce code:

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    Sub Titre_a_jour2()
     
    With ActiveSheet
    Dim A, B, C
     
    A = Range("E2").Value
     
    B = 13 + A
    C = Range("E" & B).Value
     
    End With
     
    ActiveSheet.Previous.Select
    Dim Plage As Range
     
     
    With ActiveSheet
     
     
    Set Plage1 = .Range("B1").Select
    Range("B12").Select
    Range(ActiveCell, ActiveCell.Offset(A, 0)).Select
    Set Plage2 = .Range.ActiveCell.Select
    Range("B23").Select
    Range(ActiveCell, ActiveCell.Offset(C, 0)).Select
    Set Plage3 = ActiveCell.Offset(0, 0)
     
    End With
     
    ActiveSheet.Next.Select
     
    ActiveSheet.ChartObjects("Graphique 1").Activate
        ActiveChart.SetElement (msoElementChartTitleAboveChart)
        ActiveChart.ChartTitle.Text = Plage1
     
    ActiveSheet.ChartObjects("Graphique 2").Activate
        ActiveChart.SetElement (msoElementChartTitleAboveChart)
        ActiveChart.ChartTitle.Text = Plage2
     
    ActiveSheet.ChartObjects("Graphique 3").Activate
        ActiveChart.SetElement (msoElementChartTitleAboveChart)
        ActiveChart.ChartTitle.Text = Plage3
     
     
    End Sub
    Et ce qui plante c'est au moment où je donne des valeurs au Plage1, 2 et 3. Comme on peut le voir j'ai tenté des choses ...
    On se place en B1 et on donne cette valeur à Plage1
    On se place en B12 avec un offset de A et on donne la valeur de la case à Plage2
    On se place en B23 avec un offset de C et on donne la valeur de la case à Plage3

    Breffff, encore une fois merci énormément par avance pour l'aide que vous pourriez m'apporter, ça me fera gagner tellement de temps...

    Bonne journée,
    Bastien

    Edit titre car pas cohérent avec le corps du message

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Pas sûr d'avoir bien compris mais essayez ceci, remplacez:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Plage1 = .Range("B1").Select
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Plage1 = .Range("B1").value
    idem pour les autres plages

    Cdlt

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingé matériaux
    Inscrit en
    Mai 2019
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingé matériaux

    Informations forums :
    Inscription : Mai 2019
    Messages : 47
    Points : 24
    Points
    24
    Par défaut
    Bonjour,

    L'idée serait de sélectionner des cellule avec offset qui est connu et calculé en direct dans une case d'excel.
    Ici c'est A et B qui sont calculé en case E2 et en case E(B) avec B=13+A.

    Ensuite, je me sers de cette offset pour trouver des valeurs dans des cases précises.

    J'ai changé le code avec vos conseils et j'ai ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Plage1 = Range("B1").Value
    Range("B12").Select
    Plage2 = ActiveCell.Offset(A, 0).Value
    Range("B23").Select
    Plage3 = ActiveCell.Offset(C, 0).Value
    Seulement, les valeurs de A et C ne sont pas considéré, si je remplace A par 10 par exemple, cela marche parfaitement, mais si je met A c'est comme si c'était 0.

    Est-ce plus clair ?

    Bastien

  4. #4
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Salut.

    Sais-tu que, sans VBA, tu peux faire pointer une zone de texte (et donc la zone de titre d'un graphique) vers une cellule qui contiendrait le texte du titre, éventuellement en résultat de formule?

    Nom : 2019-08-14_113545.png
Affichages : 408
Taille : 14,7 Ko

    Important:
    1. Même si la cellule contenant le titre est sur la même feuille que le graphique, il faut préfixer la cellule du nom de la feuille;
    2. De mes tests sur le sujet, il résulte que l'on ne peut pas utiliser une autre formule que le seul pointage vers une feuille. Par contre, la cellule vers laquelle pointe la zone de texte peut, elle, contenir une formule. Les possibilités sont donc larges.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre à l'essai
    Homme Profil pro
    Ingé matériaux
    Inscrit en
    Mai 2019
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingé matériaux

    Informations forums :
    Inscription : Mai 2019
    Messages : 47
    Points : 24
    Points
    24
    Par défaut
    Bonjour,

    Je ne savais pas, en effet, et je met cette remarque dans mes favoris

    Cela dit je ne suis pas sur que cela va résoudre mon problème. Etant donné que j'ai potentiellement, une centaine de feuille avec 3 graphes à faire de cette façon.
    Il faudrait définitivement que je passe par une maccro, et je ne suis pas sur que cela soit rentable d'extraire ce qu'il y a d'écrit dans les cases, de les mettre dans des zones de texte et redirigé vers les titres.

    Je dis "rentable" étant donné que c'est le seul point bloquant à l'heure actuelle.

    De plus, c'est devenu une curiosité pour moi d'arriver à faire ce que je veux ^^'

    Merci beaucoup,
    Bastien

  6. #6
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Le faire par Excel permet de laisser à Excel le soin de pointer toujours vers la bonne cellule, qu'il y ait ou pas ajout. C'est donc la solution la plus rentable. Sur beaucoup de graphiques, on pourrait prévoir de boucler sur ceux-ci en VBA et d'effectuer en VBA ce que l'on aurait réalisé à la main.

    A part cela, en VBA et sur base d'une valeur de décalage utilisée dans une cellule, je ne vois que le pilotage de l'événement Change sur la feuille qui contient la cellule renseignant l'offset pour "automatiser" le titre du graphique en fonction du décalage mentionné.

    Mais je pense qu'il faudrait que tu expliques plus en détails ce que tu souhaites réellement réaliser, car perso, je ne suis pas certain d'avoir compris. Quoi qu'il en soit, les SELECT n'ont a priori aucune utilité.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Membre à l'essai
    Homme Profil pro
    Ingé matériaux
    Inscrit en
    Mai 2019
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingé matériaux

    Informations forums :
    Inscription : Mai 2019
    Messages : 47
    Points : 24
    Points
    24
    Par défaut
    En fait, c'est pour des suivies d'essais, avec 3 configurations d'essais par matériaux.

    En colonne A il a les références des éprouvettes

    En B1 il y a le titre du graphique pour le 1er graphe
    En B12 il y a le titre du graphique pour le 2e graphe
    En B23 il y a le titre du graphique pour le 3e graphe

    En C des contraintes

    En D2 j'ai indiqué le nombres d'essais pour config 1, par défaut 10, en faisant Lignes(C2:C11)
    En D13 j'ai indiqué le nombres d'essais pour config 2, etc

    Et en E je calcul l'offset, si quelqu'un ajoute un essai ou en enlève un
    DOnc par défaut, en E2 c'est 10-D2
    En E13, D12-10+E2, etc

    Comme ça les fiches sont créées comme ça et excel permet à ceci de vivre de façon autonome.

    Et moi derrière avec mes constantes A, B, C je récupère ces offset. et je peux toujours redirigé vers les bonnes cellules.

    Donc du coup, je sais que mes titres seront en colonne B, ligne 1 pour le graphe 1, ligne 12+A pour le graphe 2 et ligne 23+C pour le graphe 3.

    Alors ce n'est pas propre, surement que l'on peut faire mieux, mais mon idée c'était de déranger le moins de monde possible alors j'ai fait au plus simple pour être autonome.

    Et maintenant que tout est setup, que j'ai passé un certain dessus, je bloque juste sur la syntaxe au moment où j'attribue les valeurs à Plage2 et Plage3.

    Comme ça derrière j'attribue la macro à un bouton et pour rafraichir les titres on appuie sur le bouton.

    Est-ce que c'est plus claire ?

    Bastien

  8. #8
    Membre à l'essai
    Homme Profil pro
    Ingé matériaux
    Inscrit en
    Mai 2019
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingé matériaux

    Informations forums :
    Inscription : Mai 2019
    Messages : 47
    Points : 24
    Points
    24
    Par défaut
    Bonjour à tous,

    Edit du message:

    J'ai trouvé mon erreur, cela venait d'un ActiveSheet.Previous.Select mal positionné... TOut ça pour ça ...
    Bref, la syntaxe correct est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("B12").Select
    Plage2 = ActiveCell.Offset(A, 0).Value
    Et ainsi de suite, ça marche du tonerre, et les titres de mes graphiques se mettent bien à jour.

    Je n'ai pas réussi à attribuer une zone de texte comme titre à un tableau cela dit, si quelqu'un sait m'expliquer la démarche ?

    BOnne journée,
    Bastien

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

Discussions similaires

  1. Réponses: 23
    Dernier message: 29/11/2015, 18h40
  2. Réponses: 6
    Dernier message: 30/09/2014, 17h30
  3. [Débutant] utilisation un for pour mettre les couleurs des contrôles
    Par xingjing910 dans le forum VB.NET
    Réponses: 2
    Dernier message: 10/05/2012, 13h25
  4. [Batch] Boucle For pour parser des fichiers + exclusion
    Par L'assembleur dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 04/07/2011, 15h41
  5. Réponses: 2
    Dernier message: 29/08/2006, 13h59

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