Etendre source graphique avec VBA

Bonjour à tous,

J'espère que vous allez bien et vous remercie par avance pour votre aide!

J'ai un besoin (qui je suis certain, sera très simple à résoudre pour vous) VBA sur l'actualisation d'une source de graphique.

J'aimerais que la macro permette d'étendre la source de mon graphique (ligne verte) jusqu'à la prochaine cellule vide de la colonne F.

J'ai bien essayé avec le VBA suivant :

Sub Macro3()
'
' Macro3 Macro
'

'
ActiveSheet.ChartObjects("Graphique 1").Activate
ActiveChart.FullSeriesCollection(2).Select
Dim DernLigne As Long

DernLigne = Range("F" & Rows.Count).End(xlUp).Row
Range("F12").AutoFill Destination:=Range("F12:F" & DernLigne)
End Sub

Mais, étant débutant, j'ai du faire une erreur ...

Je vous mets le fichier dans le post.

Merci par avance pour votre aide!

Bonjour,

Et bien sans passer par VBA on peut utiliser les outils prévus à cet effet, à savoir Les tableaux structurés.

Ensuite il faudrait utiliser des formules pour que les calculs soient automatiques, et on obtient le résultat voulu.

On se rend ainsi compte que les tableaux de référence en colonnes T:X sont incomplets, il manque notamment 20240703.

En mettant ces tableaux également en tableaux structurés vous pourriez avoir des formules qui se recalculent automatiquement dès lors que vous leur ajoutez des données. C'est quand même bien d'utiliser les outils adaptés au lieu de se casser la tete avec du VBA.

Bonjour Saboh,

Merci pour votre réponse.

Le soucis avec les tableaux structurés c'est que nous utilisons un datawarehouse automatisé pour implanter les datas et donc impossible de les utiliser car le BI écrase les données à chaque fois que nous les actualisons.

C'est pourquoi je cherchais à passer par le VBA...

Cordialement,

Dans ce cas le sub ci-dessous devrait convenir. Mais bizarre que votre export soit aussi mal fichu.

Public Sub MAJMargeCumul()
  Dim graph As ChartObject
  Set graph = ActiveSheet.ChartObjects(1)
  If graph Is Nothing Then Exit Sub

  Dim linkedRng As Range
  With ActiveSheet.Range("F8")
    Set linkedRng = Range(.Cells, .End(xlDown))
  End With

  With graph.Chart.FullSeriesCollection(2)
    .Values = linkedRng
    .XValues = linkedRng.Offset(, -4)
  End With
End Sub

Attention le sub réfère à la feuille active (changer ActiveSheet pour le changer), au 1e graph de la feuille (ActiveSheet.ChartObjects(1)), et à la cellule F8. Si l'une de ces choses vient à changer, il faudra adapter la macro en conséquence.

Oui, je me doutes que ça peut paraitre très bizarre mais c'est pour ça que j'essai de me former en VBA (pendant que certains râlent je contourne le pb)

Merci infiniment !

Est-ce le même code VBA pour étirer la formule de la case F12 à la case vide suivante?

Car cela étire bien la zone du graphique, mais ça ne prends pas la formule avec...

Je ne suis pas sûr de bien comprendre. L'idée que j'ai cru comprendre c'était de rallonger la source du graphique lorsque vous aviez inséré de nouvelles lignes. Mais là vous me parlez d'étirer une formule… ?

Comment ça fonctionne au final ? Dites-moi ce que vous voulez faire (ex. "cliquer sur un bouton") et le résultat attendu.

Faut-il étendre la formule de la dernière cellule sur celle du dessous + redimensionner la source du graph ?

Oui c'est exactement cela.

En fait, notre BI ajoute la marge du mois dans la colonne D tous les matins.

Cela permet le calcul de la formule de la colonne F.

Il faudrait donc qu'en un clic la formule s'étende à la case vide du dessous et qu'ensuite la zone graphique se redimensionne elle aussi à la case vide du dessous.

En tout cas, le VBA pour la zone graphique fonctionne parfaitement ! je voulais juste en profiter pour étendre la formule de la même manière au même moment.

Merci beaucoup pour votre aide jusqu'ici :)

Ok, je crois que l'ajout suivant devrait vous aller alors. La macro copie la derniere cellule de la colonne (pleine) en dessous.

Public Sub MAJMargeCumul()
  Dim graph As ChartObject
  Set graph = ActiveSheet.ChartObjects(1)
  If graph Is Nothing Then Exit Sub

  Dim linkedRng As Range
  With ActiveSheet.Range("F8")
    .End(xlDown).Copy .End(xlDown).Offset(1)
    Set linkedRng = Range(.Cells, .End(xlDown))
  End With

  With graph.Chart.FullSeriesCollection(2)
    .Values = linkedRng
    .XValues = linkedRng.offset(, -4)
  End With
End Sub

bonjour Pj_Journi, salut saboh12617,

amon avis, on n'a pas besoin de VBA, on ajoute un NA() dans la formule et on cache ces valeurs dans le graphique.

Rechercher des sujets similaires à "etendre source graphique vba"