penny05
Messages postés105Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention18 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
"
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."
"
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>
rvblog
Messages postés792Date d'inscriptionvendredi 4 mars 2005StatutMembreDernière intervention12 juin 20127 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>
rvblog
Messages postés792Date d'inscriptionvendredi 4 mars 2005StatutMembreDernière intervention12 juin 20127 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>
penny05
Messages postés105Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention18 janvier 20072 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!
rvblog
Messages postés792Date d'inscriptionvendredi 4 mars 2005StatutMembreDernière intervention12 juin 20127 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>
penny05
Messages postés105Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention18 janvier 20072 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+
penny05
Messages postés105Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention18 janvier 20072 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.
penny05
Messages postés105Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention18 janvier 20072 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.
rvblog
Messages postés792Date d'inscriptionvendredi 4 mars 2005StatutMembreDernière intervention12 juin 20127 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>
rvblog
Messages postés792Date d'inscriptionvendredi 4 mars 2005StatutMembreDernière intervention12 juin 20127 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>
penny05
Messages postés105Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention18 janvier 20072 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é?