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 :

Courbe en escalier VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 130
    Par défaut Courbe en escalier VBA
    Bonjour,

    Je suis complètement bloquée.
    J'aimerais faire une courbe en escalier en VBA et je ne sais pas du tout comment faire.

    En colonne A : j'ai les abscisses de mon graphe.
    En colonne B : j'ai les ordonnées.
    En colonne C, les périodes avant rechutes.

    En A1 le graphe monte de B1,
    En A2, le graphe monte de B2
    En A3...

    Sauf que :
    En A1+C1, elle descend de B1
    En A2+C2, elle descend de B2
    En A3+C3, elle descend de B3
    En A4+C4, elle descend de B4....

    Pourriez vous m'aidez s'il vous plaît.
    En pièce jointe, la photo de ce que je souhaite obtenir.
    Veuillez m'excuser par avance de la médiocrité du schéma.

    Merci par avance.
    Images attachées Images attachées  

  2. #2
    Invité
    Invité(e)
    Par défaut
    que te dit l'enregistreur de macro?

  3. #3
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 130
    Par défaut
    Je suis navrée mais je ne sais pas, car je ne sais malheureusement, même pas, comment je pourrais faire une telle chose sans utiliser de macro.

  4. #4
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut courbe en escalier
    Bonjour Hortencia et Kimy,

    Ci-joint le code de Kimy revu à peu près selon tes souhaits, je crois.

    Tu devras utiliser le module 4 (les 2 autres sont des versions intermédiaires).
    Celui-ci appelle le code feuil1 que je te laisse découvrir.
    C'est ce code qui renvoie la table en feuil2 à partir de laquelle le graphique est établi.

    Je pense que des simplifications et des généralisations sont envisageables mais cela est affaire de professionnel, ce que je ne suis pas.

    Cordialement,
    Fichiers attachés Fichiers attachés

  5. #5
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut courbe en escalier
    Bonjour,

    Si tu veux ajouter de marques de délimitation afin de bien distinguer deux lignes dans le même prolongement mettre sous la première instruction ci-dessous celle en rouge.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    .ChartType = xlXYScatterLinesNoMarkers
    .ChartType = xlXYScatterLines
    Cordialement,

  6. #6
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 130
    Par défaut
    Nibledispo et Kimy_Ire MERCI MERCI MERCI.

    C'est vraiment génial.
    C'est presque parfait. MERCI MERCI MERCI.

    Il ne manque plus qu'à le généraliser avec des n et des i.
    Je cherche en fait à balayer les colonnes avec des variables.

    Je voudrais que ce soit automatiser en balayant les variables et non en écrivant les valeurs.
    Je ne sais pas si je suis clair. Sourire.

    Exemple : Pour i de 0 à ...

    Mais là, je ne sais pas si je n'en demande pas trop.
    Rien qu'en essayant de l'expliquer j'ai l'impression que c'est infaisable. Sourire.

    Merci de l'aide que vous m'apporter.
    Si quelqu'un à une solution pour l'automatisation...

    Merci par avance de votre aide.

    Et merci à tous les membres du forum pour leur implication et leur bienveillance.

    Cordialement.

  7. #7
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 130
    Par défaut
    Rappel du problème : Création d'un graphe en escalier de manière la plus automatisée possible.

    Colonne A = Abscisses du graphe
    Colonne B = Ordonnées du graphe
    Colonne C = Abscisses à sommer

    En A1 le graphe monte de B1
    En A2, le graphe monte de B2
    En A3, le graphe monte de B3
    En A4...

    Sauf que :
    En A1+C1, il descend de B1
    En A2+C2, il descend de B2
    En A3+C3, il descend de B3
    En A4+C4, il descend de B4....

    Voilà, c'est simplement pour rappeler le problème.
    Merci par avance.

  8. #8
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut courbe en escalier
    Bonsoir Hortencia et Kimy,

    Voici ma dernière mouture.

    On peut modifier les données et en rajouter à volonté.

    Pour autant ce code n'est pas pleinement satisfaisant. Notamment il faudrait le dimensionner selon ses souhaits mais je ne sais pas faire.

    En espérant qu'un intervenant saura apporter les améliorations nécessaires.

    Je ne suis pas sûr de comprendre ta dernière demande. En effet, seul l'opérateur peut ajouter des données sur la feuille1 sauf si tu as un programme qui calcule ces données et complète la feuille 1.

    Cordialement,
    Fichiers attachés Fichiers attachés

  9. #9
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonsoir

    Ci-joint proposition: données en Feuil1 de A1 à Cxx (xx variable)
    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    Option Explicit
     
    Sub TRACER()
    Dim Ch As ChartObject
    Dim LastLig As Long
    Dim Tbl
     
    With Worksheets("Feuil1")
        LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
        Tbl = DATA(.Range("A1:C" & LastLig))
        Set Ch = .ChartObjects.Add(300, 200, 500, 300)
    End With
     
    With Ch.Chart
        .ChartType = xlXYScatterLines
        With .SeriesCollection.NewSeries
            .XValues = Application.Index(Tbl, , 1)
            .Values = Application.Index(Tbl, , 2)
        End With
    End With
    Set Ch = Nothing
    End Sub
     
    Private Function DATA(ByVal Rng As Range)
    Dim n As Long, i As Long, j As Long, k As Long
    Dim Temp() As Double, Res() As Double
    Dim Tb
     
    Tb = Rng.Value
    n = UBound(Tb, 1)
    ReDim Temp(1 To 2 * n, 1 To 3)
    For i = 1 To n
        j = 2 * i - 1
        Temp(j, 1) = Tb(i, 1)
        Temp(j, 2) = Tb(i, 2)
        Temp(j + 1, 1) = Tb(i, 1) + Tb(i, 3)
        Temp(j + 1, 2) = -1 * Tb(i, 2)
    Next i
    TriRapide Temp, 1, 2 * n
    Cumul Temp
     
    ReDim Res(1 To 4 * n, 1 To 2)
    For i = 1 To 4 * n
        j = (i + 1) \ 2
        k = 1 + i \ 2
        Res(i, 1) = Temp(j, 1)
        If k <= 2 * n Then Res(i, 2) = Temp(k, 3)
    Next i
     
    DATA = Res
    End Function
     
    Private Sub TriRapide(ByRef T, ByVal P As Long, ByVal D As Long)
    Dim Tmp As Double, m As Double
    Dim Lo As Long, Hi As Long
    Dim k As Byte
     
    Lo = P
    Hi = D
    m = T((P + D) / 2, 1)
    Do
        Do While (T(Lo, 1) < m)
            Lo = Lo + 1
        Loop
        Do While (T(Hi, 1) > m)
            Hi = Hi - 1
        Loop
        If (Lo <= Hi) Then
            For k = 1 To 2
                Tmp = T(Lo, k)
                T(Lo, k) = T(Hi, k)
                T(Hi, k) = Tmp
            Next k
            Lo = Lo + 1
            Hi = Hi - 1
        End If
    Loop While (Lo <= Hi)
    If (P < Hi) Then TriRapide T, P, Hi
    If (Lo < D) Then TriRapide T, Lo, D
    End Sub
     
    Private Sub Cumul(T)
    Dim i As Long, m As Long
    Dim S As Double
     
    m = UBound(T, 1)
     
    For i = 2 To m
        S = S + T(i - 1, 2)
        T(i, 3) = S
    Next i
    End Sub

  10. #10
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Salut à toi hortencia,

    Voici le premier jet que je te propose :
    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
    Sub Graphe()
     
    Charts.Add
     
    ActiveChart.Location Where:=xlLocationAsObject, Name:="Feuil2"
     
    With ActiveChart.Parent
        .Left = Range("H1:O13").Left
        .Top = Range("H1:O13").Top
        .Width = Range("H1:O13").Width
        .Height = Range("H1:O13").Height
    End With
     
    With ActiveChart
        .ChartType = xlXYScatterLinesNoMarkers
     
        .SeriesCollection.NewSeries
        .SeriesCollection(1).Name = "Graphe 1"
        .SeriesCollection(1).XValues = Array(1.5, 3.5)
        .SeriesCollection(1).Values = Array(2, 2)
     
        .SeriesCollection.NewSeries
        .SeriesCollection(2).Name = "Graphe 2"
        .SeriesCollection(2).XValues = Array(3.5, 4.75)
        .SeriesCollection(2).Values = Array(6, 6)
     
        .SeriesCollection.NewSeries
        .SeriesCollection(3).Name = "Graphe 3"
        .SeriesCollection(3).XValues = Array(4.75, 5.5)
        .SeriesCollection(3).Values = Array(9, 9)
     
        .SeriesCollection.NewSeries
        .SeriesCollection(4).Name = "Graphe 4"
        .SeriesCollection(4).XValues = Array(5.5, 7)
        .SeriesCollection(4).Values = Array(3, 3)
     
        .SeriesCollection.NewSeries
        .SeriesCollection(5).Name = "Graphe 5"
        .SeriesCollection(5).XValues = Array(7, 7.75)
        .SeriesCollection(5).Values = Array(7, 7)
     
        .SeriesCollection.NewSeries
        .SeriesCollection(6).Name = "Graphe 6"
        .SeriesCollection(6).XValues = Array(7.75, 8)
        .SeriesCollection(6).Values = Array(4, 4)
     
        .SeriesCollection.NewSeries
        .SeriesCollection(7).Name = "Graphe 7"
        .SeriesCollection(7).XValues = Array(8, 9)
        .SeriesCollection(7).Values = Array(0, 0)
     
        .SeriesCollection.NewSeries
        .SeriesCollection(8).Name = "Graphe 8"
        .SeriesCollection(8).XValues = Array(9, 12)
        .SeriesCollection(8).Values = Array(1, 1)
     
        For i = 1 To .SeriesCollection.Count
            .SeriesCollection(i).Border.Color = RGB(255, 0, 0)
        Next i
     
        .HasLegend = False
     
    End With
     
    End Sub
    Dis moi ce que tu en penses.

    Cordialement,
    Kimy

  11. #11
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 130
    Par défaut
    Merci Kimy_Ire, c'est déjà super, je te remercie de ta réponse et de ton implication.

    Il y a malheureusement deux problèmes à cela :

    - les extrémités ne sont pas reliées par des lignes horizontales
    - et le code ne prend pas en compte les cellules des colonnes A,B et C sur Excel, mais directement leurs valeurs. Ce que j'aimerais faire c'est automatiser le graphe ; pouvoir changer les cellules des colonnes A,B et C, cliquer sur un bouton et actualiser le graphe.

    Merci encore Kimy_Ire. Vraiment.

    Saurais-tu comment faire pour "automatiser" ton code en ce sens ?

    Ou quelqu'un le saurait-il ?

    Merci par avance de votre aide.

    Bien Cordialement.

  12. #12
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Pas le temps ce soir.

    Je verrais ça Lundi en espérant que ça puisse attendre de ton côté.

  13. #13
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 130
    Par défaut
    Merci beaucoup de ton aide Kim.

    Malheureusement, j'en ai besoin pour demain.
    Cela m'aiderais beaucoup dans mon avancement.
    Si personne ne peux m'aider d'ici demain, j'utiliserais quand même ton code qui est déjà super et qui me fera gagner du temps.

    Merci encore, très sincèrement.

    Un autre expert pourras peut être m'aider pour l'automatisation.

    Vous êtes vraiment super sur ce site.
    Merci, bonne soirée et bon week-end à toi.

  14. #14
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut courbe en escalier
    bonjour Kimy_Ire,

    je n'ai jamais manipulé les graphiques.

    je souhaiterais savoir si une solution ne serait pas possible avec la détermination préalable des coordonnées x et y. Voir fichier joint.

    Bien sur le résultat final que j'ai mis dans les cellules pour visualiser le résultat serait dans une variable tableau.

    Cordialement,
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. Créer une courbe en "escalier"
    Par d0n32 dans le forum MATLAB
    Réponses: 7
    Dernier message: 15/06/2010, 16h38
  2. Détection piques courbe boursière Excel VBA
    Par andromedor dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 03/03/2010, 08h58
  3. trace une courbe à partir de vba
    Par oscar.cesar dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/11/2007, 19h04
  4. VBA - Excel Faire un graphique histogrammes - courbes
    Par brethomeau dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 16/11/2005, 16h49
  5. [VBA-E] recuperation de l'equation d'une courbe de tendance
    Par miotte83 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/09/2005, 01h25

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