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 :

[VBA-E]Faire apparaitre une courbe point par point...


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 5
    Points : 1
    Points
    1
    Par défaut [VBA-E]Faire apparaitre une courbe point par point...
    Bonjour à tous,

    Dans Excel, à partir d'un tableau de valeurs, j'aimerais faire apparaitre le tracé d'une courbe point après point, à l'aide d'une temporisation ( courbe "animée" )
    J'ai essayé le code suivant en sachant que ça ne macherait pas, mais je le donne pour bien faire comprendre ce que je cherche à obtenir:

    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
    Private Sub CommandButton2_Click()
    tmax = ScrollBarTempo.Value * 10000
     
    Charts.Add
        ActiveChart.ChartType = xlXYScatter
        ActiveChart.SetSourceData Source:=Sheets("Feuil1").Range("E9:F10"), PlotBy _
            :=xlRows
     
        For i = 3 To 20
        ActiveChart.SeriesCollection(1).XValues = "=Feuil1!R2C2:" & i & "C2"
        ActiveChart.SeriesCollection(1).Values = "=Feuil1!R2C3:" & i & "C3"
                Call tempo
                DoEvents
        Next i
     
    End Sub
    Est ce possible de faire apparaitre un tracé point par point, progressivement?

    Merci.

    Edit
    Bienvenue sur le forum.
    Pour les balises, c'est rapé ! Ce n'est pas i, c'est Code. Tu sélectionnes ton texte et tu fais un clic sur Code.

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    As-tu songé à utiliser power point ? C'est fait pour ça. Ça n'est peut -être pas adapté. Donc "à tout hasard"
    Mais quelqu'un aura peut-être déjà fait ça avec Excel...

    Bonne chance

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci à ouskel'n'or.
    Effectivement, PowerPoint pourrait faire ça, en important les calculs d'Excel. Bonne idée, mais ça n'est pas ce que je cherche.
    Je veux un code VBA dans Excell.
    Le code que je propose ne fonctionne pas parce que je n'arrive pas à définir les valeurs à tracer autrement qu'avec un truc du genre:
    ActiveChart.SeriesCollection(1).XValues = "=Feuil1!R2C2:R3C2"
    Peut-être qu'avec Range ou Cells je parviendrais à sélectionner correctement les valeurs et surtout à les indicer dans la boucle.
    Merci d'avance à ceux qui ont une idée.
    A +.

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Tu auras un autre pb avec Excel, l'espace entre les x va varier en fonction de leur nombre, tu devras "à tâtons" redimensionner ton graphe chaque fois que tu auras élargi ta plage de données.

    A+

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        Charts.Add
        ActiveChart.ChartType = xlLineMarkers
        ActiveChart.SetSourceData Source:=Sheets("Feuil1").Range("E1:F2"), PlotBy:= _
            xlRows
        ActiveChart.Location Where:=xlLocationAsObject, Name:="Feuil1"
        ActiveChart.SetSourceData Source:=Sheets("Feuil1").Range("E1:G2"), PlotBy:= _
            xlRows
        ActiveChart.SetSourceData Source:=Sheets("Feuil1").Range("E1:H2"), PlotBy:= _
            xlRows
        ActiveChart.SetSourceData Source:=Sheets("Feuil1").Range("E1:I2"), PlotBy:= _
            xlRows
    Pour illustrer ce que je t'ai dit, adapte ça à ta plage de données et lance le code...

    Tu dis

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonjour Cipango , bonjour Ouskel'n'or

    ci joint une autre possibilité


    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
    Sub afficherPointsGraphiqueProgressivement()
    Dim j As Integer
    Dim Plage As Range
    Dim t As Long
     
    Charts.Add
    ActiveChart.ChartType = xlXYScatter
     
    'les données sont dans la plage B2:B20
    ActiveChart.SeriesCollection.Add Worksheets("Feuil1").Range("B2:B20")
     
    ActiveChart.SeriesCollection(1).MarkerBackgroundColorIndex = _
    ActiveChart.PlotArea.Interior.ColorIndex
     
    ActiveChart.SeriesCollection(1).MarkerForegroundColorIndex = _
    ActiveChart.PlotArea.Interior.ColorIndex
     
    For j = 2 To 20
    t = Timer + 1: Do Until Timer > t: DoEvents: Loop ' 1 seconde
    ActiveChart.SeriesCollection(1).Points(j - 1).MarkerBackgroundColorIndex = 3
    Next j
     
    End Sub

    bonne soiree
    michel

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut


    Ceci dit, je suis furieux de n'y avoir pas pensé

    Merci, Silky, je retiens la méthode.

    A toi de jouer, cipango

    A+

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Je vais essayer tout ça.
    Je vous tiens au courant.
    Merci beaucoup !
    a +.

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Pour Ouskel'n'or :
    Effectivement, il y a un problème de redimensionnement automatique après l’ajout de chaque point, comme tu l’avais prévu. Sinon, c’est pas mal.


    Pour SilkyRoad :

    Très bonne idée de créer tout de suite la courbe en entier avec tous les points en couleur de fond puis de modifier la couleur de chaque point un par un… Très astucieux.


    Pour tout le monde :

    J’ai encore deux, allez, même trois petits détails à résoudre :

    1°) La courbe que je trace est une courbe paramétrique ( un cercle par exemple ) et la plage de données est par exemple B2 :B40 pour les abscisses et C2 :C40 pour les ordonnées. J’ai essayé avec :
    ActiveChart.SeriesCollection.Add Worksheets("Feuil1").Range("B2:C40")
    Mais ça ne marche pas.

    2°) J’ai déjà vu pas mal de Timer en VBA mais je n’arrive pas à obtenir un intervalle de temps inférieur à la seconde. J’ai essayé avec :
    t = Timer + 0.1: Do Until Timer > t: DoEvents: Loop ' 0.1 seconde
    ou avec :
    t = Timer + 1: Do Until Timer > t/5: DoEvents: Loop ' 0.2 seconde
    Mais rien à faire. Je reprends donc toujours ma bonne vieille tempo ( for t = 0 to 1000000 : next t ) qui ne fonctionne évidemment pas avec la même vitesse sur toutes les machines.

    3°) Dernier petit truc moins important : J’aimerais que les points soient reliés entre eux ( ActiveChart.ChartType = xlXYScatterLines ??? ) mais pas au départ, sinon le tracé de la courbe sans les points apparaît dés le début donc aucun intérêt…

    En tout cas, MERCI à tous pour vos bonnes idées.
    A +.

    Cipango.

  10. #10
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonjour Cipango , bonjour cher Ouskel'n'or


    ci joint une autre exemple à adapter , pour répondre à tes différentes questions . par contre je n'ai pas de solution pour l'effet de scintillement...


    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
    Option Explicit
    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
     
    Sub afficherPointsGraphiqueProgressivement_V02()
    Dim j As Integer
    Dim Plage As Range
     
    Charts.Add
    ActiveChart.ChartType = xlXYScatter
     
    ActiveChart.SeriesCollection.Add Worksheets("Feuil1").Range("C2:C20") 'ordonnées
    ActiveChart.SeriesCollection(1).XValues = Worksheets("Feuil1").Range("B2:B20") 'abscisses
     
     
    ActiveChart.SeriesCollection(1).MarkerBackgroundColorIndex = _
    ActiveChart.PlotArea.Interior.ColorIndex
     
    ActiveChart.SeriesCollection(1).MarkerForegroundColorIndex = _
    ActiveChart.PlotArea.Interior.ColorIndex
     
    For j = 2 To 20
        Sleep 200 ' 0,2 secondes
            With ActiveChart.SeriesCollection(1).Points(j - 1)
            .MarkerBackgroundColorIndex = 3
            .Border.LineStyle = xlAutomatic
            End With
        DoEvents
    Next j
     
    End Sub


    bonne journée

  11. #11
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    Faites comme moi, partez en vacances - au retour, c'est mieux

    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
    Option Explicit
    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
     
    Sub afficherPointsGraphiqueProgressivement_V02()
        Dim j As Integer, Plage As Range, ch As ChartObject
        Set ch = Worksheets("Feuil1").ChartObjects.Add(250, 250, 350, 250)
     
        With ch.Chart
            .ChartType = xlXYScatter
     
            .SeriesCollection.Add Worksheets("Feuil1").Range("C2:C2") 'ordonnées
            .SeriesCollection(1).XValues = Worksheets("Feuil1").Range("B2:B25") 'abscisses
     
     
            .Axes(xlCategory).MinimumScale = 0
            .Axes(xlCategory).MaximumScale = Application.WorksheetFunction.Max(Worksheets("Feuil1").Range("B2:B25"))
     
            .Axes(xlValue).MinimumScale = 0
            .Axes(xlValue).MaximumScale = Application.WorksheetFunction.Max(Worksheets("Feuil1").Range("C2:C25"))
        End With
     
        For j = 2 To 25
            Sleep 100 ' 0,1 secondes
                ch.Chart.SeriesCollection(1).Values = Worksheets("Feuil1").Range("C2:C" & j)
                ch.Visible = True
        Next j
     
    End Sub

  12. #12
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bon, et bien je vais à nouveau essayer tout ça quand j'aurai un peu de temps. A première vue ça me semble très intéressant...
    Je vous tiens au courant.
    Encore merci ( je radote ! ) et a +.
    Cipango.

Discussions similaires

  1. Dessiner une courbe point par point
    Par lestat_2706 dans le forum 2D
    Réponses: 7
    Dernier message: 05/02/2018, 09h57
  2. [XL-2003] faire apparaitre une image sur un userform par rapport a une textbox
    Par revemane dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/06/2009, 10h21
  3. Réponses: 5
    Dernier message: 22/09/2008, 12h14
  4. [C#] Faire apparaitre une "button box" ?
    Par mavina dans le forum ASP.NET
    Réponses: 17
    Dernier message: 25/07/2005, 16h55
  5. [Plugin / Graphique] Faire apparaitre une fenêtre?
    Par relivio dans le forum Eclipse Platform
    Réponses: 7
    Dernier message: 31/03/2004, 19h10

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