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 :

des graphes dynamique [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de zangaloni
    Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 474
    Par défaut des graphes dynamique
    Bonjour,
    A partir d'un tableau de données je dessins mes graphes, je veux savoir est ce que si je change les valeurs de ce tableau le graphe s'adaptera automatiquement ?
    J'ai essayé ceci, ça a marché dans le premier coup mais après d'autres manipulations sur le fichier ça ne change pas.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 141
    Par défaut Courbe dans Excel animée périodiquement par VBA
    1. Courbe dans Excel animée périodiquement par VBA

    A chaque seconde, le graphe est animé dynamiquement selon les valeurs en ordonnée changées aléatoirement.
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    Option Explicit ' Graphe dynamique animé toutes les secondes
    Public Const rowDataFirst = 1, rowDataLast = 5, colData = 1 ' A1:A5 Range des valeurs en y
    Public Const yValueMax = 100, nbrMaxAnim = 20
    Public counterAnim As Integer ' Compteur du nombre d'animations
    Dim chartObj As ChartObject, wkSheetGraph As Worksheet
     
    Sub ChartDynamical() ' Entrée principale de la maquette
        Set wkSheetGraph = ActiveSheet
        counterAnim = 0
        ChartData
        ChartCreate wkSheetGraph
        ChartAnimate
    End Sub
     
    Sub ChartCreate(wkSheet As Worksheet) ' Ajout du ChartObject sur la feuille
    Const leftChart = 100, topChart = 0, widthChart = 400, heightChart = 300
    Dim rngValue As Range
     
        With wkSheet
            Set rngValue = .Range(.Cells(rowDataFirst, colData), .Cells(rowDataLast, colData))
            Set chartObj = .ChartObjects.Add(Left:=leftChart, Width:=widthChart, _
                                             Top:=topChart, Height:=heightChart)
        End With
        With chartObj.Chart
            .ChartType = xlXYScatterSmoothNoMarkers
            .SetSourceData Source:=rngValue, PlotBy:=xlColumns
            .Location Where:=xlLocationAsObject, Name:=wkSheet.Name
            .HasTitle = False
            .Axes(xlCategory, xlPrimary).HasTitle = False
            .Axes(xlValue, xlPrimary).HasTitle = False
            .Axes(xlCategory).MaximumScale = rowDataLast
            .Axes(xlCategory).MinimumScale = rowDataFirst
            .Axes(xlValue).MaximumScale = yValueMax
            .Axes(xlValue).MinimumScale = 0
        End With
    End Sub
     
    Sub ChartData() ' Initialise la colonne A avec des valeurs y aléatoires
    Dim indRow As Integer
     
        For indRow = rowDataFirst To rowDataLast
            Cells(indRow, colData) = CInt(Rnd() * yValueMax)
        Next
    End Sub
     
    Sub DataUpdate() ' Change aléatoirement la valeur y en une abscisse x aléatoire
    Dim indRow As Integer
     
        indRow = CInt(Rnd() * (rowDataLast - rowDataFirst)) + rowDataFirst
        wkSheetGraph.Cells(indRow, colData) = CInt(Rnd() * yValueMax)
        counterAnim = counterAnim + 1
        Application.StatusBar = counterAnim
        If counterAnim < nbrMaxAnim Then
            ChartAnimate ' Relance l'animation dans une seconde
        ElseIf Not chartObj Is Nothing Then
            chartObj.Delete
            Set chartObj = Nothing
        End If
    End Sub
     
    Sub ChartAnimate() ' Lance l'animation au bout d'un délai d'une seconde
    Const strTimerSub = "DataUpdate", delay = 1 ' every seconde
    Dim timeChartAnimate As Double
     
        timeChartAnimate = Now + TimeSerial(0, 0, delay)
        Application.OnTime timeChartAnimate, strTimerSub, , True
    End Sub
    On a préféré ajouter un ChartObject parce qu'on peut le positionner plus facilement qu'un Chart.

    2. Lancer l'animation du graphe

    Dans la fenêtre d'Exécution immédiate (Ctrl+G) du VBE d'Excel, copier-coller et valider par ENTER :
    Pendant l'animation, vous pouvez interroger plusieurs fois le compteur du nombre d'animation par :
    2
    Ce compteur du nombre d'animation est affiché dans la barre de status.

    3. Fixer le facteur d'échelle

    Dans ChartCreate(), pour éviter les changements du facteur d'échelle, il faut fixer la valeur maximum et minimum en abscisse x et en ordonnée y.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            .Axes(xlCategory).MaximumScale = rowDataLast
            .Axes(xlCategory).MinimumScale = rowDataFirst
            .Axes(xlValue).MaximumScale = yValueMax
            .Axes(xlValue).MinimumScale = 0
    Au bout de 20 animations du graphe dynamique, DataUpdate() efface le graphe.
    ___________

    Si la discussion est résolue, vous pouvez cliquer sur le bouton

    En bas de ce message s'il vous a apporté des éléments de réponse pertinents, pensez également à voter en cliquant sur le bouton vert ci-dessous.

  3. #3
    Membre très actif Avatar de zangaloni
    Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 474
    Par défaut
    Bonjour,
    Merci beaucoup, c'est très bien, bravo.
    même si ma demande se limitait à savoir comment rendre un graphe dynamique à l'échange d'une plage de données ( qui va changer mensuellement).

    Re,
    Voici un site qui répond parfaitement à mon besoin :
    http://office.microsoft.com/fr-ca/ex...001109801.aspx

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

Discussions similaires

  1. Afficher un graphe dynamique qui contient des noeuds
    Par af.zakaria dans le forum Android
    Réponses: 2
    Dernier message: 16/02/2013, 14h04
  2. Afficher un graphe dynamique qui contient des noeuds
    Par af.zakaria dans le forum Développement Web en Java
    Réponses: 0
    Dernier message: 13/02/2013, 15h57
  3. générer des graphes dynamiques
    Par A.Mehdi dans le forum C#
    Réponses: 1
    Dernier message: 01/02/2012, 08h49
  4. Réponses: 0
    Dernier message: 06/08/2009, 11h57
  5. Réponses: 3
    Dernier message: 15/04/2004, 08h44

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