| générer tableau excel a partir donées access par jack |
mardi 9 août 2005 à 14:48:50 |
Configuration: access et excel 2000
Bonjour,
Voilà, j'ai lu ton précédent message et a ce que je peux voir, tu n'as pas trouver pointure a ton pied !!! Donc tu as des tables sous Access que tu veux exporter sous Excel. Alors première étape, créer une requête qui te fournira les éléments voulu. Sous ACCESS : //Créer une nouvelle requête à l'aide de l'assistant //Sélectionner la(es) table(s) nécessaire(s) //Sélectionner le(s) champs à faire afficher N.B. Même une fois créé, tu pourra rajouter des tables/champs dans la requête. De plus il est aussi possible de modifier la requête par programmation sur des actions de l'utilisateur. // Menu Fichier / Exporter / Format XLS Il est fort probable qu'une mise en page soit nécessaire sous Excel, mais allons y un pas à la fois. N.B. Il est aussi fort possible qu'un formulaire accroché sur la requête fasse aussi l'affaire. Pour l'instant, il te faut créer une requête. Lupin ~L'essentiel est invisible pour les yeux~ ~On ne voit bien qu'avec le coeur~
|
c'est faisable utiliser null et not null
elle est pas belle, la vie ?
|
re:
en effet, c'est possible. En fait peu importe la structure que tu veux, si tu as les données, le reste n'est qu'une mise en page. Une requête peut pointer dans plusieurs table et sur plusieurs champs, a toi de choisir les données recherchées. Tu pourrais aussi construire ton tableau Excel avec plus d'une requête, en exportant plus d'une fois et en fusionnant les fichiers Excel généré. Il y a toute une panoplie de possibilitées. Lupin ~L'essentiel est invisible pour les yeux~ ~On ne voit bien qu'avec le coeur~
|
re:
oui c'est possible en VBA, on peut faire ce que l'on veut ! il y a plein d'exemples pour piloter Excel depuis VB/VBA/VBS sur le net ! en voici un : http://www.oricom.ca/lupin/document/excelvbs.txt Lupin ~L'essentiel est invisible pour les yeux~ ~On ne voit bien qu'avec le coeur~
|
Salut,
Voici donc un exemple de code a accrocher sur un bouton d'un formulaire. Tu créé une routine dans la section [Module], sur un formulaire tu place un bouton qui est accroché sur une procédure événementiel, et dans cette procédure, tu appelle la routine créé.
Sub InitialiseExcel()
Dim xlApp, xlBook, xlRange As Variant 'Objets classeur
Dim xlWks, iRows, iCols, iRotate As Variant 'Objets feuille
Dim FichierXL As String
Dim Boucle, Cmpt As Integer
'
FichierXL = "C:\MonFichier.xls"
'Création de l'objet Excel (main mise sur !)
Set xlApp = CreateObject("Excel.Application")
'Création de l'objet [Fichier Excel]
Set xlBook = xlApp.Workbooks.Open(FichierXL)
'Création de l'objet [Feuille] du classeur Excel.
Set xlWks = xlBook.Worksheets(1)
'Création de la plage permise dans la feuille Excel.
Set xlRange = xlWks.Range("A1:A65535")
DoCmd.GoToRecord , , acLast
Cmpt = Forms![MonFormulaire].Recordset.RecordCount
DoCmd.GoToRecord , , acFirst
For Boucle = 1 To Cmpt
xlRange.Cells(Boucle, 1).Value = Forms![MonFormulaire].[Champs1]
xlRange.Cells(Boucle, 2).Value = Forms![MonFormulaire].[Champs2]
xlRange.Cells(Boucle, 3).Value = Forms![MonFormulaire].[Champs3]
DoCmd.GoToRecord , , acNext
Next Boucle
DoCmd.GoToRecord , , acFirst
xlApp.Visible = True
xlWks.Activate
xlRange.Cells(1, 1).Select
xlApp.DisplayAlerts = False
xlBook.SaveAs FichierXL
xlApp.Quit
xlApp.DisplayAlerts = True
Set xlRange = Nothing
Set xlWks = Nothing
Set xlBook = Nothing
Set xlApp = Nothing
MsgBox "Fin du travail"
End Sub
Voilà, ceci devrait te fournir un bon point de départ ! Lupin ~L'essentiel est invisible pour les yeux~ ~On ne voit bien qu'avec le coeur~
|
Salut,
J'ai créé une table access que j'ai nommé [ MaTable ], ayant pour champs [ Champs1 - Champs2 - Champs3 ]. J'ai créé une requête que j'ai nommé [ MaRequete ], celle-ci récupère tous les enregistrements de ma table. J'ai créé un formulaire que j'ai nommé [ MonFormulaire ]. Donc, le formulaire pointe sur la requête et la requête pointe sur la table. J'ai placé un bouton sur mon formulaire que j'ai accroché a une procédure événementiel. Private Sub cmd_Execute_Click() Call Fonctions.InitialiseExcel End Sub'Afin de renseigner la propriété [RecordCount] DoCmd.GoToRecord , , acLast 'Capture le nombre d'enregistrement Cmpt = Forms![MonFormulaire].Recordset.RecordCount 'Retourne au premier enregistrement DoCmd.GoToRecord , , acFirst ' Boucle sur tous les enregistrements For Boucle = 1 To Cmpt 'Place en position [Boucle,1] la valeur du premier champs xlRange.Cells(Boucle, 1).Value = Forms![MonFormulaire].[Champs1] 'Place en position [Boucle,1] la valeur du second champs xlRange.Cells(Boucle, 2).Value = Forms![MonFormulaire].[Champs2] 'Place en position [Boucle,1] la valeur du troisième champs xlRange.Cells(Boucle, 3).Value = Forms![MonFormulaire].[Champs3] 'Enregistrement suivant DoCmd.GoToRecord , , acNext Next Boucle 'Retourne au premier enregistrement DoCmd.GoToRecord , , acFirst 'Fermeture de Excel 'Rend Excel visible xlApp.Visible = True 'Active le classeur xlWks.Activate 'Positionnement en [ A1 ] xlRange.Cells(1, 1).Select 'Message d'erreur en arrêt xlApp.DisplayAlerts = False 'Sauvegarde du fichier Excel créé. xlBook.SaveAs FichierXL 'Ferme l'application Excel xlApp.Quit 'Message d'erreur actif xlApp.DisplayAlerts = True 'Libération des variables Set xlRange = Nothing Set xlWks = Nothing Set xlBook = Nothing Set xlApp = Nothing MsgBox "Fin du travail"
|
re:
Sous acces, lorsque tu ouvre ta base, tu vois les objets suivants dans la colonne de gauche. Tables Requetes Formulaires États Pages Macros Modules Rend toi à la section [ Modules ] Crée un nouveau module et colle-y la procédure Sub InitialiseExcel() Maintenant, par défaut le nom du nouveau module est [ Module1 ], soit tu le renomme, soit tu appelleras la procédure par : Call Module1.InitialiseExcel dans mon exemple, je renommer le module par [ Fonctions ] d'ou mon exemple : Call Fonctions.InitialiseExcel maintenant, dans ton formulaire, si tu as rajouter le bouton, dans les propriétés [ OnClic ] -> procédure événementiel -> tu y place : Call Module1.InitialiseExcel ou Call Fonctions.InitialiseExcel ça devrait tourner comme ça! Lupin ~L'essentiel est invisible pour les yeux~ ~On ne voit bien qu'avec le coeur~ |
Je commence a comprendre doucement mais surment!
J'ai créer donc le module que tu m'as di mais lorsque je clic sur le bouton, il ne me reconait pa les lignes de code suivante : DoCmd.GoToRecord , , acNext Next Boucle 'Retourne au premier enregistrement en supriman "Next Boucle 'Retourne au premier enregistrement" cela marche! 'Libération des variables Set xlRange = Nothing Set xlWks = Nothing Set xlBook = Nothing Set xlApp = Nothing la ligne ci dessus non plus n'est pas reconnu... Ta une idée de ce qui ne va pa? (moi pa du tt lol) Merci bcq!! |
re:
j'ai déposé l'exemple que j'ai construis ici : http://www.oricom.ca/lupin/document/piloterexcel.zip Regarde le tout, chez moi ça fonctionne nickel ! Lupin ~L'essentiel est invisible pour les yeux~ ~On ne voit bien qu'avec le coeur~ |
Mici bcq ca marche!
Sauf que je voudrais que en appuyant sur le bouton cela me crée une nouvelle feuille dans le fichier excel défini (pour comparer la feuille ou il y a le tableau initial avec la nouvelle feuille créée en fonction des données entrées par l'utilisateur) Alor que la ca minssere tout dans la mm feuille! Quelle ligne de code dois-je rajouter pour faire ceci? Mici de ton aide |
re:
Pour ajouter une feuille a chaque exécution : Modifier les lignes suivantes : 'Création de l'objet [Feuille] du classeur Excel. Set xlWks = xlBook.Worksheets(1) par : 'Création de l'objet [Feuille] du classeur Excel. xlApp.ActiveWorkbook.Worksheets.Add Set xlWks = xlBook.ActiveSheet Lupin ~L'essentiel est invisible pour les yeux~ ~On ne voit bien qu'avec le coeur~ |
Slt!
Merci pour ton code ca marche nickel c super! Mais j'ai encore quelque prob : Comen faire pour laisser ouvert le fichier excel apres avoir cliqué sur le bouton? (car actuelement apres avoir cliqué sur le bouton le tableau est créer mé le fichier excel se referme et je dois louvrir manuelement) et j'ai un probleme o niveau de la mise en page du tableau, je voudrais que le Champs1 forme la 1ere colone, le Champs2 la 1er ligne et le champs3 le centre de mon tableau (reste)... Comment pourrais-je faire ceci automatiquement (en cliquant sur mon bouton) ? (actuelement ca met champs1 1ere colone; champs2 2eme col; champs3 3eme col) Merci de ton aide (et dsl detre ossi nul en vba lol) a+ |
Salut,
Pour la fermeture , ça se passe ici : 'Fermeture de Excel 'Rend Excel visible xlApp.Visible = True 'Active le classeur xlWks.Activate 'Positionnement en [ A1 ] xlRange.Cells(1, 1).Select 'Message d'erreur en arrêt xlApp.DisplayAlerts = False 'Sauvegarde du fichier Excel créé. xlBook.SaveAs FichierXL 'Ferme l'application Excel xlApp.Quit 'Message d'erreur actif xlApp.DisplayAlerts = True La ligne qui ferme Excel est la suivante : 'Ferme l'application Excel xlApp.Quit Pour la mise en page, je ne peux te pondre ça la tout de suite. Je te rapporte quelques lignes plus tard ! Lupin ~L'essentiel est invisible pour les yeux~ ~On ne voit bien qu'avec le coeur~ |
ok merci (c t tt con le truc pour garder le fichier excel ouvert!) jcomprend mieu mintenan!!
Pour la disposition du tableau (champs1 1ere col; champs2 2eme col; champs 3 le milieu du tablo), j'arrive a le faire en manuel (formulaire-nouvo-Assistant tableau croisé dynamik) mais ce que je veux c automatiser cela ; dc par code ce que jarive pas snif! Mici bcq de ton aide! +++ |
Re:
la, je suis pas sur ! En somme une fois le tableau Excel créé, tu crées un tableau dynamique croisé avec le résultat et cette mise en page te convient ? bien entendu, il est possible par VBA de créer un tableau dynamique croisé. Est-ce bien cela, la création d'un tableau dynamique croisé fera ce que tu cherche ? Lupin ~L'essentiel est invisible pour les yeux~ ~On ne voit bien qu'avec le coeur~ |
Ben en fait faire un tableau croisé dynamique me permet davoir un tableau avec la mise en forme que je souhaite ( mé je dois assigner manuelemen chacun de mes 3 champs dans la 1ere ligne, 1ere colone et o centre du tableau) dc manuelemen jarive a faire cke je veu...
Cependant j'aimerais automatiser cete tache c a dire par code dire que le champs1 je veux kil constitue la 1ere colone de mon tableau, le champs2 la 1ere ligne et le champs3 le cendre de mon tableau. Tu as compris ou je veu en venir? C possible de faire cela par code? Merci de ton aide... |
re:
voici un exemple :
Sub InitialiseExcel()
Dim xlApp, xlBook, xlRange As Variant 'Objets classeur
Dim xlWks, iRows, iCols, iRotate As Variant 'Objets feuille
Dim FichierXL As String
Dim Boucle, Cmpt As Integer
'
FichierXL = "C:\MonFichier.xls"
'Création de l'objet Excel (main mise sur !)
Set xlApp = CreateObject("Excel.Application")
'Création de l'objet [Fichier Excel]
Set xlBook = xlApp.Workbooks.Open(FichierXL)
'Création de l'objet [Feuille] du classeur Excel.
xlApp.ActiveWorkbook.Worksheets.Add
Set xlWks = xlBook.ActiveSheet
'Création de la plage permise dans la feuille Excel.
Set xlRange = xlWks.Range("A1:A65535")
DoCmd.GoToRecord , , acLast
Cmpt = Forms![MonFormulaire].Recordset.RecordCount
DoCmd.GoToRecord , , acFirst
For Boucle = 1 To Cmpt
xlRange.Cells((Boucle + 1), 1).Value = Forms![MonFormulaire].[Champs1]
DoCmd.GoToRecord , , acNext
Next Boucle
DoCmd.GoToRecord , , acFirst
For Boucle = 1 To Cmpt
xlRange.Cells(1, (Boucle + 1)).Value = Forms![MonFormulaire].[Champs2]
DoCmd.GoToRecord , , acNext
Next Boucle
DoCmd.GoToRecord , , acFirst
For Boucle = 1 To Cmpt
xlRange.Cells((Boucle + 1), (Boucle + 1)).Value = Forms![MonFormulaire].[Champs3]
DoCmd.GoToRecord , , acNext
Next Boucle
DoCmd.GoToRecord , , acFirst
xlApp.Visible = True
xlWks.Activate
xlRange.Cells(1, 1).Select
xlApp.DisplayAlerts = False
xlBook.SaveAs FichierXL
'xlApp.Quit
xlApp.DisplayAlerts = True
Set xlRange = Nothing
Set xlWks = Nothing
Set xlBook = Nothing
Set xlApp = Nothing
MsgBox "Fin du travail"
End Sub
Lupin ~L'essentiel est invisible pour les yeux~ ~On ne voit bien qu'avec le coeur~ |