Graphes dynamiques

martinJ75

XLDnaute Nouveau
Bonjour,

Je cherche a faire un graphe dynamique a partir d un tabelau de donnees. Je sais qu il faut utiliser OFFSET et integrer une serie dans la source de donnees de mon graphe, mais dans mon tableau, les donnees se decalent en verticale et et horizontale. Comment faire pour que le offset suive cette logique?
Dans le fichier joint, les donnees dans le tableau, et le graphe. Le but est d afficher sur une meme courbe les valeurs de B15, C4, C5,.....jusqu a G15 et le jour ou je mets une valeur dans H4, le graphe s actualise.

Auriez vous une idee?
Merci
Martin
 

Pièces jointes

  • Model.xls
    15.5 KB · Affichages: 70
  • Model.xls
    15.5 KB · Affichages: 75
  • Model.xls
    15.5 KB · Affichages: 76

PMO2

XLDnaute Accro
Re : Graphes dynamiques

Bonjour,

Si vous n'êtes pas rébarbatif au VBA voici une solution, un peu compliquée, qui a le
mérite de faire.

MARCHE A SUIVRE (je me suis référé à votre exemple)
1) dans la feuille EL créez un nom en faisant menu Insertion/Nom/Définir
et appelez le MaPlage qui fera référence à la plage A2:H15
2) vérifiez le nom de votre graphique en l'activant puis en faisant clic droit,
menu contextuel Fenêtre graphique dans laquelle s'affichera en tête le nom du graphique
(Graphique 1 dans votre exemple)
Adaptez éventuellement dans le code, la constante
Private Const MON_GRAPH As String = "Graphique 1"
3) copiez le code évènementiel suivant dans la fenêtre de code de la feuille concernée.
(la feuille EL dans votre exemple)
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim R As Range
Dim N As Name
Dim bool As Boolean
For Each N In ActiveWorkbook.Names
  If N.Name = MON_NOM Then
    bool = True
    Exit For
  End If
Next N
If Not bool Then Exit Sub
Set R = Application.Intersect(Target, _
  Range(ActiveWorkbook.Names("MaPlage").RefersTo))
If Not R Is Nothing Then Call UpdateGraph
End Sub
4) copiez le code suivant dans un module standard (modifiez éventuellement les
constantes en fonction du nom de la plage nommée et du nom du graphique)
Code:
'### Constantes à adapter ###
Private Const MON_GRAPH As String = "Graphique 1"
Public Const MON_NOM As String = "MaPlage"
'############################
Sub UpdateGraph(Optional dummy As Byte)
Dim CH As Chart
Dim i&
Dim j&
Dim R As Range
Dim R2 As Range
Dim A$
On Error Resume Next
Set CH = ActiveSheet.ChartObjects(MON_GRAPH).Chart
If CH Is Nothing Then
  MsgBox "Impossible de trouver le graphique " & MON_GRAPH
  Exit Sub
End If
Set R = Range(ActiveWorkbook.Names(MON_NOM))
If R Is Nothing Then
  MsgBox "Impossible de trouver la plage de nom " & MON_NOM
  Exit Sub
End If
On Error GoTo Erreur
Set R = R.Offset(2, 1).Resize(R.Rows.Count - 2, R.Columns.Count - 1)
A$ = "=("
For j& = 1 To R.Columns.Count
  For i& = 1 To R.Rows.Count
    If R.Cells(i&, j&) <> "" Then
      If R2 Is Nothing Then
        Set R2 = R.Cells(i&, j&)
      Else
        Set R2 = Application.Union(R2, R.Cells(i&, j&))
      End If
    End If
  Next i&
  If Not R2 Is Nothing Then
    A$ = A$ & R2.Parent.Name & "!" & R2.Address(, , xlR1C1) & ","
    Set R2 = Nothing
  End If
Next j&
A$ = Mid(A$, 1, Len(A$) - 1) & ")"
CH.SeriesCollection(1).Values = A$
Exit Sub
Erreur:
MsgBox "Erreur : " & Err.Number & vbCrLf & _
  Err.Description
End Sub

Cordialement.

PMO
Patrick Morange
 

Discussions similaires

Statistiques des forums

Discussions
312 488
Messages
2 088 861
Membres
103 979
dernier inscrit
imed