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

Excel Discussion :

Ignorer des valeurs vides dans un graphe


Sujet :

Excel

  1. #1
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 82
    Points : 48
    Points
    48
    Par défaut Ignorer des valeurs vides dans un graphe
    Bonjour,

    Ma question va vous sembler simple, mais la reponse (que je n'ai pas trouvee) ne l'est sans doute pas...

    Voici mes donnees:
    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
    		Incidents	Maintenances
    Jan-08		3		4
    Feb-08		6		5
    Mar-08		3		6
    Apr-08		5		4
    May-08		2		4
    Jun-08		4		4
    Jul-08		5		5
    Aug-08		5		3
    Sep-08		5		4
    Oct-08		4		7
    Nov-08		3		2
    Dec-08		3		3
    Jan-09		5		1
    Feb-09		5		5
    Mar-09		0		6
    Apr-09		3		4
    May-09		3		2
    Jun-09		2		4
    Jul-09		3		2
    Aug-09		
    Sep-09		
    Oct-09		
    Nov-09		
    Dec-09		
    Jan-10		
    Feb-10		
    Mar-10		
    Apr-10		
    May-10		
    Jun-10		
    Jul-10
    Mais voila ce que me donne mon graphique, quand je met la plage de donnees sources jusqu'a Juillet 2010 --> Voir piece jointe

    On peut voir que les donnees non remplies apparaissent comme des colonnes vides, ce qui est logique. Ce que je voudrais, c'est evidemment que les donnees vides n'apparraissent pas sur le graphe, qu'il s'arrete a Juillet 09. Et une fois que l'on remplie une nouvelle ligne, que les donnees de cette ligne apparraissement automatiquement.

    J'ai essaye de mettre =na() ou #N/A dans les cellules vides, mais rien n'y fait, le graphe utilise toujours les donnees vides.

    Bien evidemment, ce fichier va etre rempli manuellement, mais celui qui le rempli ne doit pas avoir a changer la plage de donnees du graphe (c'est donc la mon probleme, le graphe doit le faire automatiquement ou ignorer les donnes vides).

    Avez vous une idee?

    Merci,

    Dazdh
    Images attachées Images attachées  

  2. #2
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Salut,
    Il me semble qu'il y a moyen avec les paramètres (fais une recherche sur le forum) sinon il y a VBA.
    Voici un exemple pour une série:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub MAJaxes()
     
    Dim DerCel As Long
     
    DerCel = Sheets("Data").Cells(Columns(2).Cells.Count, 2).End(xlUp).Row 'Défini la dernière cellule remplie sur base de la colonne B
    '
        ActiveSheet.ChartObjects("Chart 1").Activate 'Active le graph
        ActiveChart.SeriesCollection(1).Values = "=Data!R2C4:R" & DerCel & "C4" 'Adapte la série
        Sheets("Data").Range("a1").Activate 'Active la feuille => Désactive le graph
    End Sub
    Pour l'adapter à ton cas je te conseille d'utiliser l'enregistreur de macro.
    Tu lance l'enregistreur et tu change manuellement les séries de ton graph.
    Quand tu iras voir le code, tu auras le bon nom du fichier il te restera à rendre la dernière ligne dynamique.
    Avec l'enregistreur tu auras pour le changement de série un truc comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveChart.SeriesCollection(1).Values = "=Data!R2C2:R19C2"
    Donc Feuille nomée Data de la ligne (R) 2 colonne (C) 2 à la ligne (R) 19 colonne (C) 2; soit la plage B2:B19.
    Comme c'est la ligne de fin, le 19 qui est amené à changer tu remplace ce 19 par la variable qui récupère la dernière ligne de manière dynamique, voir mon le code ci-dessus.
    En espérant avoir été clair.
    Bonne continuation.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 149
    Points : 183
    Points
    183
    Par défaut
    Des réponses exactes non mais il y a bien quelques pistes que tu peux explorer sans avoir à modifier la plage de données :
    Un graph affiche ce qui apparait à l'écran. En conséquence si tu masques ou si tu groupes les données pour les mois que tu ne veux pas, ils ne seront pas dans le graph mais si tu les démasques ils apparaitront, tu peux donc soit essayer d'automatiser en VBA un logarithme qui dira en gros (désolé mais j'ai pas pratiqué le VBA depuis lgtps donc au lieu de dire des conneries je vais essayer d'etre clair) "tant que les valeurs de ma colonne 'incidents' ne sont pas nulles j'affiche la ligne et après je masque" soit le faire en manuelle tous les mois ce qui ne te prendra pas trop de temps je pense !!

    Sinon tu dois aussi pouvoir sélectionner ta plage de données en VBA selon le même principe "jusqu'à la 1ère valeur vide de ma colonne 'incidents' je prends dans ma plage de cellules" mais malheureusement je ne peux pas trop t'aider car mon niveau en VBA a lourdement chuté

  4. #4
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 56
    Points : 46
    Points
    46
    Par défaut
    Salut, j'ai développé une petit macro y'a quelques jours pour la même chose.
    Le problème est que en plus de masquer les colonnes vides automatiquement, certain modèles de graphiques affiche un zéro (graph en ligne) si la cellule contient quelque chose (même une formule ou autre).

    La seule façon de ne pas faire afficher de zéro dans ce cas là (pour couper une courbe sur quelques mois par exemple) ou de dynamiser l'affichage des abscisses comme dans ton cas c'est de masquer les colonnes des valeurs et/ou des étiquettes d'abscisses.

    La solution c'est d'insérer une liste dans une cellule avec la liste des mois à afficher et de mettre un évènement worksheet_change sur cette feuille

    après grâce à des listes tu peux masquer faire masquer dynamiquement ce qui te gêne.

    Dans mon exemple j'utilise une cellule pour le mois et une autre pour le mode d'affichage des abscisses
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
        On Error GoTo ErrorEnd
     
        Dim wksDb As Worksheet 'Feuille avec les données
        Dim ListOfMonth As Variant 'Liste des mois
        Dim Lett As Variant 'liste pour capter la lettre de la dernière colonne a cacher
        Dim cmt As Integer 'compteur pour le module
        Dim LC As String 'Lettre de la dernière colonne à masquer
     
        If Target.Address = "$D$29" Then
     
            Set wksDb = ThisWorkbook.Worksheets("DataBase") 'feuille avec les données reliées aux graphiques
            wksDb.Range("B:M").EntireColumn.Hidden = False
     
            ListOfMonth = Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December")
            Lett = Array("C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "ZZ")
     
            LC = "ZZ"
            For cmt = 0 To 11
                If ListOfMonth(cmt) = Target.Value Then
                    LC = Lett(cmt)
                    Exit For
                End If
            Next cmt
     
            If LC = "ZZ" Then GoTo ErrorEnd
     
            wksDb.Range(LC & ":M").EntireColumn.Hidden = True
     
        ElseIf Target.Address = "$D$30" Then
     
            Set wksDb = ThisWorkbook.Worksheets("DataBase")
            wksDb.Range("P:AA").EntireColumn.Hidden = False
     
            If Target.Value = "Full Year" Then Exit Sub
     
            ListOfMonth = Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December")
            Lett = Array("Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "AA", "ZZ")
     
            LC = "ZZ"
            For cmt = 0 To 11
                If ListOfMonth(cmt) = Target.Offset(-1, 0).Value Then
                    LC = Lett(cmt)
                    Exit For
                End If
            Next cmt
     
            If LC = "ZZ" Then GoTo ErrorEnd
     
            wksDb.Range(LC & ":AA").EntireColumn.Hidden = True
     
        End If
     
    ErrorEnd:
    End Sub
    Voilà si tu peux l'adapter, désolé c'est pas très commenté, si tu as besoin de plus d'explication...

Discussions similaires

  1. lire des valeurs vides dans un fichier txt
    Par bakaratoun dans le forum MATLAB
    Réponses: 5
    Dernier message: 14/12/2009, 16h15
  2. [VBA-W]prendre des valeurs "texte" dans Excel
    Par teromah dans le forum VBA Word
    Réponses: 12
    Dernier message: 14/06/2007, 16h20
  3. vb6: Stocker des valeurs récupérés dans un TextBox sous excel
    Par gaetan.tranvouez dans le forum VB 6 et antérieur
    Réponses: 32
    Dernier message: 19/07/2006, 16h12
  4. [2.0] Valeur vide dans DropDownList
    Par davasm dans le forum ASP.NET
    Réponses: 3
    Dernier message: 23/06/2006, 15h00
  5. Réponses: 11
    Dernier message: 22/02/2006, 17h25

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