Zones d'excel modifiées dans access vba

[Résolu]
Signaler
Messages postés
135
Date d'inscription
vendredi 17 novembre 2000
Statut
Membre
Dernière intervention
12 août 2008
-
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
-
bonjour a tous.


Je voudrais savoir comment se servir des zones que l'on peut définir sous excel depuis access. Je m'explique:
J'ai maintenant exporté mes données dans une feuille excel. Dans la colonne A, j'ai mis des libellés du type A1 "Frites", A2 "Moules" ...Dans la colonne B, j'ai les valeurs correspondantes : B1 "50", B2 "25" ...

Je souhaite définir une zone qui prendra toutes mes données et me servir de celle ci comme source de données pour un graphique. Alors c'est simple, on sélectionne la zone, on la nomme, et on définit cette zone comme source pour le graph... Mais non!

En effet le nombre d'ingrédients peut changer, ce qui veut dire que l'on pourra passer de 3 à 5 lignes, et il faudra donc redéfinir la zone a chaque fois... Je désire donc automatiser ceci pendant l'appel et l'envoi de données dans le classeur excel.

Regardons ensemble mon code :

Dim ExApp As Excel.Application
Dim i As Integer

Set ExApp = CreateObject("Excel.Application")
ExApp.Visible = True
Set ExDoc1 = ExApp.Workbooks.Add("F:\truite\Statistiques.xls")

RstReqApt.MoveFirst
i = 1



Do While Not RstReqApt.EOF

With ExApp1.Sheets("statsingredients")
.Cells(i, 1).Value = RstReqApt("ingredient")
.Cells(i, 2).Value = RstReqApt("Nombre")
End With

i = i + 1
RstReqApt.MoveNext

Loop

J'ai donc pensé qu'il pourrait etre interressant de récupérer la valeur de i, car elle donne le nombre exact de lignes. J'ai créé manuellement une zone appelée "Selection" dans excel qui prend (A1:B6), donc 6 ingrédients. C'est donc la zone qui est prise en compte pour la création du graphique.

Voila, il faudrait pouvoir modifier les dimensions de cette zone en fonction de la valeur de i. Comment faire?

Merci d'avance.

7 réponses

Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
7
Je crois avoir trouvé ce que tu cherches, pour obtenir la même chose à partir d'Acces.

Hypothèses de départ :
Quand ton bout de code se termine, toutes les données sont mises dans le fichier Excel, toujours dans les 2 mêmes colones (Le nb de colones ne changent jamais et ce sont les colones A et B)
La première données est positionnée en A1.
Il y a donc i données d'affichées à chaque fois.

Comme je le disais dans le post précédent, le plus simple est d'avoir un fichier Excel modèle avec un premier graphique déjà fait sur quelques données (par ex. A1:B2).

Je modifierai juste un tout petit peu ton code, au niveau de l'ouverture du fichier Excel.
Si je comprends bien, tu ouvres un nouveau fichier Excel et tu lui colles une feuille de Stats. Moi, je vais ouvrir le fichier modèle avec le graphique déjà crée (mon fichier Excel s'appelle Test.xls et il se trouve au même endroit que la base Accès).

'Définition des variables
Dim Chemin as String
Dim Temp As String
Dim ExApp As Excel.Application

'Définition du chemin du fichier Excel
Chemin = Application.CurrentProject.Path & "\Test.xls"

'Ouverture du fichier Excel
Set ExApp = CreateObject("Excel.Application")
ExApp.Visible = True
Set ExDoc1 = ExApp.Workbooks.Open(Chemin)

'A partir de là, tu recolles ton bout de code pour alimenter le fichier Excel avec tes données
...

'Mise à jour du graphique.

'Dernière ligne de la zone de sélection (si commence en A5)
Temp = 1 + i - 1 'Où le premier chiffre est la première ligne de ton tableau de données
'Définition de la zone de sélection
Temp = "A5:B" & Temp
'Modification de la zone de sélection
ExDoc1.Worksheets("Feuil1").ChartObjects("Graphique 2").Activate 'Bien entendu, à toi d'adapter le nom de ta feuille et du graphique
ActiveChart.ChartArea.Select
ActiveChart.SetSourceData Source:=Sheets("Feuil1").Range(Temp), PlotBy:= _
xlColumns

Voilà, ça marche chez moi, il n'y a donc pas de raison que ça ne fonctionne pas ailleurs ^^
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 112 internautes nous ont dit merci ce mois-ci

Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
7
Donc, si j'ai bien compris. Tu importes 2 champs d'une table/requête Acces dans les colonnes A et B de ton fichier Excel. Et le nombre d'enregistrements est variable.

Ce que je ferai.
Je dessinerai donc le graphique qui m'intéresse à partir d'un premier import, par exemple tes données en A1:B6.
Ce sera la graphique 1 dans ton fichier.

Dans une cellule au choix (pour mon ex., je mets en "E1"), je mettrai la formule "=NBVAL(A:A)"
Cette case te donnera donc à chaque import de ta base accès le nombre d'enregistrements (Bien entendu, il ne faudra pas que cette colonne serve à autre chose. Ou alors, tu délimites un nb maximum de données importée au delà duquel ton graphique ne se mettra plus à jour ("=NBVAL(A1:A20)" par exemple).

Voilà, tu as tout.
Plus qu'à créer un bouton Modification du graphe (ou à coller le code directement dans ton code d'import d'accès, je ne sais pas comment tu le gères)

'Définition variable
Dim Temp as String

'Délimitation de la zone du graphique (on sait que ça commenc toujours en A1)
Temp = range("E1").valueTemp 1 + Cint(Temp) -1 'Je te mets le détail, parce que si ton tableau commençait en A10 par exemple au lieu de A1, la formule deviendrait Temp 10 + Cint(temp) - 1. Le but est de définir quelle ligne contient la dernière donnée
Temp = "A1:B" & Temp

'Modification du graphique
ActiveSheet.ChartObjects("Graphique 1").Activate
ActiveChart.SeriesCollection(1).Select
ActiveChart.SetSourceData Source:=Sheets("Feuil1").Range(Temp), PlotBy:= _
xlColumns

Et voilà, c'est tout ^^
Ca, ça marche si tu gères ton import de données Access à partir d'Excel (en gros, un bouton qui génère l'assistant d'import de Données Externe, et tu colles ce bout de code à la fin). Si tu pars d'Access vers Excel, j'ai peur que ce code pose quelques soucis.
Messages postés
135
Date d'inscription
vendredi 17 novembre 2000
Statut
Membre
Dernière intervention
12 août 2008

Oui pas mal comme solution mais voila, comme tu l'as dit, je pars d'access pour aller sous excel.
J'ai donc un formulaire avec un bouton "Statistiques" et lorsque je clique dessus, le code que j'ai ecrit plus haut s'exécute. Et c'est dans ce code que j'aimerais définir la zone en question pour que le formulaire s'affiche dès l'ouverture d'excel.

Ca doit etre un truc du genre Range("A & i ; B & i") mais j'en sais rien en fait !
Messages postés
135
Date d'inscription
vendredi 17 novembre 2000
Statut
Membre
Dernière intervention
12 août 2008

Impeccable! je vais essayer ca desuite et je te met répponse acceptée d'emblée parce que t'as cerné mon problème, et tu as su y répondre!

Merci encore!
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
7
Mais de rien
Mais je m'excuse pour la petite faute, je viens de voir ça, rha ces satanés copier/coller
Dans le bout de code qui suit, il faut bien entendu que tu remplaces les A5 par des A1 dans ton cas (dans mon fichier de test, mon graphique commençait en A5 et j'ai oublié de tout corriger )

'Dernière ligne de la zone de sélection (si commence en A1)
Temp = 1 + i - 1 'Où le premier chiffre est la première ligne de ton tableau de données
'Définition de la zone de sélection
Temp = "A1:B" & Temp
Messages postés
62
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
19 août 2005
7
Bonjour,
Comme vous j'essaie de travailler sur une feuille Excel depuis Access. J'ai donc essayé de m'inspirer du code écrit plus haut , sauf que je rencontre un problème dès la première ligne de code :


Dim ExApp As Excel.Application

Basic ne reconnait pas Excel.Application.


Est-ce que l'un d'entre vous aurait une idée sur ce problème ?


Merci.
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
7
Il faut juste que tu penses à référencer Excel dans ta base de données ACCESS.
Pour cela, dans l'éditeur VB, il faut aller dans le menu Outils\Références et cocher la case Microsoft Excel 9.0 Object Library