Access download excel ?

Bonjour à tous,

Qqun saurait-il comment downloader un report sur un template (modèle) d'excel.

pour pouvoir ainsi avoir les bons noms des champs et les colonnes dans le bon ordre et un titre sur ma feuille excel.
dites moi si vous n'avez pas tout compris mon problême.

Merci d'avance et joyeuse fêtes de fin d'année

Thibal

8 réponses

  • Votes
  • Date
  • Date décroissante
  1. salut Thibal_jam,

    ça va peut-être t'aider (si j'ai bien compris ton pb) :

    Dim objConn As Connection
    Dim objRS As Recordset
    Dim wbkClasseur As Workbook
    Dim strSQL As String, strFCR As String
    Dim lngLigne As Long, lngIndex As Long, lngNbFields As Long, lngCount As Long
    Dim intCell As Integer

    On Error GoTo Err_

    ' definition de la chaine de connexion
    Application.StatusBar = "Connection à la base..."
    Set objConn = New Connection
    objConn.ConnectionString = CONST_BDOTC_PROD
    ' ouverture de la connexion
    objConn.Open

    Set wbkClasseur = Workbooks.Add
    ' détruire les feuilles inutiles
    Do Until wbkClasseur.Sheets.Count = 1
    wbkClasseur.Sheets(wbkClasseur.Sheets.Count).Delete
    Loop

    strSQL = "SELECT * FROM tfcrcrm ORDER BY nomfcr"
    Set objRS = New Recordset
    Application.StatusBar = "Lancer la requête..."
    objRS.Open strSQL, objConn
    lngLigne = 1
    lngNbFields = objRS.Fields.Count - 1
    ' écriture les noms des champs renvoyés dans la requête
    For lngIndex = 0 To lngNbFields
    Cells(1, lngIndex + 1).Value = objRS.Fields(lngIndex).Name
    Next
    lngLigne = lngLigne + 1
    ' écriture du recordset dans la feuille
    Do While Not objRS.EOF
    Application.StatusBar = "Ecriture du recordset... (enr #" & lngLigne & ")"
    For lngIndex = 0 To lngNbFields
    Cells(lngLigne, lngIndex + 1).Value = objRS(lngIndex).Value
    Next
    lngLigne = lngLigne + 1
    objRS.MoveNext
    Loop
    lngCount = objRS.RecordCount
    objRS.Close
    Set objRS = Nothing: Set objConn = Nothing: Set wbkClasseur = Nothing

    A+,
    Kobaya.
    1. yes merci Kobaya,

      Mais en faite j'ai déja fait une grande partie du boulo:

      stDocName = "R_reports"

      DoCmd.OpenReport stDocName, acViewPreview, , mareq
      mareq me permet de poser une clause where a mon report.

      ensuite je fais le download excel
      DoCmd.OutputTo acReport, stDocName, acFormatXLS

      et je ferme le report Excel
      DoCmd.Close

      je sais k'on peut travailler avec un template

      DoCmd.OutputTo acReport, stDocName, acFormatXLS,,, "nom template.xls"

      mais il l'ecrase et le remplace je sais pas pourquoi.peut tu m'aider?

      ou m'expliquer comment utiliser ton code si c'est ça la solution

      encore merci

      Thibal
      1. salut Thibal,

        je reviens sur ce post : si le format des colonnes de ton fichier Excel ne change pas, je pense qu'il vaut mieux que tu utilises la fonction d'importation du format Excel dans Access. Si je me rappelle bien, ça doit donner quelquechose comme DocCmd.ImportExcelFile arg1,arg2,etc...

        il faudrait que je trouve un peu de temps quand je suis à la maison, le soir, pour te donner le code VBA exact dans ACCESS...

        A+,
        Kobaya.
    2. rebonjour
      je suis désolé mais j'aurais une deuxième question :

      comment loader automatiquement un fichier Excel qui n'aura pas tjs le meme nb de ligne mais qui aura tjs les memes colonnes

      merci d'avance pour vos réponses

      Thibal
      1. je n'ai plus Access sur mon poste... Peut-être y-a-t-il une commande Access qui te permettra de charger une feuille Excel dans une table, quel que soit le nombre de lignes. Sinon, il faut faire une boucle du style :

        Do
        ' ici tu fais ton traitement

        ' ligne suivante
        Activecell.Offset(1, 0).Select
        Loop Until Activecell.Value = ""

        A+,
        Kobaya.
    3. merci bien

      ok je vais essayer ça

      par traitement tu entends juste copier les cellules et les coller dans excel.

      ou plutot utiliser un insert qui va rechercher les valeurs dans les cellules.

      je sais pas quelle solution choisir et surtout laquelle est réalisable.

      merci

      Thibal
      1. je pensais plutot à utiliser un insert qui va rechercher les valeurs dans les cellules

        A+,
        Kobaya.
    4. ok je pense aussi

      mais je connais pas du tout les commandes vba lié a excel et mon aide est en anglais je capte que dalle.

      mais je pense que comme ça ça devrait passer:
      rien a voir le code c'est just une idée générale et en plus je sais pas comment nommer les cellules ni ou mettre des guimets , des &,...

      while indice colonne A <> ""
      moncode = "insert into table1 (1,2,3,4,5,...) values (indice colonne(A), indice colonne (B),indice colonne(B),...)"
      docmd.runsql moncode
      indice = indice+1
      end while

      si ça t'inspire un peu et que tu sais remplacer ce code par les vrai nom de colonne et tous le ratata qui va avec n'ésite pas
      sinon j'essayerai de me débroullier mais comme tu vois jsuis pas près d'y arriver.

      merci encore
      1. peux-tu me donner les différents champs de la table où tu veux insérer les valeurs d'Excel, avec leur format (texte, entier, simple, double, etc...)?

        A+,
        Kobaya.
        1. hello dsl de n 'avoir pas répondu avant j'ai pris 3 jours de vacances.

          merci de ta réponse voici les champs et leur format:

          Table T_product :

          Product_type number
          supplier_code number
          Sap description text
          Size number
          pcb number
          production_line text
          comment&notes memo
          active_supplier yes/no
          formula number
          shelf number
          minimum number

          Product_type, size et pcb sont des clés étrangères en fait il va falloir utiliser une table tampon en prenant des champs textes pour ces trois clés.

          merci bcp

          Thibal
          1. hello kobaya merci de ton attention

            et pour l'upload de excel dans Access t'as des news ?

            merci

            Thibal