Comment faire un graphique avec vba access

Résolu
penny05 Messages postés 105 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 18 janvier 2007 - 30 mars 2006 à 16:02
 youde29 - 24 avril 2008 à 13:40
Bonjour,
je voudrai savoir comment faire un graphique avec vba.
J'explique mon problème qui est le suivant:
j'ai fait un formulaire ou j'affiche sur des étiquettes des calculs pour des périodes données:ex: période 1: étiquette a... étiquette b ..
période 2: étiquette d=.. étiquette e=...
et période 3: étiquette g=.. ainsi de suite

je suis débutant access donc ma question comment générer à la suite du form automatiquement un tel graphique (pour chaque période en abcisse mettre les calculs dans les étiquettes en ordonné)
aucun tutoriel ne répond a mes questions à savoir quelles sont les fonctions qui le permettent donc si vous pouvez m'aider

Merci d'avance

penny.-

38 réponses

rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
4 avril 2006 à 12:05
Bon, il faut lire les messages!
dans l'exemple que tu me montres, il y a une erreur justement!

mauvais exemple :)

Bon, c'est parti :

Extrait de http://www.vbfrance.com/infomsg/ACCESS-2000-OU-97-0_695824.aspx, message du 23/03/2006 00:39, (ne tiens pas compte de ce qui est rayé):

"
1./ Configuration du projet VB pour DAO
2./ Implémentation de l'accès à la base de données
<STRIKE>3./ Conception/Réalisation des services
4./ Implémentation des services</STRIKE>

1./ Pour pouvoir accéder, à une base de données, à partir de <STRIKE>VB</STRIKE> VBA, via l'objet qui va bien (j'ai nommé DAO), il faut d'abord s'assurer que <STRIKE>VB</STRIKE> VBA sait que tu as besoin de cet objet. Donc, <STRIKE>avec un projet VB ouvert (feuille blanche, c'est mieux)</STRIKE>, dans le Visual Basic Editor( [ALT]+[F11] ), vas dans le menu Projet>>Références. Là, une fenêtre s'ouvre, contenant une liste remplie de références disponibles. Cherches Microsoft DAO, tu vas peut-être trouver 2.5/3.51, 3.51, et 3.6 (si ce n'est pas le cas, contactes Dalida, et demandes lui pourquoi, et comment, 9026 http://www.vbfrance.com/auteurdetail.aspx?ID=9026). Coches la 3.6 , et appuie sur le bouton OK. Ca y est, <STRIKE>VB</STRIKE> VBA sait que tu veux pouvoir accéder à une base de données, via l'objet DAO.

2./On va maintenant dire, à DAO, que l'on veut ouvrir la base de données. Ne t'attends pas à voir des tableaux et des fenêtres <STRIKE>tels que ce que te montrait le Gestionnaire de Données, ou ton Assistant</STRIKE>, tu ne verras qu'un appel de fonction, et une variable qui te diront que la base est ouverte."

Maintenant, extrait de http://www.vbfrance.com/infomsg/INSERER-DANS-TABLE-RECORDSET-0_702471.aspx, message du 30/03/2006 17:27:11 (ne tiens pas compte de ce qui est rayé):

"
Dim dbBaseCible As DAO.Database
Dim rsJeuCible As DAO.Recordset
<STRIKE>Dim fldTempSource As ADODB.Field</STRIKE>

<STRIKE>Après avoir ouvert la connexion ADODB, mais avant le While Not :
</STRIKE>
'affecte une référence à la base courante
Set dbBaseCible = CurrentDb
'ouvre la nouvelle table Access, à adapter
Set rsJeuCible = dbBaseCible.OpenRecordset("TableCible")

<STRIKE>Dans la boucle existante :
</STRIKE>
<STRIKE>'tant qu'il y a des réponses
While Not rsJeu.EOF</STRIKE>
'ajoute un enregistrement temporaire dans le jeu cible DAO
rsJeuCible.AddNew

<STRIKE>'pour chaque champ du jeu source </STRIKE><STRIKE>ADODB
</STRIKE><STRIKE> 'il faut impérativement qu'ils aient les mêmes nom, et types
For each fldTempSource In rsJeu.Fields</STRIKE>
<STRIKE>'affecte la valeur du champ source à la valeur du champ cible
rsJeuCible.Fields(fldTempSource.Name).Value = fldTempSource.Value</STRIKE>

'affecte la valeur du champ source à la valeur du champ cible,à adapter
rsJeuCible.Fields("NomChamp").Value = 12

<STRIKE>'champ suivant
Next fldTempSource</STRIKE>

'valide l'enregistrement temporaire
rsJeuCible.Update
'avance d'une réponse
rsJeu.MoveNext
<STRIKE> 'continue
Wend
</STRIKE>
'ferme le jeu et libère la référence
rsJeuCible.Close
Set rsJeuCible = Nothing
'ferme la base et libère la référence
<STRIKE>dbBaseCible.Close
</STRIKE> Set dbBaseCible = Nothing
"

C'est pas du "sur mesure" ça?
Bon, ça c'est le nécessaire pour ajouter une ligne dans une table (et d'ailleurs, je n'ai mis qu'un champ). Donc, en résumé, une fois la base ouverte, et le jeu d'enregistrements ouvert (Recordset), pour ajouter 1 ligne, il faut :
- faire un AddNew
- renseigner les Fields("xxx").value ' avec valeurs adaptées au type du champ
- faire un Update

PS : Attention, trop manger du VB rend pas trop équilibré !
à+


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
3
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
4 avril 2006 à 14:48
ce dont tu ne te doutes pas, c'est que je suis en train de vider ton compte en banque pendant que tu postes tes messages :) Il est là mon biz!

bon, pour ton graphique, je pense bien que oui, sinon pourquoi je te ferais faire tout ça?
normalement, avec l'assitant (qui bosse pour moi, faut savoir déléguer un peu), tu devrais arriver à mettre un graphique sur ton UserForm, et ce graphique pointera vers la table des valeurs calculées.
Ensuite, quand tu changeras les valeurs contenues dans cette table, le graphique les représentera comme il sait le faire (au pire, il faudra le raffraichir, mais chaque chose en son temps).

Bien sûr, pour qu'il reflète au mieux ce que tu souhaites lui faire refléter (pour qu'il te réflechisse quoi), il faut que ta table est une forme adaptée à ce qu'il sait manipuler.

Donc, mobilises tes neuronnes (y compris ceux qui sont partis à la manif), vas là et rappelles quand tu en es là.
à+

rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
3
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
4 avril 2006 à 16:45
et merci d'accepter la(les) réponse(s)


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
3
penny05 Messages postés 105 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 18 janvier 2007 2
3 avril 2006 à 11:04
enbricolant un peu j'ai ca mais tellement je trouve ca foireux que j'ai meme pas envi de compiler!!



Dim Graph As Chart



With ActiveWorkbook.Worksheets(1)
'nom des différentes tables
.Range("A1") = "périodes"
.Range("B1") = "MTBUR"
.Range("C1") = "MTBF"
'remplissage de la premiere table
.Range("A2") = "période M-12"
.Range("A3") = "période M-6"
.Range("A4") = "période M"

'remplissage de la table MTBUR
.Range("B2") = "Round((sommeh_12/ somme_ur_12), 3)"
.Range("B3") = "Round((sommeh_6 / somme_ur_6), 3)"
.Range("B4") = "Round((sommeh / somme_ur), 3)"

'remplissage de la table MTBF
.Range("C2") = "Round((sommeh_12 / somme_rmv_12), 3)"
.Range("C3") = "Round((sommeh_6 / somme_rmv_6), 3)"
.Range("C4") = "Round((sommeh / somme_rmv), 3)"


.Range("A:C").Columns.AutoFit
End With
Set Graph = Charts.Add
Graph.SetSourceData Worksheets(1).Range("A1:C4")
End Sub

et pour commencer il ne veut pas de mon graph as chart .
Que faire y'a t'il une autre alternative?

A+
1

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

Posez votre question
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
31 mars 2006 à 22:25
Bonsoir Penny,
alors, où en es-tu?
L'enregistreur de macro a-t-il parlé?

Tu auras peut-être noté, qu'en Excel, c'est plus facile, il suffit de faire pointer les séries du graphe sur des plages de référence de tableau.
Mais en Access, il te suffit d'organiser virtuellement (en mémoire donc) un tableau, et ça se passe très bien. C'est moins ergonomique pour les séries, mais, quand on stocke en mémoire, sur de nombreuses nombreuses données, l'affichage est quand même plus avantageux.

à+


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
0
penny05 Messages postés 105 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 18 janvier 2007 2
3 avril 2006 à 09:23
Bonjour!
J'ai regardé comment ca marchait sur excel pour m'en inspirer et voir comment ca marchait au niveau des graphes, c'est une bonne manière de voir comment cela se fait.
Donc j'ai commencé à voir sur access mais j'ai l'impression que le mschart n'est pas actif (erreur de syntaxe!?). Ensuite il faut je pense chargé un tableau mais étant donnée que mes valeurs sont calulés dois je creer une table pour les mettre?
Autant de questions que je me pose mais je te laisse répondre d'abord à celles ci!

A plus.
0
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
3 avril 2006 à 10:41
Salut penny,

mets un petit exemple de ton code. Ce que je t'ai conseillé avec l'enregistreur de macros n'est qu'une facilité de lecture du modèle objet, et de son utilisation. Par contre, tu as dû te rendre compte que la syntaxe pour accéder aux mêmes propriétés/méthodes n'est pas toujours la même, et surtout, si tu as utilisé une page de graphique, il faut transposer le code, car dans Access, le graphique est contenu, et situé sur formulaire. Et enfin, tu l'as compris, il n'est pas question dans Access de pointer vers des séries avec l'ergonomie d'Excel!

C'est pour ça qu'il faut mettre un petit exemple.

Maintenant, tu es peut-être en train de me dire que tu n'arrives pas à situer le contrôle sur ton UserForm? Si c'est ça, dis-le.

Pour tes valeurs, tu peux te contenter d'un tableau en mémoire. De plus, des valeurs calculées, ce n'est jamais bien utile de les stocker (puisqu'elles sont calculables, il vaut mieux stocker ce qui sert à les calculer)

à+


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
0
penny05 Messages postés 105 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 18 janvier 2007 2
3 avril 2006 à 10:47
C'est bien ca sur le formulaire j'ai cherché sur les autres controles mais je ne trouve pas celui spécifié "controle MS chart" qu'il faut placé sur le formulaire.

Ensuite une fois qu'on stocke sur des tableaux virtuels les données commetnles spécifier une table en abcisse l'autre en odro par exemple....
A+
0
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
3 avril 2006 à 11:27
Pour le contrôle, tu cherches bien :

"Microsoft Chart Control 6.0", cette chaine là, pas une autre?

cherches aussi si tu as "%windir%\System32\MSCHRT20.OCX"

sinon, il y a peut-être :

"Graphique Microsoft Office 9.0", mais je ne crois pas que ce soit le même.

sinon, il y en a dans le commerce, mais il y en a surtout dans domaine public.


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
0
penny05 Messages postés 105 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 18 janvier 2007 2
3 avril 2006 à 11:39
j'ai cherché et je ne trouve que
Graphique Microsoft Office 9.0 et microsoft directanimation structured graphics le chart control je vois pas .


Est ce normal ou suivant les versions dont on dispose?


si je ne l'ai pas comment faire?
0
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
3 avril 2006 à 11:53
vérifies dans Excel.

et sur ton disque, il n'y est pas?


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
0
penny05 Messages postés 105 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 18 janvier 2007 2
3 avril 2006 à 12:47
Non
sur excel j'ai que le SAP chart control
et sur le disque quand j'effectue une recherche j'ai tout et n'importe quoi sauf ca
Dois je l'installer sur le pc ce composant ou le microsoft graphique office peut il faire l'affaire.
0
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
3 avril 2006 à 12:50
Bon, bon,

essaies celui d'Office alors. Recommences la macro avec Excel pour t'aider.

à+


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
0
penny05 Messages postés 105 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 18 janvier 2007 2
3 avril 2006 à 13:10
sur excel le microsoft graphique marche j'ai vu le code vb.
comment le faire sur access
ActiveSheet.OLEObjects.Add(ClassType:="MSGraph.Chart.8", Link:=False, _
DisplayAsIcon:=False).Activate

sauf que jai une erreur comme quoi variable active sheet non défini.
0
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
3 avril 2006 à 13:44
D'ac,
pas d' ActiveSheet dans Access, on est d'accord? (pas de feuille de calcul dans Access)
pas d'OLEObject dans UserForm.
je n'ai pas encore trouvé comment rajouter un contrôle dynamiquement (je cherche, si c'est nécessaire).

Dans autres contrôles, cherches "Graphique Microsoft Graph 2000"


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
0
penny05 Messages postés 105 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 18 janvier 2007 2
3 avril 2006 à 14:07
Désolé de te dire qu'il ya pas !
Alternative?
0
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
3 avril 2006 à 14:15
Cherches MSGraph.Chart.8 dans Regedit.
Que trouves-tu comme valeur par défaut pour la clé parente ({00020800-0000-0000-C000-000000000046})? C'est cette valeur que tu devrais voir dans autres contrôles.
Sinon, cherches MSChart20Lib.MSChart.2, ou MSChart, ou Chart.
Et dis-moi ce que tu trouves.


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
0
penny05 Messages postés 105 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 18 janvier 2007 2
3 avril 2006 à 14:32
Ouh la qu'est ce que regedit ou je trouve ca pour chercher msgraph.chart.8?? dans autres controles? si tu peux etre plus clair stp.
0
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
3 avril 2006 à 14:40
En fait, je l'ai déjà expliqué à plusieurs membres, et je ne me rappelle jamais à qui.
Donc,
http://www.vbfrance.com/infomsg/CREER-COMBOBOX-AUTOMATIQUEMENT-0_699158.aspx, message de 12:31, il y a tout!

allez, courage, un peu de nerf que diable!


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
0
penny05 Messages postés 105 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 18 janvier 2007 2
3 avril 2006 à 14:40
c'est bon j'ai trouvé la valeur par défaut de mschart 8 et la valeur par défaut est :
{00020803-0000-0000-C000-000000000046}
je le change par celui ke tu m'as donné?
0
Rejoignez-nous