[Excel] Macro Graphique Camenberts

Résolu/Fermé
elglouton Messages postés 189 Date d'inscription dimanche 19 avril 2009 Statut Membre Dernière intervention 11 novembre 2022 - Modifié par elglouton le 7/05/2011 à 10:15
elglouton Messages postés 189 Date d'inscription dimanche 19 avril 2009 Statut Membre Dernière intervention 11 novembre 2022 - 13 mai 2011 à 09:07
Bonjour,

Je voulais savoir si il était possible de ne pas afficher les étiquettes de données si leur valeur est égale a Zéro.

En effet je desire faire une presentation avec camembert pour plusieur machines les données change et des fois sont egale a 0 j'ai reussi a suprimer l'apparition du 0 grace a la mise en forme 0;; mais il reste les etiquettes de données regoupées les une sur les autre.
J'ai vu une possibilitée de ce genre mais je ne la comprend pas un peu d'aide serai la bien venue
For Each p In ActiveChart.SeriesCollection(1).Points
If Mid(p.DataLabel.Text, 7, 2) = 0 Then p.HasDataLabel = False
Merci


A voir également:

10 réponses

ccm81 Messages postés 10903 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 novembre 2024 2 428
8 mai 2011 à 17:37
bonjour à tous

une tentative avec macros

http://www.cijoint.fr/cjlink.php?file=cj201105/cijyEGFkBT.xls

bonne suite
1
tontong Messages postés 2567 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 20 novembre 2024 1 059
8 mai 2011 à 18:31
Salut ccm81,
Ça a l'air bien cette macro. C'est surtout plus facile à utiliser que ce que j'ai fait.
Je ne porte aucune appréciation sur la macro elle-même. Je suis nul dans ce domaine.
Par contre j'ai fait fonctionner un peu sans dénicher un bug.
Bonne soirée.
0
elglouton Messages postés 189 Date d'inscription dimanche 19 avril 2009 Statut Membre Dernière intervention 11 novembre 2022 1
8 mai 2011 à 19:56
Ca a l'air de très bien fonctionner mais mon problème c'est que j'ai plusieurs graph et je vous avoue que je ne vois pas comment insérer cette macro dans mon classeur avec mes différentes plages
Je l'ai copier dans ma feuille graph et tenter de renommer mes différente plage de graph mais cela ne fonctionne pas...
Je vous met mon fichier pour exemple
0
elglouton Messages postés 189 Date d'inscription dimanche 19 avril 2009 Statut Membre Dernière intervention 11 novembre 2022 1
8 mai 2011 à 20:06
http://www.cijoint.fr/cjlink.php?file=cj201105/cijyrSYKpv.xlsx
0
ccm81 Messages postés 10903 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 novembre 2024 2 428
8 mai 2011 à 21:31
re

1. comme tu as plusieurs graphiques concernés par les etiquettes "nulles", tu nommes les plages correspondantes dans ta feuille (c'est plus commode) et tu complete le code de la procedure Change comme dans l'exemple ci-dessous, où j'ai traité un graphique 2 attaché à la "plage2"
etc ...

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Range("plage1"), Target) Is Nothing Then
  Call RemetEtiquettes(1)
  Call SupprimeEtiquetteNulle(1)
End If
If Not Intersect(Range("plage2"), Target) Is Nothing Then
  Call RemetEtiquettes(2)
  Call SupprimeEtiquetteNulle(2)
End If


End Sub


ici 1 est un numéro de graphique
Call RemetEtiquettes(1)
Call SupprimeEtiquetteNulle(1)

2. je ne peux pas lire ton fichier, je suis resté à excel 2003! donc, si tu le renvoies, fais le au format excel 2003

3. tu copies le code dans le module de ta feuille, le pb, c'est qu'il te faut bien faire correspondre les numéros de graphiques et les plages correspondantes.
Je t'ai mis un bouton permettant de reperer les numéros de tes graphiques

4. salutations a tontong

5. un exemple avec 2 graphiques dans la feuille

http://www.cijoint.fr/cjlink.php?file=cj201105/cij4Q3lP0i.xls

bonne suite
0
elglouton Messages postés 189 Date d'inscription dimanche 19 avril 2009 Statut Membre Dernière intervention 11 novembre 2022 1
9 mai 2011 à 18:26
Voici le fichier au format 2003 mais qui est devenu très lourd il y a beaucoup de formules...
En espérant que cela soit possible avec ce type de données en effet les graph proviennent de données qui changent par le biais d'une formule en feuille "recap par machine la macro fonctionne très bien quand je change manuellement mais pas avec les modifs par le biais de la formule.
http://www.cijoint.fr/cjlink.php?file=cj201105/cij1nLG7Wr.zip
0
elglouton Messages postés 189 Date d'inscription dimanche 19 avril 2009 Statut Membre Dernière intervention 11 novembre 2022 1
Modifié par elglouton le 6/05/2011 à 19:58
Personne çà ne doit pas être possible c'est bien dommage...
Un exemple tout de meme
https://www.excel-downloads.com/forums/forum-excel.7/
0
pépé35530 Messages postés 2942 Date d'inscription vendredi 1 mai 2009 Statut Membre Dernière intervention 19 mars 2016 1 385
6 mai 2011 à 20:41
Bonjour,

Quand tu cliques une première fois sur tes étiquettes, elles sont toutes sélectionnées. Si tu recliques alors sur l'une d'elle, seule cette dernière est active. Tu peux alors la supprimer.

A+

pépé
0
Merci pour ta réponse Pepe35530 mais en fait les valeurs des graphes évoluent donc il faudrait que ce soit évolutif en fonction des valeurs en non permanant
0
tontong Messages postés 2567 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 20 novembre 2024 1 059
7 mai 2011 à 15:29
Bonjour,
Il y a une solution mais elle me parait complexe par rapport à la proposition de pépé 35530. Je ne suis pas sûr de pouvoir l'expliquer dans tous ses détails.
Dans les grandes lignes:
1* Créer par des formules un tableau secondaire qui élimine les valeurs nulles et vides.
2* Nommer les champs de ce tableau secondaire avec en référence une fonction DECALER. Ceci permet d'avoir des champs ajustés et dynamiques.

Pour avoir lu vos questions précédentes voici quelques principes que j'essaye d'appliquer pour avoir des graphiques "parlants":
Pas plus de 6 parts (8 grand max) dans un camembert. ;-)
Une dizaine de données pour un "secteur +histogramme"
Au delà il ne reste que les histogrammes dont l'axe Ox doit présenter une notion d'ordre: ordre chronologique, ordre alphabétique, ordre des valeurs triées, ordre logique (du producteur à l'utilisateur par exemple). Tout ceci n'est qu'un avis personnel!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ccm81 Messages postés 10903 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 novembre 2024 2 428
10 mai 2011 à 16:59
re
ton fichier est en effet très lourd !!
comme les données des graphiques sont calculées, il y a, du moins je crois, avec worksheet_change un pb avec la MAJ des etiquettes
je te suggere de mettre un bouton (controle activeX) dans chaque feuille où il y a des graphiques à traiter et de lui affecter le code comme ci-dessous

Private Sub CommandButton2_Click()
Dim nbgr As Long, nugr As Long
nbgr = ActiveSheet.ChartObjects.Count
For nugr = 1 To nbgr
  Call RemetEtiquettes(nugr)
  Call SupprimeEtiquetteNulle(nugr)
Next nugr
End Sub


où les deux procedures RemetEtiquettes et SupprimeEtiquetteNulle sont celles que tu as déjà

RQ. je n'ai pas essayé dans ton classeur

bonne suite
0
elglouton Messages postés 189 Date d'inscription dimanche 19 avril 2009 Statut Membre Dernière intervention 11 novembre 2022 1
10 mai 2011 à 18:18
J'ai ajouter le bouton qui fonctionne tres bien dans le classeur que tu m'avaiss proposer au click il met les parametres a jour mais dans mon classeur il provoque une erreur 1004
sur la ligne en gras "nbpoints="

A quoi correspond .SeriesCollection(1)
Desoler je ne suis pas tres affuté en Macro

Option Explicit

Public Sub SupprimeEtiquetteNulle(NumGraph)
Dim nbpoints As Long, nupoint As Long
Dim ValY
With ChartObjects(NumGraph).Chart
nbpoints = .SeriesCollection(1).Points.Count
ValY = .SeriesCollection(1).Values
For nupoint = 1 To nbpoints
If ValY(nupoint) = 0 Then
.SeriesCollection(1).Points(nupoint).DataLabel.Delete
End If
Next nupoint
End With
End Sub

Public Sub RemetEtiquettes(NumGraph)
ChartObjects(NumGraph).Chart.ApplyDataLabels ShowCategoryName:=True, HasLeaderLines:=True
End Sub

Private Sub CommandButton2_Click()
Dim nbgr As Long, nugr As Long
nbgr = ActiveSheet.ChartObjects.Count
For nugr = 1 To nbgr
Call RemetEtiquettes(nugr)
Call SupprimeEtiquetteNulle(nugr)
Next nugr
End Sub
0
ccm81 Messages postés 10903 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 novembre 2024 2 428
10 mai 2011 à 18:39
re
nbpoints = .SeriesCollection(1).Points.Count
donne le nombre de points de la série de données

dans ta feuille graph il y a des graphiques sans serie de données
le pb vient certainement de là!
donc
Etape 1. vérifies avec le bouton qui permet de voir quels sont les graphiques a traiter et quelle série de donnée leur est attachée
Etape 2. modifier eventuellement la procedure (du bouton)pour ne traiter que les "bons graphs"

RQ. sinon, il y a une solution : gérer l'erreur produite dans ce cas avec un "on error goto"

Public Sub SupprimeEtiquetteNulle(NumGraph)
Dim nbpoints As Long, nupoint As Long
Dim ValY
On Error GoTo fin
With ChartObjects(NumGraph).Chart
  nbpoints = .SeriesCollection(1).Points.Count
  ValY = .SeriesCollection(1).Values
  For nupoint = 1 To nbpoints
    If ValY(nupoint) = 0 Then
      .SeriesCollection(1).Points(nupoint).DataLabel.Delete
    End If
  Next nupoint
End With
fin:
End Sub


et

Public Sub RemetEtiquettes(NumGraph)
On Error GoTo fin
  ChartObjects(NumGraph).Chart.ApplyDataLabels ShowCategoryName:=True, HasLeaderLines:=True
fin:
End Sub


bonne suite
0
elglouton Messages postés 189 Date d'inscription dimanche 19 avril 2009 Statut Membre Dernière intervention 11 novembre 2022 1
Modifié par elglouton le 10/05/2011 à 19:39
Et ba voila cela fonctionne bien maintenant pour ma feuille recap par machine
Je pensais que je pouvais traiter que la feuille recap par machine dans un premier temps.

Par contre sachant que mes graph de la feuille "graph" sont les meme que ceux de la feuille "recap par machine" je me suis servis de la meme plage de donnés pour les creer.

Hors ces graph de la feuille "graph n'ont pas les meme nom et je ne pourrais donc pas le faire sur cette page a moin de recréer de nouvelles plage pour cette feuille correspondante au nom des graps present sur cette feuille...

Ou sinon est-ce possible de renommer un graph je n'y arrive pas...
0
ccm81 Messages postés 10903 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 novembre 2024 2 428
10 mai 2011 à 20:28
re
dans la mesure où tu n'as qu'une feuille de plus a traiter (la feuille graph)
je crois que le plus simple, c'est de mettre un bouton dans la feuille graph, de lui affecter le code du bouton de la feuille recap par machine
puis de recopier dans le module de la feuille graph, les deux procedures Remet et Supprime

ce qui t'oblgera a faire un clic dans chacune des deux feuilles

si c'est trop genant, on peut essayer de s'y prendre autrement
0
ccm81 Messages postés 10903 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 novembre 2024 2 428
11 mai 2011 à 08:48
re

1. dans le module de la feuille qui contient les données

Option Explicit

Private Sub CommandButton1_Click()
Dim nugr As Long
  nugr = Range("nugr").Value
  ActiveSheet.ChartObjects(nugr).Select
End Sub

Private Sub CommandButton2_Click()
  Call Traite("Feuil1")
  Call Traite("F1")
  Call Traite("F2")
End Sub


à toi de modifier/ajouter les noms des feuilles a traiter

2. Puis insertion/nouveau module

Option Explicit

Public Sub SupprimeEtiquetteNulle(NomFeuille, NumGraph)
Dim nbpoints As Long, nupoint As Long
Dim ValY
On Error GoTo fin
With Sheets(NomFeuille).ChartObjects(NumGraph).Chart
  nbpoints = .SeriesCollection(1).Points.Count
  ValY = .SeriesCollection(1).Values
  For nupoint = 1 To nbpoints
    If ValY(nupoint) = 0 Then
      .SeriesCollection(1).Points(nupoint).DataLabel.Delete
    End If
  Next nupoint
End With
fin:
End Sub

Public Sub RemetEtiquettes(NomFeuille, NumGraph)
On Error GoTo fin
  Sheets(NomFeuille).ChartObjects(NumGraph).Chart.ApplyDataLabels ShowCategoryName:=True, HasLeaderLines:=True
fin:
End Sub

Public Sub Traite(NF As String)
Dim nbgr As Long, nugr As Long
nbgr = Sheets(NF).ChartObjects.Count
For nugr = 1 To nbgr
  Call RemetEtiquettes(NF, nugr)
  Call SupprimeEtiquetteNulle(NF, nugr)
Next nugr
End Sub

De cette façon on passe les noms des feuilles à traiter à la procedure Traite(NF) qui elle meme passe le nom de la feuille aux procedures Remet et Supprime

bonne suite
0
elglouton Messages postés 189 Date d'inscription dimanche 19 avril 2009 Statut Membre Dernière intervention 11 novembre 2022 1
11 mai 2011 à 09:32
Merci pour tes reponses et solution tres rapide sependant je ne suis pas encore tres àlaise avec les macro et j'ai encore une erreur que je ne sais pas traiter sur la ligne
nugr = Range("nugr").Value
"la methode 'range' de l'object Worlsheet a echoué.

Comment la resoudre
0
ccm81 Messages postés 10903 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 novembre 2024 2 428
11 mai 2011 à 09:50
re
Cette cellule (nommée "nugr" dans la feuille) est utilisée par le bouton qui permet de reperer les graphiques selon la valeur (1, 2, ...) de cette cellule. En fait ce bouton servait dans l'option choisie au départ d'utiliser worksheet_change, mais ce n'est plus d'actualité.
Je suppose que tu n'utilises plus ce bouton, donc tu peux supprimer la procedure ou du moins la désactiver en mettant toutes les lignes en commentaire (ajouter un ' devant chaque ligne)
bonne suite
0
elglouton Messages postés 189 Date d'inscription dimanche 19 avril 2009 Statut Membre Dernière intervention 11 novembre 2022 1
11 mai 2011 à 11:49
C'est parfait cela fonctionne a merveille je te remercie énormément pour le temps que tu a pris pour ce problème.

Pense tu qu'il serai possible d'appliquer la mémé chose pour les titre des graph si toute les valeur de la plage du graph sont a zéro que le titres soit retiré...

Je sais j'abuse tu as déjà fait un très bon travail et je comprendrai que tu ne réponde pas a cette dernière question

Encore un grand merci pour tous vous étés très réactifs et avez toujours une bonne réponse sous les doigt bonne continuation.
0
ccm81 Messages postés 10903 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 novembre 2024 2 428
11 mai 2011 à 14:29
re

c'est posible, on compte le nb de pts nuls, et s'il est egal au nb de points on suuprime le titre

Public Sub SupprimeEtiquetteNulle(NomFeuille, NumGraph)
Dim nbpoints As Long, nupoint As Long, nbpointsnuls As Long
Dim ValY
On Error GoTo fin
nbpointsnuls = 0
With Sheets(NomFeuille).ChartObjects(NumGraph).Chart
  nbpoints = .SeriesCollection(1).Points.Count
  ValY = .SeriesCollection(1).Values
  For nupoint = 1 To nbpoints
    If ValY(nupoint) = 0 Then
      .SeriesCollection(1).Points(nupoint).DataLabel.Delete
      nbpointsnuls = nbpointsnuls + 1
    End If
  Next nupoint
  If nbpointsnuls = nbpoints Then
    .HasTitle = False
  End If
End With
fin:
End Sub


bon après midi
0
elglouton Messages postés 189 Date d'inscription dimanche 19 avril 2009 Statut Membre Dernière intervention 11 novembre 2022 1
Modifié par elglouton le 12/05/2011 à 20:53
Merci,
Désoler pour la réponse tardive.
Cela fonctionne nikel cependant toujours dans le même but de pouvoir remetre les titre quand le graph reçoit des valeurs...

J'ai tenté de rajouter une ligne dans

Public Sub RemetEtiquettes(NomFeuille, NumGraph)
On Error GoTo fin
Sheets(NomFeuille).ChartObjects(NumGraph).Chart.ApplyDataLabels ShowCategoryName:=True, HasLeaderLines:=True
Sheets(NomFeuille).ChartObjects(NumGraph).Chart.HasTitle ShowCategoryName:=True, HasLeaderLines:=True
fin:
End Sub

Mais ça doit pas être ça car rien n'y fait du coup encore une tite question comment faire pour faire réapparaitre les titre quand les données sont différente de zéro

Finalement j'ai fait comme ça et ca a l'ai de fonctionner

Public Sub SupprimeEtiquetteNulle(NomFeuille, NumGraph)
Dim nbpoints As Long, nupoint As Long, nbpointsnuls As Long
Dim ValY
On Error GoTo fin
nbpointsnuls = 0
With Sheets(NomFeuille).ChartObjects(NumGraph).Chart
nbpoints = .SeriesCollection(1).Points.Count
ValY = .SeriesCollection(1).Values
For nupoint = 1 To nbpoints
If ValY(nupoint) = 0 Then
.SeriesCollection(1).Points(nupoint).DataLabel.Delete
nbpointsnuls = nbpointsnuls + 1
End If
Next nupoint
If Not nbpointsnuls = nbpoints Then
.HasTitle = True
End If

If nbpointsnuls = nbpoints Then
.HasTitle = False
End If
End With
fin:
End Sub

Je ne sais pas si c'est bien

J'ai cru que c'était bon mais malheureusement quand les titres reviennent ils sont réinitialisés
Ca revient à "Titre du graphique" je perd donc le titre de mon graph y a t'il un moyen que cela ne le face pas
0
ccm81 Messages postés 10903 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 novembre 2024 2 428
Modifié par ccm81 le 12/05/2011 à 21:39
re
aïe, c'est vrai que c'est un peu plus délicat.

.Hastitle = True est la bonne propriété mais si ça autorise le titre, ça ne le récupère pas

Option1. attribuer au nom de la serie de chaque graphique le titre souhaité, ce que tu n'as pas fait (clic sur le graphique/données source/series/nom) puis modifier RemetEtiquettes comme ci dessous

Option2. faire quelque part une liste des titres selon les n° de graphique

RQ. dans les deux cas, il va bien falloir les ecrires ces titres, donc l'option 1 est la plus propre

  If nbpointsnuls = nbpoints Then    
    .HasTitle = False    
  Else    
    .HasTitle = True    
    .ChartTitle.Characters.Text = .SeriesCollection(1).Name    
  End If

bonne suite
0
elglouton Messages postés 189 Date d'inscription dimanche 19 avril 2009 Statut Membre Dernière intervention 11 novembre 2022 1
Modifié par elglouton le 12/05/2011 à 22:14
je n'arrive pas a trouver sous 2007 au boulot je suis sous 2003 et je testerais donc demain merci pour la réponse
Oupsss c'est bon je viens de trouver je vais donc tester de suite

Et bien Voila une dernière modifications de commentaire pour dire

Un grand merci a ccm81 qui suivis ce dossier je pense que je vais pouvoir mettre Résolus
J'ai encore appris des tas de truc même si je comprend encore pas tout merci Bcp pour tout encore une fois.
0
elglouton Messages postés 189 Date d'inscription dimanche 19 avril 2009 Statut Membre Dernière intervention 11 novembre 2022 1
Modifié par elglouton le 13/05/2011 à 09:46
Et bien au fait je revient vers toi je viens de le tester sous Excel 2003 et rien ne ce passe y a t'il une action speciale a faire "Probleme de convertion"

Je pense que cela vien de l'appelation des Graph sous Excel 2003

J'ai enregistrer en verssion 97-2003 et ça à l'air bon sauf la taille du fichier qui fait pres de 56 000 ko....

Merci
0