XL 2019 Changer les données d'un graphique en fonction de date

Carlich

XLDnaute Junior
Bonjour le forum,

J'aurais besoin d'aide et d'explication a propos d'un problème que je rencontre sur une macro,
En gros grâce a l'outil "Enregistrer une macro" j'ai créer une macro qui consiste à créer un graphique en fonction de 3 colonnes:
Colonne A : période de début
Colonne B : période de fin
Colonne C : Données

La macro créait un graphique en fonction des 4 premières date qui consiste un mois (par exemple Mars, 03) mais j'aimerais que si la date du mois change par exemple en 04, qu'il prenne automatiquement les 4 prochaines dates et qu'il refasse le graphique
Mais je n'ai aucune idée de par ou commencer pour faire ça, dois-je faire un loop? j'ai vu qu'on pouvait faire des "Regex" avec un pattern.

Je met le code en dessous si ca peut aider, je sais que j'en demande beaucoup mais j'aimerais surtout que l'on m'indique comment faire et par ou commencer car j'aimerais le faire moi même et apprendre.

VB:
Sub ConceptionMacro()
'
' ConceptionMacro Macro
    
    'On définit la zone de selection pour faire le graphique
    Range("A2:C5").Select
    
    'de la ligne en dessous jusqu'au #  , ces codes ne servent que a la forme du graphique, son apparence
    ActiveSheet.Shapes.AddChart2(227, xlLineMarkers).Select 'xlLineMarkers est pour l'apparence du graphique, xlLineMarkers signifie "courbe marqué"
    ActiveChart.SetSourceData Source:=Range("EnregistrementValeurs!$A$2:$C$5")
    ActiveChart.ChartTitle.Select
    ActiveChart.ChartTitle.Text = "Graphique DJOIN"
    Selection.Format.TextFrame2.TextRange.Characters.Text = "Graphique DJOIN"
    With Selection.Format.TextFrame2.TextRange.Characters(1, 15).ParagraphFormat
        .TextDirection = msoTextDirectionLeftToRight
        .Alignment = msoAlignCenter
    End With
    With Selection.Format.TextFrame2.TextRange.Characters(1, 15).Font
        .BaselineOffset = 0
        .Bold = msoFalse
        .NameComplexScript = "+mn-cs"
        .NameFarEast = "+mn-ea"
        .Fill.Visible = msoTrue
        .Fill.ForeColor.RGB = RGB(89, 89, 89)
        .Fill.Transparency = 0
        .Fill.Solid
        .Size = 14
        .Italic = msoFalse
        .Kerning = 12
        .Name = "+mn-lt"
        .UnderlineStyle = msoNoUnderline
        .Spacing = 0
        .Strike = msoNoStrike
    End With
    '#########################################################################
    
    'ces 3 lignes de codes servent à déplacer le graphique dans le feuille "SauvegardeDesGraphiques"
    ActiveChart.ChartArea.Select
    ActiveChart.Location Where:=xlLocationAsObject, Name:= _
        "SauvegardeDesGraphiques "
    
    
 
End Sub

Je vous remercie d'avance pour votre aide a tous.
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Bonjour Carlich, le forum

la première des choses à faire est, à la création de ton graphique, est de le renommer pour pouvoir le retrouver , le modifier facilement et sans risque d'erreur, le nom générique étant sujet à variation.
pour cela, tu peux utiliser un objet à la création en utilisant un code de ce type:
VB:
Dim Chart_en_Cours
Set Chart_en_Cours = ActiveSheet.Shapes.AddChart2(227, xlLineMarkers)
MsgBox Chart_en_Cours.Name
Chart_en_Cours.Name = "Graphique_Analyse01"
MsgBox Chart_en_Cours.Name
j'ai mis deux msgbox pour que tu vois bien la différence de nom
ensuite, dans ton code en cours, utilises l'objet que tu viens de créer plutôt que ActiveChart
de mémoire, pour certaines opérations, tu pourras être obligé de le sélectionner mais ce n'est en général pas utile. N'hésites à utiliser With/End With pour tes opérations.
pour modifier ultérieurement ton graphique, tu pourras le retrouver en l'appelant par le nom que tu lui a donné. Si tes données sont toujours formatées de la même façon, une modification du SetSourceData devrait suffire pour le mettre à jour.

Bien cordialement
 
Dernière édition:

Carlich

XLDnaute Junior
Bonjour Yeahou, merci de ta réponse

Si j'ai bien compris tu me conseilles d'enlever les ActiveChart pour mettre un objet a la place comme la "Chart-en_cour" ce qui permettrais de mieux m'y retrouver et de travailler dessus.

Je n'ai pas très bien compris pour le code sur le nom mais je vois ce que tu veux dire je vais vite me perdre avec un nom générique je n'y avais pas pensé.

Je connaissais la solution de simplement changer le SetSourceData mais comme le fichier ne sera pas pour moi mais dans le cadre de mon travail, je dois faire la chose la plus simple possible et la plus automatique c'est pour cela que je veux faire quelque chose comme:

L'opérateur appuie sur un bouton,
Un graphique s'affiche en fonction du 1er mois
Et si un 2ème mois est affiché sur le tableau, si l'op rappuie sur le bouton,
Un 2ème graphique avec l'autre mois s'affiche

Merci d'avance!
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
dans ce cas là, ou est le problème ?
le code crée le graphique et le supprime quand l'utilisateur n'en a plus besoin ou en appelle un autre
en utilisant un objet pour coder sans même renommer ton graphique, tu peux créer autant de graphiques éphémères que tu veux puisqu'il n'y a plus de référence au nom. Une fois que tu t'es affranchi du nom générique pour effectuer tes opérations, tu peux même les créer en en cascade en référençant en tableau pour les retrouver et les gérer facilement.
VB:
Dim Chart_en_Cours(1 to 99)
 
Dernière édition:

Statistiques des forums

Discussions
314 422
Messages
2 109 447
Membres
110 482
dernier inscrit
ilyxxxh