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 :

Graphique avec plage de donnees variable


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Apprenti ingénieur en mécanique aéronautique
    Inscrit en
    Avril 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Apprenti ingénieur en mécanique aéronautique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2014
    Messages : 19
    Par défaut Graphique avec plage de donnees variable
    Bonjour Messieurs,

    J'ai un petit soucis que je n'arrive pas à résoudre depuis deux jours:
    Je voudrais sélectionner une plage de donnée pour mon graphique.
    Le problème est que cette plage de donnée admet des cellules vides et je voudrais donc les filtrer pour ne pas les inclure dans le graphique (c'est moche sinon).
    La variable "contenu" (voir code ci-dessous) me permet de stocker les cellules qui contiennent des informations à afficher dans mon graphique.
    Si je sélectionne l'ensemble de la colonne de données, par exemple (A2:A30) et que le l'affecte aux XValues de mon graphe, le graphique n'est pas jolie mais cela fonctionne.
    Par contre si je commence à filtrer les cellules vides dans cette plage, comme dans mon code, je n'arrive pas à affecter le résultat à mes XValues ni même à mes Values.
    C'est le séparateur ";" qui n'est pas bon ?

    Voici mon code:

    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
     If ComboBox2.Value <> Empty Then 'Menu déroulant permettant de sélectionner l'itération étudiée
            Sheets("AnalyseEpaisseurs").Activate
            coup = ComboBox2.Value
            If ComboBox2.Value <> Empty Then
                Set Graph1 = Worksheets("AnalyseEpaisseurs").ChartObjects(1).Chart
                Graph1.SetSourceData Source:=Sheets("AnalyseEpaisseurs").Range("A2:B6")
                'Definition des plages du graphe:
                'Plage1:
                contenu = "AnalyseEpaisseurs!A" & i & ":"
                j = 0
                For i = 2 To 30
                    If Cells(i, 1).Value <> Empty And j = 1 Then
                        contenu = contenu & ";AnalyseEpaisseurs!A" & i & ":"
                        j = 0
                    ElseIf Cells(i, 1).Value = Empty And j = 0 Then
                        contenu = contenu & "A" & i - 1
                        j = 1
                    End If
                Next i
                Graph1.SeriesCollection(1).XValues = contenu
                'Plage2:
                j = 0
                If Cells(2, 2).Value <> Empty Then
                    l = "B"
                    k = 2
                Else
                    l = "C"
                    k = 3
                End If
                contenu = "=AnalyseEpaisseurs!" & l & "2:"
                For i = 2 To 30
                    If Cells(i, k).Value <> Empty And j = 1 Then
                        contenu = contenu & ";AnalyseEpaisseurs!" & l & i & ":"
                        j = 0
                    ElseIf Cells(i, k).Value = Empty And j = 0 Then
                        contenu = contenu & l & i - 1
                        j = 1
                    End If
                Next i
                Graph1.SeriesCollection(1).Values = contenu
                Nomimage = ThisWorkbook.Path & Application.PathSeparator & "Graph1.gif"
                Graph1.Export Filename:=Nomimage, FilterName:="GIF"
                Me.Image3.Picture = LoadPicture(Nomimage)
    Merci.

  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
    Joins un fichier exemple.

  3. #3
    Membre averti
    Homme Profil pro
    Apprenti ingénieur en mécanique aéronautique
    Inscrit en
    Avril 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Apprenti ingénieur en mécanique aéronautique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2014
    Messages : 19
    Par défaut
    J'ai une feuille à peu près comme ceci:
    Désolé, je ne peux pas vous montrer les données originales

    Exemple.xlsx

  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
    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 MiseAJour()
    Dim LastLig As Long, i As Long, j As Long, N As Long
    Dim Tb, X(), Y()
     
    With Worksheets("AnalyseEpaisseurs")
        LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
        N = Application.Count(.Range("B2:B" & LastLig))
        ReDim X(1 To N)
        ReDim Y(1 To N)
        Tb = .Range("A2:B" & LastLig)
        For i = 1 To LastLig - 1
            If Tb(i, 2) <> "" Then
                j = j + 1
                X(j) = Tb(i, 1)
                Y(j) = Tb(i, 2)
            End If
        Next i
        With .ChartObjects(1).Chart.SeriesCollection(1)
            .XValues = X
            .Values = Y
        End With
    End With
    End Sub

  5. #5
    Membre averti
    Homme Profil pro
    Apprenti ingénieur en mécanique aéronautique
    Inscrit en
    Avril 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Apprenti ingénieur en mécanique aéronautique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2014
    Messages : 19
    Par défaut
    Et bien c'est parfaitement ce qu'il me fallait !
    Désolé pour cette réponse tardive, j'ai mis du temps à tester et à adapter le code à mon problème.

    Merci beaucoup pour cette réponse si rapide.

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 01/04/2019, 17h34
  2. [XL-2013] Graphique avec plage de données variable
    Par CydZZ dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 10/10/2014, 14h05
  3. [XL-2010] Graphiques avec plage de données variables
    Par baptoo61 dans le forum Excel
    Réponses: 10
    Dernier message: 26/06/2014, 10h02
  4. [XL-2003] Graphique avec plage de données variables
    Par yoord dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 17/06/2009, 11h48
  5. [VBA-E] graphique avec plage de donnees variable
    Par gigs dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 03/04/2006, 14h50

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