Générer tableau excel a partir donées access

jack -  
 nours -
Bonjour à tous !
J’ai un tableau sous excel que j’ai inséré dans access grace a plusieur tables .
Mon probleme est que je n’arrive pas a récuper toutes les données de mes tables et les retransférer sous excel et donc reformer mon tableau initial…(sachant que j’ai certains champs vides). Il faudrait que je mette un champs d’une table en colonne ; un champ comme 1ere ligne ; et le reste dans mon tableau !
Quelqu’un pourrait-il m’aider ?
Merci d’avance de me repondre… !
Configuration: access et excel 2000

22 réponses

  • 1
  • 2
  1. Utilisateur anonyme
     
    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
    1
  2. Utilisateur anonyme
     
    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

    0
    1. jack
       
      Je vais essayer mais le prob c que je veu les enregistremen d'un champ précis d'une de mes tables ds ma 1ere ligne de mon tableau ; et mm choz je veu ossi les enregistremen d'un champ précis d'une autre table ds la 1ere colone et le reste des données ds les différentes cases de ce tableau...
      Je c pa si tu c faire sa keske ten pense c faisable?
      mici de ton aide
      0
  3. random Messages postés 1612 Statut Membre 155
     
    c'est faisable utiliser null et not null
    0
    1. jack
       
      je v essayer merci bcq!
      0
  4. Utilisateur anonyme
     
    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
    0
    1. jack
       
      Ok merci j'ai bien compris!
      néanmoins, apres avoir créer les requetes, je les exporte sous excel mais cela me crée un tableau identique a la requete. Je c que c un probleme de mise en page ; mais en fait ce que je voudrais c générer mon tableau excel directement com je le veux (sans avoir besoin de faire de mise en page sous excel).
      Grace a un bouton, envoyer directement sous excel un champ d'une table comme 1ere ligne, un autre comme 1ere colone ; et toutes les données d'une autre table dans ce tableau (les champs que je veux mettre en 1ere Ligne et 1ere Colonne figure dans cette table ce qui me garanti la cohérence des informations)

      tu penses que c faisable ce que je veux? ("automatiser" la création du tableau excel) Il faut surement créer un code en vba non?

      Merci de ton aide...a+
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Utilisateur anonyme
     
    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
    0
    1. jack
       
      Slt! j'ai un peu regarder le code que tu m'a donné mais je n'ai pas tout compris...(jsui novice en vba!)
      Pourrais tu m'expliquer plus clairement coment je pourrais programmer un bouton en vba qui me construit un tableau sous excel en fonction de différents champs de plusieurs tables?
      (Dire par code qu'un champ sera la 1ere colonne, un autre la 1ere ligne, ...)
      et comme j'ai deja un tableau du mm type que je veux sous excel, c'est possible d'inserer dans le meme fichier (sur une autre feuille excel) les données que j'ai sous access? (de facon a pouvoir comparer le tableau initial au tableau final directement)

      Mici d'avance de ton aide a+
      0
  7. Utilisateur anonyme
     
    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
    0
    1. jack
       
      Slt! J'ai bien regarder le code que tu m'as envoyé et il y a une partie que je n'ai pas bien comprise :

      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"

      J'ai pas bien compris ce que cela fait...Le "forms" c le nom de la table? le "[MonFormulaire]" c le formulaire ou on entre les données dans la table?et les champs st les champs que l'on va utiliser pour former le tableau sous excel?

      Tu pourrais m'expliquer tout ceci stp?

      Mici d'avance a+
      0
  8. Utilisateur anonyme
     
    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" 
    


    Lupin
    </pre>
    0
    1. jack
       
      J'ai fait exactement come toi avec les mm nom pr tester et sa ne marche pas...Il ne me reconait pas le "Call Fonctions.InitialiseExcel" et je c pa trop ce que cela signifie daileur!

      Dans le bouton, j'ai entrer le code la :

      Private Sub cmd_Execute_Click()
      Call Fonctions.InitialiseExcel

      End Sub

      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:\WINDOWS\Bureau\Maintenance\PréventifMill1bis2.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")


      '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"

      End Sub

      Tu vois ce qui ne vas pa? (je debute en vba dc je compren pa gd chose lol)

      Merci de ton aide...
      0
  9. Utilisateur anonyme
     
    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
    0
  10. jack
     
    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!!
    0
  11. jack
     
    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
    0
  12. Utilisateur anonyme
     
    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
    0
  13. jack
     
    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+
    0
  14. Utilisateur anonyme
     
    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
    0
  15. jack
     
    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!
    +++
    0
  16. Utilisateur anonyme
     
    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
    0
  17. jack
     
    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...
    0
  18. jack
     
    Slt! merci pour ton code il marche bien, c t exactement ce que javé besoin! Mais il reste n derniere petit détail :
    en fait dans mon champs2 joré une série de chiffre (de 1 a 52) et je voudrais que lorsqu'on crée le tableau, les différents chiffres soient classés par ordre croissan...
    C possible? Quesque t'en pense?
    Merci de ton aide +++
    0
  19. jack
     
    Hello! en testant mon appli access je me suis rendu compte d'un probleme : en fait il est possible qu'il y é plusieur fois les mm valeur dans le champs1 et le champs2 , et que seule la valeur du champs3 différe...
    Quand je génére le tableau sous excel, il me rajoute une ligne lorsque les champs1 et 2 st les mm (cki me fait un tableau un peu fouilli)
    Tout ceci, c'est parce que mon champs1 c le num de la semaine ; le champs2 un travail précis et le champs3 une case a cocher (qd le travail é fait). Or, il peu arriver qu'un mm travail soit fait a plusieurs semaines (ex sem 1-15-50) dc il faudrai que lorsque je génére le tableau sous excel, dans le k ou un travail a été fait plusieur fois a plusieur semaine d'intervalle que cela reste sur une ligne (ex: semaine1 5 15
    changement charbons moteur oui oui oui

    Avez vous compris? Suis je assez clair?

    Es-il possible de remédier a ce probleme?

    Merci de votre aide
    0
  20. Utilisateur anonyme
     
    Salut,

    de simple requête dans access te permettrons de gérer
    tout ça. Ordre croissant, dédoublement de valeur !

    en fait je ne vais pas coder tout ton appli. Je te donne des
    exemples pour te mettre sur la piste mais je ne peux faire
    le travail pour toi !

    Lupin
    0
  • 1
  • 2