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 :

Problème, macro, graphe


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2013
    Messages : 3
    Par défaut Problème, macro, graphe
    Bonjours,

    Je viens vers vous pour un problème que je ne comprend pas.

    J'ai fait un programme qui en fonction de paramètres que l'on rentre le programme fait des calculs puis trace des graphiques bilan.

    Mon programme se compose en 2 parties : une qui fait les calculs pour mettre à jour des colonnes de valeurs et l'autre qui trace les graphes.

    Seulement voila quand je trace un graphe alors que je viens de changer des valeur initial le graphe affiche une nouvelle série inconnu et change les abscisse. Il me suffit de supprimer le programme et de le réécrire identiquement (avec un copié collé) et cela remarche jusqu’à ma prochaine modification.


    Merci d'avance pour toute réponse.

    Ps: Comment faire pour mettre mon fichier en ligne, le format excel avec macro n'est pas accepté en pièce jointe ?


    En attendant de pouvoir mettre mon programme en ligne voici le code de la fonction de traçage :

    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
    Sub graphe()
     
    Dim c As Integer
    c = 0
     
     
     If Sheets("Feuil1").CheckBox1.Value = True Then
     ActiveSheet.Shapes.AddChart.Select
        ActiveChart.ChartType = xlLine
        ActiveChart.SeriesCollection.NewSeries
        ActiveChart.SeriesCollection(1).Name = "=Feuil2!$G$1"
        ActiveChart.SeriesCollection(1).Values = "=Feuil2!$G$2:$G$22"
    c = c + 1
     End If
    If Sheets("Feuil1").CheckBox2.Value = True Then
    ActiveSheet.Shapes.AddChart.Select
        ActiveChart.ChartType = xlLine
        ActiveChart.SeriesCollection.NewSeries
        ActiveChart.SeriesCollection(1).Name = "=Feuil2!$H$1"
        ActiveChart.SeriesCollection(1).Values = "=Feuil2!$H$2:$H$22"
    c = c + 1
    End If
    If Sheets("Feuil1").CheckBox3.Value = True Then
    ActiveSheet.Shapes.AddChart.Select
        ActiveChart.ChartType = xlLine
        ActiveChart.SeriesCollection.NewSeries
        ActiveChart.SeriesCollection(1).Name = "=Feuil2!$E$1"
        ActiveChart.SeriesCollection(1).Values = "=Feuil2!$E$2:$E$22"
    c = c + 1
    End If
     
    If c = 1 Then
    ActiveSheet.ChartObjects(1).Left = Range("J23").Left
    ActiveSheet.ChartObjects(1).Top = Range("J23").Top
     
    End If
     
    If c = 2 Then
    ActiveSheet.ChartObjects(1).Left = Range("G22").Left
    ActiveSheet.ChartObjects(1).Top = Range("G22").Top
    ActiveSheet.ChartObjects(2).Left = Range("N22").Left
    ActiveSheet.ChartObjects(2).Top = Range("N22").Top
     
    End If
    If c = 3 Then
    ActiveSheet.ChartObjects(1).Left = Range("F27").Left
    ActiveSheet.ChartObjects(1).Top = Range("F27").Top
    ActiveSheet.ChartObjects(2).Left = Range("L27").Left
    ActiveSheet.ChartObjects(2).Top = Range("L27").Top
    ActiveSheet.ChartObjects(3).Left = Range("I14").Left
    ActiveSheet.ChartObjects(3).Top = Range("I14").Top
     
    End If
    End Sub

  2. #2
    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 code séparé en plusieurs sous routines
    Les graphiques sont tracés dans Feuil2 (feuille des données)
    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
    Option Explicit
     
    Sub Graphe()
    Dim c As Byte
     
    EffaceGraphe "Feuil2"
     
    If Worksheets("Feuil1").CheckBox1.Value = True Then
        TraceGraphe "Feuil2", 7
        c = c + 1
    End If
     
    If Worksheets("Feuil1").CheckBox2.Value = True Then
        TraceGraphe "Feuil2", 8
        c = c + 1
    End If
     
    If Worksheets("Feuil1").CheckBox3.Value = True Then
        TraceGraphe "Feuil2", 5
        c = c + 1
    End If
     
    If c > 0 Then PlaceGraphe "Feuil2", c
    End Sub
     
    'Efface les graphiques existants
    Private Sub EffaceGraphe(ByVal Sht As String)
    Dim ChObj As ChartObject
     
    For Each ChObj In Worksheets(Sht).ChartObjects
        ChObj.Delete
    Next ChObj
    End Sub
     
    'Trace les graphiques
    Private Sub TraceGraphe(ByVal Sht As String, ByVal Col As Integer)
     
    With Worksheets(Sht).ChartObjects.Add(0, 0, 300, 180).Chart
        .ChartType = xlLine
        With .SeriesCollection.NewSeries
            .Name = "='" & Sht & "'!" & Worksheets(Sht).Cells(1, Col).Address
            .Values = "='" & Sht & "'!" & Worksheets(Sht).Cells(2, Col).Resize(21, 1).Address
        End With
    End With
    End Sub
     
    'Place les graphiques
    Private Sub PlaceGraphe(ByVal Sht As String, ByVal Ind As Byte)
    Dim i As Byte, j As Byte, k As Byte
     
    With Worksheets(Sht)
        For k = 1 To Ind
            Select Case Ind
                Case 1
                    .ChartObjects(k).Left = .Cells(1, 10).Left
                    .ChartObjects(k).Top = .Range("A23").Top
                Case 2
                    .ChartObjects(k).Left = .Cells(1, 7 * k).Left
                    .ChartObjects(k).Top = .Range("A22").Top
                Case 3
                    i = IIf(k = 3, 14, 27)
                    j = IIf(k = 3, 9, 6 * k)
                    .ChartObjects(k).Left = .Cells(1, j).Left
                    .ChartObjects(k).Top = .Cells(i, 1).Top
            End Select
        Next k
    End With
    End Sub

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2013
    Messages : 3
    Par défaut
    Merci de la rapidité de cette réponse mais j'ai quelque question car en effet je débute dans ce langage et je m'attaque pas au plus facile (c'est pour un projet d'étude)

    Serait-il possible d'avoir des explication sur la fonction qui trace les graphes ? Notamment comment le graphe reconnais les bonnes valeurs car je ne vois plus les coordonnées de mes tableaux.

    Ensuite sur la fonction qui place les graphes la variable Ind correspond on nombre de graphe et donc a ma variable c dans le programme initial. Par quelle fonction les variables échangent leur valeur ?
    Je pense que de c après la virgule dans :
    If c > 0 Then PlaceGraphe "Feuil2", c
    renvois la valeur pour la fonction appelé mais celle-ci déclare 2 variables Sht et Ind, comment le reconnais la bonne ?
    Private Sub PlaceGraphe(ByVal Sht As String, ByVal Ind As Byte)

  4. #4
    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
    Je te dois des explications

    Pour tracer un graphique, j'ai proposé une procédure paramétrée nommée TraceGraphe avec 2 paramètres:
    Sht: Le nom de la feuille contenant les données et où sera tracé la graphe
    Col: la colonne des données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    'Trace les graphiques
    Private Sub TraceGraphe(ByVal Sht As String, ByVal Col As Integer)
     
    With Worksheets(Sht).ChartObjects.Add(0, 0, 300, 180).Chart
        .ChartType = xlLine
        With .SeriesCollection.NewSeries
            .Name = "='" & Sht & "'!" & Worksheets(Sht).Cells(1, Col).Address
            .Values = "='" & Sht & "'!" & Worksheets(Sht).Cells(2, Col).Resize(21, 1).Address
        End With
    End With
    End Sub
    Avec la ligne 4, j'ajoute un graphique sur la feuille Sht avec une largeur de 300 et une hauteur de 180 points (dans l'angle haut gauche de la feuille

    Les lignes 6 à 9, j'ajoute une série avec comme nom le contenu de la cellule Cells(1, Col) de la feuille Sht et avec comme valeurs la plage allant de Cells(2, Col) avec une hauteur de 21 cellules.

    L'appel de cette procédure se fait à l'aide de (par exemple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TraceGraphe "Feuil2", 7
    Cette appel remplace dans le code précédent la paramètre Sht par la valeur "Feuil2" et le paramètre Col par la valeur 7

    on aura
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    With Worksheets("Feuil2").ChartObjects.Add(0, 0, 300, 180).Chart
        .ChartType = xlLine
        With .SeriesCollection.NewSeries
            .Name = "=Feuil2!" & Worksheets("Feuil2").Cells(1, 7).Address
            'càd
            '.Name = "=Feuil2!$G$1"
            .Values = "=Feuil2!" & Worksheets("Feuil2").Cells(2, 7).Resize(21, 1).Address
            'càd
            '.Values = "=Feuil2!$G$2:$G$22"
        End With
    End With

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2013
    Messages : 3
    Par défaut
    Merci de l'explication cela me permet d'utiliser cette fonction pour d'autre application sans la copier bêtement.

    Re,

    Je voudrait modifier les ordonnée de mon graphique quelle est l'instruction supplémentaire ?

    Merci d'avance

Discussions similaires

  1. Réponses: 0
    Dernier message: 11/08/2009, 17h21
  2. Problème macro modèle à document
    Par perophron dans le forum VBA Word
    Réponses: 9
    Dernier message: 16/05/2007, 11h38
  3. [JpGraph] Problème de graphe
    Par Syl91 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 11/09/2006, 14h51
  4. [VBA-E] Problème macro excel
    Par pontus21 dans le forum Macros et VBA Excel
    Réponses: 32
    Dernier message: 19/05/2006, 19h38
  5. Problème de graph
    Par moumoune dans le forum Bases de données
    Réponses: 8
    Dernier message: 26/05/2004, 15h30

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