Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/11/2011, 09h03   #1
Invité régulier
 
Inscription : janvier 2010
Messages : 42
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 42
Points : 5
Points : 5
Par défaut Histogramme et camembert - VBA

Bonjour,

à partir de données présentées sous forme de tableau, je souhaite créer un histogramme et un camembert.

La difficulté est que seul les données filtrées (affichées) doivenet être prises en compte. De plus aucun tableau intermédiaire ne devra être inscrit sur les feuilles excel.



Merci d'avance pour votre aide
gaston64 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 02/11/2011, 10h30   #2
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Bonjour,

Je n'ai pas le code en tête, mais en utilisant l'enregistreur de macros, tu devrais trouver ton bonheur. Il faut faire un clic droit dans le graphique, cliquer sur "Sélectionner les données, appuyer sur le bouton "Cellules masquées et cellules vides" puis cocher "Afficher les données des lignes et colonnes masquées".
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 02/11/2011, 14h23   #3
Invité régulier
 
Inscription : janvier 2010
Messages : 42
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 42
Points : 5
Points : 5
Bonjour

Concernant la condition "uniquement cellules visibles" je m'en sors avec l'enregistreur de macr. Idem pour construire un histogramme et un camembert.

Ce qui me bloque pour le moment est de faire figurer les données utiles dans un tableau de variables qui n'apparait pas sur la feuille excel. Par la suite je serai en mesure de les exploiter pour construire les figures voulues.

ci-joint le fichier exemple

merci
Fichiers attachés
Type de fichier : xls Camembert et histogramme vba - Copie.xls (14,5 Ko, 2 affichages)
gaston64 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 02/11/2011, 15h38   #4
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Tu ne veux même pas les données dans des lignes ou une feuille masquée ?
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 02/11/2011, 16h04   #5
Invité régulier
 
Inscription : janvier 2010
Messages : 42
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 42
Points : 5
Points : 5
Jsutement non, je ne souhaite pas que les valeurs intermediaires ne soient inscrites sur le fichier (ni dans une autre feuille). C'est cela qui me bloque.
gaston64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2011, 17h07   #6
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Regarde cette macro (pour les histogrammes seulement). Si ça te convient, je la compléterais.

Code :
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
Sub test()
'Réf. Camembert et histogramme vba - Copie.xls gaston64
Dim Plage As Range, c As Range, Dico As Object, Ctr As Integer
Dim TablSeries(100), TablHisto(100, 1), S As Series
Ctr = -1
With Sheets("Feuil1")
    Set Plage = .AutoFilter.Range.Offset(1, 1)
    Set Plage = Plage.Resize(Plage.Rows.Count - 1, 1).SpecialCells(xlCellTypeVisible)
    Set Dico = CreateObject("Scripting.Dictionary")
    For Each c In Plage
        If Not Dico.exists(c.Value) Then
            Dico.Add c.Value, c.Value
            Ctr = Ctr + 1
            TablSeries(Ctr) = c.Value
        End If
        Var = Application.Match(c.Value, TablSeries(), 0)
        If Application.CountA(Range(c.Offset(, 2), c.Offset(, 4))) > 0 Then
            TablHisto(Var - 1, 0) = TablHisto(Var - 1, 0) + 1
        Else
            TablHisto(Var - 1, 1) = TablHisto(Var - 1, 1) + 1
        End If
    Next c
    .[I:L].ClearContents
    .[I1] = "Série"
    .[J1] = "Rempli"
    .[K1] = "Vide"
    .[L1] = "Tot"
    Ctr = 0
    Do While TablSeries(Ctr) <> ""
        .Cells(Ctr + 2, 9) = TablSeries(Ctr)
        .Cells(Ctr + 2, 10) = TablHisto(Ctr, 0)
        .Cells(Ctr + 2, 11) = TablHisto(Ctr, 1)
        .Cells(Ctr + 2, 12) = TablHisto(Ctr, 0) + TablHisto(Ctr, 1)
        Ctr = Ctr + 1
    Loop
    Set Plage = Range(.[I1], .Cells(.Rows.Count, 12).End(xlUp))
    Plage.Sort .[L1], xlDescending, Header:=xlYes
    ligne = .Cells(.Rows.Count, 9).End(xlUp).Row
    Set sh = Sheets("Feuil1")
    With .ChartObjects("Graphique 2").Chart
        For Each S In .SeriesCollection
            S.Delete
        Next S
        For i = 0 To 1
            Set S = .SeriesCollection.NewSeries
            S.Name = sh.Cells(1, 10).Offset(, i).Value
            Var = Application.Transpose(Application.Transpose(sh.Cells(2, 9).Resize(ligne - 1).Offset(, i + 1)))
            S.Values = Var
            Var = Application.Transpose(Application.Transpose(sh.Cells(2, 9).Resize(ligne - 1)))
            S.XValues = Var
        Next i
    End With
    .[I:L].ClearContents
End With
End Sub
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2011, 20h11   #7
Invité régulier
 
Inscription : janvier 2010
Messages : 42
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 42
Points : 5
Points : 5
Bonsoir

Effectivement la macro permet d'afficher le résultat souhaité. toutefois à travers ta macro tu fais apparâitre un tableau temporaire que tu efface ensuite.

Or le problème est que pour des raison d'adaptation et d'évolution du fichier final, je souhaite parvenir à afficher les graphiques sans affecter les cellules des feuilles excel. Je pensais y parvenir à l'aide de tableau de varibles. Je n'y parviens malheureusement pas.

Merci
gaston64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2011, 21h16   #8
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
C'est ce que j'ai fait, jusqu'au point de trier les arrays. Je ne vois pas ce qui te gênes dans cette utilisation momentanée (on peut ajouter :

Code :
Application.ScreenUpdating = False
pour éviter que ces cellules apparaissent à l'écran.
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 01
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h41.


 
 
 
 
Partenaires

Hébergement Web