Ajuster plage graphique type ligne en VBA

Bonjour à tous,

Après maintes recherches sur le net, pas moyen de trouver une solution à mon problème.

J'ai un tableau de données comportant plusieurs colonnes et de 1 à 20 lignes. Sur ces lignes, considérons un numéro d'essais (j'effectue des essais sur un certain produit), identifié par "Tally #"

Je souhaite tracer dans un graph l'évolution de mes résultats d'essais (dont les data sont dans les colonnes) en fonction de ce Tally #. J'utilise donc un graphique de type "Ligne". La problème, c'est qu'en sélectionnant l'entièreté de la plage, mon axe des X comportera 20 entrées. Lorsque je n'ai que 2 ou 3 essais répertoriés, l'effet d'échelle écrase mes données et ne rend pas lisible le graphe. J'aurais donc voulu pouvoir modifier l'étendue de la plage par une macro VBA que j'activerais au moyen d'un bouton "Auto-scale" afin de ne réduire la plage qu'au nombre de lignes complétées. Il y aura toujours le même nombre de colonnes.

En passant par l'enregistreur de macro, j'ai pu avoir le code permettant de changer la plage. Il me suffit donc de trouver les coordonnées de la plage qui m'intéresse. Oui mais voila, lorsque je l'injecte dans le range de mon sourcedata, je perds les étiquettes de l'axe des X et ma colonne "Tally #" qui me servait à répertorier mes essais se retrouve tracée sur le graphe.

Si quelqu'un a une astuce SVP, je suis preneur!

Je vous joins un fichier exemple avec mon tableau:

74exemple.xlsm (30.49 Ko)

Et voici mon code qui me pose soucis (excusez le manque de concision, j'apprends VBA par moi-même et ne produit donc pas un code forcément très optimisé...), qui se trouve dans un module:

Sub Autoscale()
' Autoscale Macro
Dim NoLigne1 As Integer
Dim NoLigne2 As Integer
Dim NoCol1 As Integer
Dim NoCol2 As Integer

NoLigne1 = 0
NoLigne2 = 0
NoCol1 = 0
NoCol2 = 0

Sheets("Graphs").Activate
NoLigne1 = Cells(35, 3) 'va rechercher le numéro de ligne de la première cellule de ma plage graphique
NoLigne2 = Cells(36, 3) 'va rechercher le numéro de ligne de la dernière cellule de ma plage graphique
NoCol1 = Cells(35, 4) 'va rechercher le numéro de colonne de la première cellule de ma plage graphique
NoCol2 = Cells(36, 4) 'va rechercher le numéro de colonne de la dernière cellule de ma plage graphique

'Range(Cells(NoLigne1, NoCol1), Cells(NoLigne2, NoCol2)).Address me renverra donc la plage de données que je veux faire apparaître dans mon graphe

ActiveSheet.ChartObjects("Graphique 3").Activate
ActiveChart.PlotArea.Select
ActiveChart.SetSourceData Source:=Range(Cells(NoLigne1, NoCol1), Cells(NoLigne2, NoCol2))

End Sub

Merci d'avance pour votre aide qui me sera très précieuse!

A bientôt,

Mickael

Bonjour à tous,

Un petit up pour me venir en aide SVP

Merci beaucoup!

Mickael

Bonjour,

Je me pose actuellement la même question que vous ! Avez-vous trouvé une solution depuis pour modifier la plage de donnée du graphique ?

Cordialement,

Alexandre

Bonjour,

Je me pose actuellement la même question que vous ! Avez-vous trouvé une solution depuis pour modifier la plage de donnée du graphique ?

Bonjour,

En théorie il n'y a pas besoin de modifier la plage pour que le graphique s'ajuste aux seules données présentes. Sauf dans le cas où les autres cellules de la plage graphique ne sont pas complètement vides (présence d'une formule, etc).

C'est plus simple avec un graphique de type nuage de point, sur lequel on peut paramétrer l’abscisse.

Postez un fichier pour illustrer votre soucis s'il vous faut davantage d'aide.

Bonjour à tous

Il suffit de mettre la source sous forme de tableau structuré, (liste dans 2003) baser le graphique sur les colonnes du tableau et filtrer

Bonjour Pedro22, Bonjour 78 Chris,

Merci pour votre aide ! Mon problème est le suivant : Je suis actuellement entrain de créer une base de donnée qui doit être complétée chaque jour, mon tableau comporte donc déjà les dates des prochains jours jusqu'à la fin de l'année et donc de nombreuses cellules vide. Image 1

Grâce au code :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

Application.EnableEvents = False
Sheets("Tb").PivotTables("TCD1").RefreshTable
Application.EnableEvents = True
ActiveWorkbook.RefreshAll

End Sub

Je peux actualiser automatiquement mes TCD se trouvant dans la feuille "Tb" mes graphiques sont donc basés sur les données affichés dans les TCD. Afin d'avoir des graphiques lisibles je ne peux pas me permettre de sélectionner l'intégralité du TCD mais seulement la partie comportant des données. Image 2

J'aimerai si possible trouver une solution me permettant d'ajouter à "=Tb!$B$5:$B$9" +1 lorsqu'une nouvelle ligne de mon TCD est modifier afin de rajouter une semaine à la fois sur mon graphique, en fonction des données ajoutées à ma base de données.

D'une certaines manière faire "=Tb!$B$5:$B$n+1" lorsqu'une nouvelle valeur arrive , dans mon Image 2 par exemple, lorsqu'une valeur arrive en B10 , j'aimerai que la plage de donnée du graphique viennent ajouter cette valeur.

Merci d'avance pour votre aide, je reste disponible afin d'être plus clair si nécessaire.

Cordialement Alexandre

image 1 image2

RE

TCD : donc ton problème n'a rien à voir avec ce fil...

Construire un Graphique sur une portion de TCD me parait très casse-gueule

Tu travailles vraiment avec une version aussi ancienne ? 97-2003 est un format de fichier pas une version Excel, donc je m'interroge

Si oui filtre le TCD de façon à n'afficher que les lignes ayant une valeur : l'actualisation affichera les semaines concernées tant dans le TCD que le GCD

Bonjour,

Essaie ainsi :

With ActiveSheet.ChartObjects("Graphique 3").Chart
        .SetSourceData Source:=Range(Cells(NoLigne1, NoCol1), Cells(NoLigne2, NoCol2))
        .FullSeriesCollection(1).XValues = Range(Cells(10, 4), Cells(NoLigne2, 4))
    End With

Tu travailles vraiment avec une version aussi ancienne ? 97-2003 est un format de fichier pas une version Excel, donc je m'interroge

Euh oui autant pour moi, je suis avec excel 2010 ! Je viens de modifier mon profil, merci pour votre remarque !

Bonjour,

Essaie ainsi :

With ActiveSheet.ChartObjects("Graphique 3").Chart
        .SetSourceData Source:=Range(Cells(NoLigne1, NoCol1), Cells(NoLigne2, NoCol2))
        .FullSeriesCollection(1).XValues = Range(Cells(10, 4), Cells(NoLigne2, 4))
    End With

Merci je vais essayer, je reviens vers vous d'ici quelques minutes !

Bonjour,

Essaie ainsi :

With ActiveSheet.ChartObjects("Graphique 3").Chart
        .SetSourceData Source:=Range(Cells(NoLigne1, NoCol1), Cells(NoLigne2, NoCol2))
        .FullSeriesCollection(1).XValues = Range(Cells(10, 4), Cells(NoLigne2, 4))
    End With

Je suis débutant en vba.. j'obtiens un message d'erreur lorsque j'applique votre code

La première ligne : "With ActiveSheet.ChartObjects" est sélectionner après le screen Image3

image 3

Re,

J'ai tenté de répondre pour la procédure AutoScale et l'axe des abscisses !...

J'ai évidemment vérifié le fonctionnement.

Cdlt.

RE

C'est sûr qu'un With End with ou toute autre ligne de code non intégré dans une procédure Sub ne peut marcher...

Rechercher des sujets similaires à "ajuster plage graphique type ligne vba"