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 :

Creation graphique avec une plage de données


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier Avatar de mat-tech
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 202
    Points : 124
    Points
    124
    Par défaut Creation graphique avec une plage de données
    Bonjour à tous,

    voilà j'aimerai savoir comment creer un graphique en fonction d'une plage recherchee.

    Exemple : j'ai trois colonnes une col date une col consommation une col temperature, sur ma premiere page j'ai 2 InputBox dans les quels je dois rentrer 1 date de debut dans l'un et une date de fin dans l'autre je clic sur un bouton et la un graphique est cree en récuperant les données comprises entre ces dates ligne apres ligne.

    J'aimerai tant prendre mon temps et resoudre le problème moi meme, mais j'ai environ 800 graphiques à imprimer pour demain et j'ai encor un tat de données a trier.

    Je vous remercie d'avance

  2. #2
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    Ci-dessous un exemple à adapter au niveau du graphique, les possibilités étant nombreuses, à toi de voir comment tu souhaites agencer ton graphique.

    Une solution, tu t'en crée un comme tu veux en faisant tourner l'enregistreur de macro et tu pourras récupérer les propriétés

    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
    Sub test()
    Dim i As Integer, DateDeb As Date, DateFin As Date
    Dim Ligdeb As Integer, LigFin As Integer, Graph As Chart
     
    Application.ScreenUpdating = False
     
    DateDeb = Sheets("Feuil1").TextBox1
    DateFin = Sheets("Feuil1").TextBox2
     
    If DateDeb >= DateFin Then
    MsgBox "la date de fin doit être postérieure à la date de début"
    Exit Sub
    End If
     
    For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
        If Cells(i, 1) = DateDeb Then Ligdeb = i
        If Cells(i, 1) = DateFin Then LigFin = i
    Next
     
    Set Graph = Charts.Add
    With Graph
        .ChartType = xlLine
        .SetSourceData Source:=Sheets("Feuil1").Range("A" & Ligdeb & ":C" & LigFin), PlotBy:=xlColumns
        .SeriesCollection(1).Name = "=""Conso"""
        .SeriesCollection(2).Name = "=""Temp"""
        .Location Where:=xlLocationAsNewSheet
    End With
     
    Sheets("Feuil1").Activate
    Application.ScreenUpdating = True
     
    End Sub

  3. #3
    Membre régulier Avatar de mat-tech
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 202
    Points : 124
    Points
    124
    Par défaut
    Le code est parfait mis à part que comment faire pour aller chercher les données dans Feuille2, car la il va les chercher dans Feuille1.

    Merci

  4. #4
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    comment faire pour aller chercher les données dans Feuille2, car la il va les chercher dans Feuille1
    euuh..., en regardant le code, il n'y a rien qui t'inspire...? feuille 1 ... Feuil1 ... tu ne vois pas un petit rapprochement ? Il n'y a pas une petite étincelle qui jaillit ?

    Excuse moi mais...
    J'aimerai tant prendre mon temps et resoudre le problème moi meme
    là j'ai un doute

  5. #5
    Membre régulier Avatar de mat-tech
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 202
    Points : 124
    Points
    124
    Par défaut
    Si bien sur j'ai testé en modifiant Feuil1 par Feuil2 mais il me renvoit une erreur et je crois que le probleme et du au faite que je change de feuille
    Erreur definie par l'application ou par l'object

    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
     
    Private Sub CommandButton1_Click()
     
    Dim i As Integer, DateDeb As Date, DateFin As Date
    Dim Ligdeb As Integer, LigFin As Integer, Graph As Chart
     
    Application.ScreenUpdating = False
     
    DateDeb = Sheets("Feuil1").TextBox1
    DateFin = Sheets("Feuil1").TextBox2
     
    If DateDeb >= DateFin Then
    MsgBox "la date de fin doit être postérieure à la date de début"
    Exit Sub
    End If
     
    'Sheets("Feuil2").Activate
    For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
        If Cells(i, 1) = DateDeb Then Ligdeb = i
        If Cells(i, 1) = DateFin Then LigFin = i
    Next
     
    Set Graph = Charts.Add
    With Graph
        .ChartType = xlLine
        .SetSourceData Source:=Sheets("Feuil2").Range("A" & Ligdeb & ":C" & LigFin), PlotBy:=xlColumns
        .SeriesCollection(1).Name = "=""Conso"""
        .SeriesCollection(2).Name = "=""Temp"""
        .Location Where:=xlLocationAsNewSheet, Name:="Signature 1 courbe"
    End With
     
    Sheets("Feuil1").Activate
    Application.ScreenUpdating = True
     
    End Sub

  6. #6
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Juste une petite question, tout se trouve sur la feuille 2 ? Les données mais également les TextBox ?

  7. #7
    Membre régulier Avatar de mat-tech
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 202
    Points : 124
    Points
    124
    Par défaut
    Non justement c'est sûrement la le problème
    Sur Feuil1 il y a 2 TextBox et ButtonClick1, sur feuille 2 il y a toutes les données.

    Et une autre question est-il possible dans le cas ou la recherche d'une date ne donne rien, prendre alors comme date la date la plus proche ?

    Encor merci de votre patience

  8. #8
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    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
    Private Sub CommandButton1_Click()
     
    Dim i As Integer, DateDeb As Date, DateFin As Date
    Dim Ligdeb As Integer, LigFin As Integer, Graph As Chart
     
    Application.ScreenUpdating = False
     
    DateDeb = Sheets("Feuil1").TextBox1
    DateFin = Sheets("Feuil1").TextBox2
     
    If DateDeb >= DateFin Then
    MsgBox "la date de fin doit être postérieure à la date de début"
    Exit Sub
    End If
     
    With Sheets("Feuil2")
    For i = 1 To .Cells(Rows.Count, 1).End(xlUp).Row
        If .Cells(i, 1) = DateDeb Then Ligdeb = i
        If .Cells(i, 1) = DateFin Then LigFin = i
    Next
    End with
     
    Set Graph = Charts.Add
    With Graph
        .ChartType = xlLine
        .SetSourceData Source:=Sheets("Feuil2").Range("A" & Ligdeb & ":C" & LigFin), PlotBy:=xlColumns
        .SeriesCollection(1).Name = "=""Conso"""
        .SeriesCollection(2).Name = "=""Temp"""
        .Location Where:=xlLocationAsNewSheet, Name:="Signature 1 courbe"
    End With
     
    Sheets("Feuil1").Activate
    Application.ScreenUpdating = True
     
    End Sub
    Et une autre question est-il possible dans le cas ou la recherche d'une date ne donne rien, prendre alors comme date la date la plus proche ?
    ça c'est une autre paire de manche, essaye déjà de le faire fonctionner comme ça

  9. #9
    Membre régulier Avatar de mat-tech
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 202
    Points : 124
    Points
    124
    Par défaut
    Le code fonctionne

    Et pour ma seconde question, j'ai une idée mais je ne sais pas comment la mettre en code :
    Dans la boucle de recherche si on ne trouve pas la date alors on ajoute 1 jour a la date (ex 1/01/2008 devient 2/01/2008), et on recommence la premiere boucle et ainsi de suite.
    Mais pour le code ...

    PS j'ai remarqué que tu es un Redacteur, j'aimerai savoir comment faire un dont a ce site car il m'a deja bien aidé plusieurs fois depuis 2006.

    Merci

  10. #10
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Citation Envoyé par mat-tech Voir le message
    PS j'ai remarqué que tu es un Redacteur, j'aimerai savoir comment faire un dont a ce site car il m'a deja bien aidé plusieurs fois depuis 2006.
    Je peux te donner mon numéro de compte
    Blague à part, c'est très généreux de ta part mais je n'ai aucune idée de la procédure, tu peux éventuellement contacter le Responsable Webmarketing.

    Pour la date j'ai une petite idée, je regarde ça

  11. #11
    Membre régulier Avatar de mat-tech
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 202
    Points : 124
    Points
    124
    Par défaut
    Merci

    Ps Je ne manquerai pas de le contacter tres vite

  12. #12
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Tu peux essayer ceci
    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
    Private Sub CommandButton1_Click()
     
    Dim i As Integer, DateDeb As Date, DateFin As Date
    Dim Ligdeb As Integer, LigFin As Integer, Graph As Chart
     
    Application.ScreenUpdating = False
     
    DateDeb = Sheets("Feuil1").TextBox1
    DateFin = Sheets("Feuil1").TextBox2
     
    If DateDeb >= DateFin Then
    MsgBox "la date de fin doit être postérieure à la date de début"
    Exit Sub
    End If
     
    With Sheets("Feuil2")
        For i = 1 To .Cells(Rows.Count, 1).End(xlUp).Row
            If .Cells(i, 1) = DateDeb Then
                Ligdeb = i
                Exit For
            ElseIf .Cells(i, 1) > DateDeb Then
                Ligdeb = i
                Exit For
            End If
        Next
        For i = 1 To .Cells(Rows.Count, 1).End(xlUp).Row
            If .Cells(i, 1) = DateFin Then
                LigFin = i
                Exit For
            ElseIf .Cells(i, 1) > DateFin Then
                LigFin = i
                Exit For
            End If
        Next
    End With
     
    Set Graph = Charts.Add
    With Graph
        .ChartType = xlLine
        .SetSourceData Source:=Sheets("Feuil2").Range("A" & Ligdeb & ":C" & LigFin), PlotBy:=xlColumns
        .SeriesCollection(1).Name = "=""Conso"""
        .SeriesCollection(2).Name = "=""Temp"""
        .Location Where:=xlLocationAsNewSheet, Name:="Signature 1 courbe"
    End With
     
    Sheets("Feuil1").Activate
    Application.ScreenUpdating = True
     
    End Sub

  13. #13
    Membre régulier Avatar de mat-tech
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 202
    Points : 124
    Points
    124
    Par défaut
    Mille fois merci ca fonctionne impecable

    La toute derniere question, comment puis je faire pour gérer l'erreur du fait que si je click la premiere fois sur le bouton le graph est créé si je reclick sur le bouton une erreur car le graphique existe deja.

    Encor merci pour tout

  14. #14
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Evite de nommer ton graph, supprime , Name:="Signature 1 courbe"
    Les noms seront créés automatiquement, peu importe la quantité de graphiques générés, avec chaque fois un nom différent

    Si tu ne veux créer qu'un seul graph, tu peux gérer l'erreur comme ceci
    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
    On Error GoTo suite
    Set Graph = Charts.Add
    With Graph
        .ChartType = xlLine
        .SetSourceData Source:=Sheets("Feuil2").Range("A" & Ligdeb & ":C" & LigFin), PlotBy:=xlColumns
        .SeriesCollection(1).Name = "=""Conso"""
        .SeriesCollection(2).Name = "=""Temp"""
        .Location Where:=xlLocationAsNewSheet, Name:="Signature 1 courbe"
    End With
     
    suite:
    Sheets("Feuil1").Activate
    Application.ScreenUpdating = True
     
    End Sub

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

Discussions similaires

  1. [XL-2007] Faire un graphique avec une liste de données
    Par Deallyra dans le forum Excel
    Réponses: 14
    Dernier message: 21/01/2010, 20h08
  2. [XL-2003] GRAPHIQUE : garder une plage de données fixe
    Par arcane dans le forum Excel
    Réponses: 3
    Dernier message: 04/06/2009, 16h29
  3. Créer un Graphique avec une plage dynamique
    Par AccessMacro dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 03/10/2008, 16h37
  4. Comparaison cellules avec une plage de données dans un autre fichier
    Par Jibi64 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/08/2008, 16h22
  5. Créer un graph avec une plage de donnée variable
    Par nono le golfeur dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/06/2007, 17h15

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