Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > IHM
IHM Ce forum est dédié aux questions relatives à la création de formulaires et d'états, avec ou sans code VBA, et macros.
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 20/06/2011, 11h30   #1
Invité de passage
 
Inscription : février 2009
Messages : 29
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 29
Points : 2
Points : 2
Par défaut graphique access supprimer les valeurs 0

Bonjour tous le monde !

Voilà ma question est simple je souhaite supprimer les barres de mon graphique dont la valeur est égale à 0


La source du graphique est une requête.

Et je ne sais pas du tout comment m'y prendre...

C'est la première fois que je créer un graphique sur access
alexbigfoug est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 14h34   #2
Membre Expert
 
Homme Jacques Petiot
Indépendant développeur et formateur
Inscription : octobre 2007
Messages : 891
Détails du profil
Informations personnelles :
Nom : Homme Jacques Petiot
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Indépendant développeur et formateur
Secteur : Conseil

Informations forums :
Inscription : octobre 2007
Messages : 891
Points : 1 333
Points : 1 333
Hello
peut être utiliser un critère comme >0 dans la requête
sinon, dis nous en un peu plus pour avoir une info plus adaptée.....
__________________
-------------------Simplifi----------comme si tout était simple--------
Simplifi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 17h02   #3
Invité de passage
 
Inscription : février 2009
Messages : 29
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 29
Points : 2
Points : 2
Citation:
SELECT date, Round(Sum([champ1]), 2) AS champ1, Round(Sum([champ2]), 2) AS champ2, Round(Sum([champ3]) AS champ3
FROM TABLE1
WHERE date >= variable1 AND date =< variable2
GROUP BY date
Voilà un exemple

(J'ai une trentaine de champ dans le select normalement)

Sachant que dans beaucoup de champs, la valeur est à zero et donc il faudrait que la barre de l'histogramme ne s'affiche pas...

Je sai pas si j'ai été plus clair^^


Encore un exemple :

champ1 = 12
champ2 = 0
champ3 = 4

Dans l'histogramme je voudrais voir apparaitre uniquement la barre du champ1 et du champ3.

Merci pour le coup de pouce simplifi, mais une requête avec >0 ne pourrait pas fonctionner.
alexbigfoug est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 17h37   #4
Membre Expert
 
Homme Jacques Petiot
Indépendant développeur et formateur
Inscription : octobre 2007
Messages : 891
Détails du profil
Informations personnelles :
Nom : Homme Jacques Petiot
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Indépendant développeur et formateur
Secteur : Conseil

Informations forums :
Inscription : octobre 2007
Messages : 891
Points : 1 333
Points : 1 333
Hello
en fait, j'en ai pris marre des graphiques d'Access et j'ai reconstitué mon graphique perso à base de rectangles dont je fixe la taille en fonction des valeurs du recordset
ce qui permet de ne pas mettre box10.visible si la valeur est 0
mais cette façon de procéder est beaucoup plus lourde que le graphique de base.
je ne sais donc pas trop si elle te conviendrai

une autre piste est peut être:
Code :
vraifaux(champ2>0;[champ2];null)
__________________
-------------------Simplifi----------comme si tout était simple--------
Simplifi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 17h59   #5
Invité de passage
 
Inscription : février 2009
Messages : 29
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 29
Points : 2
Points : 2
Je testerai ça dès demain mais je suis pas sûr que le "null" empêche la barre de s'afficher...

Je vous tiens au courant !
alexbigfoug est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 09h32   #6
Invité de passage
 
Inscription : février 2009
Messages : 29
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 29
Points : 2
Points : 2
Je me suis basé sur ta solution et j'ai utilisé un Iff

Ce qui donne :
Citation:
SELECT TEMO.date, IIf(Round(Sum([champ1]), 2),2)>0, Round(Sum([champ1]), 2) AS champ1, Round(Sum([champ2]), 2) AS champ2, Round(Sum([champ3]) AS champ3
FROM TABLE1
WHERE date >= variable1 AND date =< variable2
GROUP BY date
Avec cette solution la barre avec la valeur 0 ne s'affiche plus, cependant il laisse une place pour la barre...

Dans mon cas, il faudrait que toutes les barres avec une valeur se suivent...
alexbigfoug est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 11h22   #7
Membre Expert
 
Homme Jacques Petiot
Indépendant développeur et formateur
Inscription : octobre 2007
Messages : 891
Détails du profil
Informations personnelles :
Nom : Homme Jacques Petiot
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Indépendant développeur et formateur
Secteur : Conseil

Informations forums :
Inscription : octobre 2007
Messages : 891
Points : 1 333
Points : 1 333
Hello
effectivement, je comprends mieux ton besoin
et dans ce cas, je ne vois que la manipulation d'un formulaire (ou d'un état, mais c'est plus facile sur le formulaire) par VBA:
j'ouvre en recordset la requête qui donne les valeurs (y compris les 0)
je parcours les champs
si la valeur n'est pas nulle, je dimensionne le rectangle et je pose le bon texte dans l'étiquette que je place au bon endroit
si la valeur est nulle ou égale à 0 je passe au champ suivant
si tu veux le VBA....
__________________
-------------------Simplifi----------comme si tout était simple--------
Simplifi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 12h05   #8
Invité de passage
 
Inscription : février 2009
Messages : 29
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 29
Points : 2
Points : 2
Citation:
Envoyé par Simplifi Voir le message
Hello
effectivement, je comprends mieux ton besoin
et dans ce cas, je ne vois que la manipulation d'un formulaire (ou d'un état, mais c'est plus facile sur le formulaire) par VBA:
j'ouvre en recordset la requête qui donne les valeurs (y compris les 0)
je parcours les champs
si la valeur n'est pas nulle, je dimensionne le rectangle et je pose le bon texte dans l'étiquette que je place au bon endroit
si la valeur est nulle ou égale à 0 je passe au champ suivant
si tu veux le VBA....
Si j'ai bien compris je suis donc obligé d'abandonner le graphique...

Petite question à part,
Est - il possible de faire un order by par rapport aux résultats

champ1 = 4
champ2 = 10
champ3 = 8

Cela donnerait champ2, champ3 champ1.
alexbigfoug est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 13h48   #9
Membre Expert
 
Homme Jacques Petiot
Indépendant développeur et formateur
Inscription : octobre 2007
Messages : 891
Détails du profil
Informations personnelles :
Nom : Homme Jacques Petiot
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Indépendant développeur et formateur
Secteur : Conseil

Informations forums :
Inscription : octobre 2007
Messages : 891
Points : 1 333
Points : 1 333
hello
à mon sens, on ne peut pas faire ça sans VBA
Mais le VBA n'est pas aussi effrayant qu'il en a l'air
__________________
-------------------Simplifi----------comme si tout était simple--------
Simplifi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 15h15   #10
Invité de passage
 
Inscription : février 2009
Messages : 29
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 29
Points : 2
Points : 2
Moi cela ne devrais pas me déranger...
Mais les personnes pour qui je travaille perdront leur "graphique", et je ne suis pas sûr qu'ils seront d'accords^^
alexbigfoug est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2011, 08h57   #11
Membre Expert
 
Homme Jacques Petiot
Indépendant développeur et formateur
Inscription : octobre 2007
Messages : 891
Détails du profil
Informations personnelles :
Nom : Homme Jacques Petiot
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Indépendant développeur et formateur
Secteur : Conseil

Informations forums :
Inscription : octobre 2007
Messages : 891
Points : 1 333
Points : 1 333
Hello
pour exemple, le VB d'un formulaire qui trace des courbes de comparaison entre les chiffres de plusieurs années pour des grandeurs telles que le nombre de réclamations ou de non conformités etc...
Ici, c'est un graphique de progression et les boites s"appellent Janv1...Janv5...dec5
Pour tracer la courbe, chaque boite est en fait un trait diagonal
(quand je trace des batons, chaque boite est un rectangle rempli)
l'écriture de ce VB m'a pris un peu de temps, mais ensuite, le graphique ressemble à un graphique normal et surtout je suis absolument maître du fonctionnement... chez toi, il est possible d'intervertir les colonnes pour les mettre en ordre décroissant, et de ne pas afficher les colonnes nulles...
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
Private Sub Form_Load()
Dim Txt_Sql As String
Dim Txt2_Sql As String
Dim max As Long: max = 0
Dim Plus As Long, ech As Integer, rap As Double, div As Long, div_ech As Double, moins_ech As Integer, i As Integer
Dim txt_ech As String
Select Case OpenArgs
 Case "réclamations,nombre"
    Titre.Caption = "Comparaison du nombre de réclamations " & vbCrLf & "entre " & Year(Forms!Recherche_réclamation!Début) & " et " & Year(Forms!Recherche_réclamation!Fin)
              Txt_Sql = "TRANSFORM Count(Réclamations.N°_RECLAMATION) AS CompteDeN°_RECLAMATION"
    Txt_Sql = Txt_Sql & " SELECT Year([Date_Réclamation]) AS Année "
    Txt_Sql = Txt_Sql & " FROM Réclamations"
    If Len(Forms!Recherche_réclamation!Filtre_texte) > 1 Then
        Txt_Sql = Txt_Sql & " WHERE " & Forms!Recherche_réclamation!Filtre_texte
        Zone_Filtre = "Avec " & Forms!Recherche_réclamation!Filtre_texte
        Zone_Filtre.Visible = True
    End If
    Txt_Sql = Txt_Sql & " GROUP BY Year([Date_Réclamation])"
    Txt_Sql = Txt_Sql & " PIVOT Format([Date_Réclamation],'mmm');"
 Case "NC,nombre"
    Titre.Caption = "Comparaison du nombre de non conformités " & vbCrLf & "entre " & Year(Forms!Recherche_Non_conformités!Début) & " et " & Year(Forms!Recherche_Non_conformités!Fin)
              Txt_Sql = "TRANSFORM Count(Non_Conformités.N°_NC) AS CompteDeN°_NC"
    Txt_Sql = Txt_Sql & " SELECT Year([Date_NC]) AS Année "
    Txt_Sql = Txt_Sql & " FROM Non_Conformités"
    If Len(Forms!Recherche_Non_conformités!Filtre_texte) > 1 Then
        Txt_Sql = Txt_Sql & " WHERE " & Forms!Recherche_Non_conformités!Filtre_texte
        Zone_Filtre = "Avec " & Forms!Recherche_Non_conformités!Filtre_texte
        Zone_Filtre.Visible = True
    End If
    Txt_Sql = Txt_Sql & " GROUP BY Year([Date_NC])"
    Txt_Sql = Txt_Sql & " PIVOT Format([Date_NC],'mmm');"
 Case "NC,cout"
    Titre.Caption = "Comparaison du coût des non conformités " & vbCrLf & "entre " & Year(Forms!Recherche_Non_conformités!Début) & " et " & Year(Forms!Recherche_Non_conformités!Fin)
              Txt_Sql = "TRANSFORM sum(Non_Conformités.Coût_Nc) AS SumDeCoût_Nc"
    Txt_Sql = Txt_Sql & " SELECT Year([Date_NC]) AS Année "
    Txt_Sql = Txt_Sql & " FROM Non_Conformités"
    If Len(Forms!Recherche_Non_conformités!Filtre_texte) > 1 Then
        Txt_Sql = Txt_Sql & " WHERE " & Forms!Recherche_Non_conformités!Filtre_texte
        Zone_Filtre = "Avec " & Forms!Recherche_Non_conformités!Filtre_texte
        Zone_Filtre.Visible = True
    End If
    Txt_Sql = Txt_Sql & " GROUP BY Year([Date_NC])"
    Txt_Sql = Txt_Sql & " PIVOT Format([Date_NC],'mmm');"
 Case Else
    Exit Sub
End Select
Me.RecordSource = Txt_Sql
For i = 1 To Me.Recordset.Fields.Count - 1
' rappelons que la source étant une analyse croisée, elle ne comprends pas tous les mois
' on prends les colonnes de la source les unes après les autres
' on affecte leur nom comme source de la boite du même nom
' ex: Janv est vide (indépendant) et si on trouve une colonne qui s'appelle Janv
' alors on écrit me("Janv").ControlSource = "Janv"
' ce qui permet de laisser la boite Janv indépendante si aucune colonne ne s'appelle Janv
Me(Recordset(i).Name).ControlSource = Me.Recordset(i).Name
Next i
'somme.ControlSource = "int(= nz(Janv,0) + nz(févr,0) + nz(mars,0) + nz(avr,0) + nz(mai,0) + nz(juin,0) + nz(juil,0) + nz(Août,0) + nz(sept,0) + nz(oct,0) + nz(nov,0) + nz(déc,0)) "
somme.ControlSource = "= int(nz(Janv,0) + nz(févr,0) + nz(mars,0) + nz(avr,0) + nz(mai,0) + nz(juin,0) + nz(juil,0) + nz(Août,0) + nz(sept,0) + nz(oct,0) + nz(nov,0) + nz(déc,0) )"
'
' programmation pour faire un graphique à ma façon
'
' Les données sont déjà initialisées
With Me.Recordset
'
' détermination de l'échelle
'
' recherche de la plus grande somme annuelle
'
 
.MoveFirst
Do Until .EOF
    For i = 1 To Me.Recordset.Fields.Count - 1
        Plus = Plus + Int(Nz(.Fields(i), 0))
        If Plus > max Then max = Plus
    Next i
    Plus = 0
.MoveNext
Loop
' calcul du nombre de chiffres
ech = Int(Log(max) / Log(10))
' choix de l'unité
Select Case ech
    Case Is < 3
        If Right(OpenArgs, 4) = "cout" Then txt_ech = "€"
        div_ech = 10 ^ ech
        moins_ech = 0
    Case Is < 6
        If Right(OpenArgs, 4) = "cout" Then txt_ech = "K€"
        div_ech = 10 ^ ech
        moins_ech = 3
    Case Else
        If Right(OpenArgs, 4) = "cout" Then txt_ech = "M€"
        div_ech = 10 ^ ech
        moins_ech = 6
End Select
'choix entre 1, 2 et 5, 10, 20 et 50 etc...
rap = max / (10 ^ ech)
Select Case rap
    Case Is < 2
        div = 2 * 10 ^ ech
        gradu_t_1.Caption = 2 * 10 ^ (ech - moins_ech - 1)
        gradu_t_2.Caption = 4 * 10 ^ (ech - moins_ech - 1)
        gradu_t_3.Caption = 6 * 10 ^ (ech - moins_ech - 1)
        gradu_t_4.Caption = 8 * 10 ^ (ech - moins_ech - 1)
        gradu_t_5.Caption = 10 * 10 ^ (ech - moins_ech - 1)
        gradu_t_6.Caption = 12 * 10 ^ (ech - moins_ech - 1)
        gradu_t_7.Caption = 14 * 10 ^ (ech - moins_ech - 1)
        gradu_t_8.Caption = 16 * 10 ^ (ech - moins_ech - 1)
        gradu_t_9.Caption = 18 * 10 ^ (ech - moins_ech - 1)
        gradu_t_10.Caption = 20 * 10 ^ (ech - moins_ech - 1)
        gradu_titre.Caption = txt_ech
        div_ech = div_ech * 0.2
    Case Is < 5
        div = 5 * 10 ^ ech
        gradu_t_1.Caption = 5 * 10 ^ (ech - moins_ech - 1)
        gradu_t_2.Caption = 10 * 10 ^ (ech - moins_ech - 1)
        gradu_t_3.Caption = 15 * 10 ^ (ech - moins_ech - 1)
        gradu_t_4.Caption = 20 * 10 ^ (ech - moins_ech - 1)
        gradu_t_5.Caption = 25 * 10 ^ (ech - moins_ech - 1)
        gradu_t_6.Caption = 30 * 10 ^ (ech - moins_ech - 1)
        gradu_t_7.Caption = 35 * 10 ^ (ech - moins_ech - 1)
        gradu_t_8.Caption = 40 * 10 ^ (ech - moins_ech - 1)
        gradu_t_9.Caption = 45 * 10 ^ (ech - moins_ech - 1)
        gradu_t_10.Caption = 50 * 10 ^ (ech - moins_ech - 1)
        gradu_titre.Caption = txt_ech
        div_ech = div_ech * 0.5
    Case Else
        div = 10 ^ ech
        gradu_t_1.Caption = 1 * 10 ^ (ech - moins_ech)
        gradu_t_2.Caption = 2 * 10 ^ (ech - moins_ech)
        gradu_t_3.Caption = 3 * 10 ^ (ech - moins_ech)
        gradu_t_4.Caption = 4 * 10 ^ (ech - moins_ech)
        gradu_t_5.Caption = 5 * 10 ^ (ech - moins_ech)
        gradu_t_6.Caption = 6 * 10 ^ (ech - moins_ech)
        gradu_t_7.Caption = 7 * 10 ^ (ech - moins_ech)
        gradu_t_8.Caption = 8 * 10 ^ (ech - moins_ech)
        gradu_t_9.Caption = 9 * 10 ^ (ech - moins_ech)
        gradu_t_10.Caption = 10 * 10 ^ (ech - moins_ech)
        gradu_titre.Caption = txt_ech
        div_ech = div_ech * 1
End Select
.MoveLast
For i = 1 To 5
Me("Janv" & i).Top = 567 * (11 - (Nz(Me("Janv"), 0)) / div_ech)
Me("Janv" & i).Height = 567 * (Int(Nz(Me("Janv"), 0)) / div_ech)
If Me("Janv" & i).Top < 567 * 11 Then Me("Janv" & i).Visible = True
 
Me("fev" & i).Top = 567 * (Me("Janv" & i).Top / 567 - (Int(Nz(Me("févr"), 0)) / div_ech))
Me("fev" & i).Height = 567 * (Int(Nz(Me("févr"), 0)) / div_ech)
If Me("fev" & i).Top < 567 * 11 Then Me("fev" & i).Visible = True
 
Me("mar" & i).Top = 567 * (Me("fev" & i).Top / 567 - (Int(Nz(Me("mars"), 0)) / div_ech))
Me("mar" & i).Height = 567 * (Int(Nz(Me("mars"), 0)) / div_ech)
If Me("mar" & i).Top < 567 * 11 Then Me("mar" & i).Visible = True
 
Me("avr" & i).Top = 567 * (Me("mar" & i).Top / 567 - (Int(Nz(Me("avr"), 0)) / div_ech))
Me("avr" & i).Height = 567 * (Int(Nz(Me("avr"), 0)) / div_ech)
If Me("avr" & i).Top < 567 * 11 Then Me("avr" & i).Visible = True
 
Me("mai" & i).Top = 567 * (Me("avr" & i).Top / 567 - (Int(Nz(Me("mai"), 0)) / div_ech))
Me("mai" & i).Height = 567 * (Int(Nz(Me("mai"), 0)) / div_ech)
If Me("mai" & i).Top < 567 * 11 Then Me("mai" & i).Visible = True
 
Me("jun" & i).Top = 567 * (Me("mai" & i).Top / 567 - (Int(Nz(Me("juin"), 0)) / div_ech))
Me("jun" & i).Height = 567 * (Int(Nz(Me("juin"), 0)) / div_ech)
If Me("jun" & i).Top < 567 * 11 Then Me("jun" & i).Visible = True
 
Me("jui" & i).Top = 567 * (Me("jun" & i).Top / 567 - (Int(Nz(Me("juil"), 0)) / div_ech))
Me("jui" & i).Height = 567 * (Int(Nz(Me("juil"), 0)) / div_ech)
If Me("jui" & i).Top < 567 * 11 Then Me("jui" & i).Visible = True
 
Me("aou" & i).Top = 567 * (Me("jui" & i).Top / 567 - (Int(Nz(Me("Août"), 0)) / div_ech))
Me("aou" & i).Height = 567 * (Int(Nz(Me("Août"), 0)) / div_ech)
If Me("aou" & i).Top < 567 * 11 Then Me("aou" & i).Visible = True
 
Me("sep" & i).Top = 567 * (Me("aou" & i).Top / 567 - (Int(Nz(Me("sept"), 0)) / div_ech))
Me("sep" & i).Height = 567 * (Int(Nz(Me("sept"), 0)) / div_ech)
If Me("sep" & i).Top < 567 * 11 Then Me("sep" & i).Visible = True
 
Me("oct" & i).Top = 567 * (Me("sep" & i).Top / 567 - (Int(Nz(Me("oct"), 0)) / div_ech))
Me("oct" & i).Height = 567 * (Int(Nz(Me("oct"), 0)) / div_ech)
If Me("oct" & i).Top < 567 * 11 Then Me("oct" & i).Visible = True
 
Me("nov" & i).Top = 567 * (Me("oct" & i).Top / 567 - (Int(Nz(Me("nov"), 0)) / div_ech))
Me("nov" & i).Height = 567 * (Int(Nz(Me("nov"), 0)) / div_ech)
If Me("nov" & i).Top < 567 * 11 Then Me("nov" & i).Visible = True
 
Me("dec" & i).Top = 567 * (Me("nov" & i).Top / 567 - (Int(Nz(Me("déc"), 0)) / div_ech))
Me("dec" & i).Height = 567 * (Int(Nz(Me("déc"), 0)) / div_ech)
If Me("dec" & i).Top < 567 * 11 Then Me("dec" & i).Visible = True
 
Me("An_" & i).Top = Me("dec" & i).Top - 200
Me("An_" & i).Caption = Nz(Me("Année"), "")
Me("An_" & i).Visible = True
 
.MovePrevious
If .BOF Then Exit For
Next i
 
.MoveLast
End With
End Sub
à bientôt si tu veux plus d'explications sur ce VB

*édit: erreur de clavier et envoi inopiné
__________________
-------------------Simplifi----------comme si tout était simple--------
Simplifi est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h25.


 
 
 
 
Partenaires

Hébergement Web