IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Access Discussion :

Réaliser un export Excel, au format CSV, avec mise en forme, depuis Access. [AC-2016]


Sujet :

Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2021
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2021
    Messages : 27
    Points : 11
    Points
    11
    Par défaut Réaliser un export Excel, au format CSV, avec mise en forme, depuis Access.
    Bonjour à tous,

    J'utilise Access, pour le suivi d'opérations de transfert.

    Je souhaite réaliser un export Excel, au format CSV, qui va me permettre de générer des écritures comptables (débit/crédit).

    Je vais en suite injecter ce fichier dans une autre application.

    Le fichier doit cependant respecter un formatage, et un séquencement bien précis pour les deux écritures.

    Par exemple, les lignes doivent commencer à la ligne 4, car les précédentes contiennent des codes, nécessaires dans l'autre application.

    Je mets le débit en ligne 4, puis le crédit en ligne 5.

    Sur Access, j'obtiens les éléments nécessaires à l'aide d'une requête, sur une seule ligne :

    Nom : Extraction pour les cardy.JPG
Affichages : 165
Taille : 35,6 Ko

    Savez-vous qu'elle méthode je peux utiliser, pour générer mes deux lignes, au bon endroit ? avec les séquencement (éléments) nécessaire pour chacune d'entre elle ?

    Nom : Fichier Excel pour les cardy.JPG
Affichages : 173
Taille : 129,4 Ko

    Cordialement,

    Kensy

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 230
    Points : 5 595
    Points
    5 595
    Par défaut
    Bonjour,

    De ce que j'ai compris, je commencerais par faire 2 requêtes, l'une listant les débits, l'autre listant les crédits, les deux ayant le même nom (AS ...), ensuite je ferais une requête UNION sur ces 2 listes (avec le tri qui convient).

    Cordialement.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2021
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2021
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    Bonjour EricDgn,

    C'est une bonne idée.

    J'ai l'impression cependant qu'il faudra de toute façon passer pas du code VBA Excel.

    Car Access, ne permet pas de coller les données dans une cellule, ou une plage prédéfini.

    Il exporte les informations sur une nouvelle feuille.

    Je pense que je vais passer par une Macro sur Excel, qui va mettre en forme le fichier d'extraction Access.

    Cordialement,

    Kensy

  4. #4
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 230
    Points : 5 595
    Points
    5 595
    Par défaut
    Mais vous pourriez aussi créer dans Access une table qui contient 3 enregistrements qui correspondent à ce qui doit se trouver en tête du csv exporté et dont les champs sont identiques à ceux qui sont dans la requête UNION déjà mentionnée.

    Cordialement.

  5. #5
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 273
    Points : 6 582
    Points
    6 582
    Par défaut
    Salut
    Il est possible de piloter Excel depuis Access pour désigner un classeur et/ou une feuille spécifique pour "copier" des données à partir d'une cellule précise.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2021
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2021
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    Salut hyperion13,

    Tu as un exemple s'il te plait ?

    Cordialement,

    Kensy

  7. #7
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 770
    Points : 14 812
    Points
    14 812
    Par défaut
    bonsoir,
    pour trouver des exemples, tape copyfromrecordset dans le lien "Recherche dans ce forum" en haut gauche du forum (ou du sous-forum):

    Nom : _1.JPG
Affichages : 144
Taille : 109,2 Ko

  8. #8
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 230
    Points : 5 595
    Points
    5 595
    Par défaut
    Bonsoir,

    La question est effectivement assez fréquemment posée. Un exemple de solution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    Option Explicit
     
    '--- https://www.developpez.net/forums/d1726143/logiciels/microsoft-office/access/vba-access/optimisation-temps-traitement/
     
    '--- demande référence Microsoft Excel x.xx Object Library
     
    Sub Export_Xls(sRecordsource As String, sFullFileName As String)    '--- Export via Excel en .xlsx ou .csv ou .txt 
        Dim oXls As Excel.Application
        Dim oWb As Excel.Workbook
        Dim oWsh As Excel.Worksheet
        Dim rs As Recordset
        Dim sFormat As String
        Set oXls = CreateObject("Excel.Application")
        oXls.Visible = True
        Set oWb = oXls.Workbooks.Add
        Set oWsh = oWb.Worksheets(1)                   '--- première feuille
        Set rs = CurrentDb.QueryDefs(sRecordsource).OpenRecordset
        oWsh.Range("A3").CopyFromRecordset rs
        'oWsh.Range("A1") = "Ligne 1"                   '--- à adapter 
        sFormat = Mid(sFullFileName, InStrRev(sFullFileName, "."))
        Select Case sFormat
            Case ".xlsx"
                oWb.SaveAs sFullFileName
            Case ".csv"
                '--- ne conserve pas les lignes vides !
                '--- délimiteur=; --- dates FR
                'oWb.SaveAs FileName:=sFullFileName, FileFormat:=xlCSV, CreateBackup:=False
                '--- délimiteur=, --- dates US
                'oWb.SaveAs FileName:=sFullFileName, FileFormat:=xlCSVMSDOS, CreateBackup:=False
                oWb.SaveAs FileName:=sFullFileName, FileFormat:=xlCSVUTF8, CreateBackup:=False
            Case ".txt"
                '--- ne conserve pas les lignes vides !
                '--- délimiteur=tabulation --- dates US
                'oWb.SaveAs FileName:=sFullFileName, FileFormat:=xlTextWindows, CreateBackup:=False
                oWb.SaveAs FileName:=sFullFileName, FileFormat:=xlUnicodeText, CreateBackup:=False
            Case Else
                MsgBox "Extension non reconnue!", , "Annulé"
        End Select
        'oXls.Quit
        rs.Close
        Set rs = Nothing
        Set oWsh = Nothing
        Set oWb = Nothing
        Set oXls = Nothing
    End Sub
    A noter que les exports en .csv ou .txt ne reprend pas les lignes vides qui se trouvent au dessus des premières lignes non vides de la feuille Excel exportée. Il faut donc compléter au moins la ligne 1 pour que les lignes vides suivantes soient enregistrées (avec autant de champs laissés vides qu'il y en a dans les données normales).

    Cordialement.
    Fichiers attachés Fichiers attachés

  9. #9
    Membre à l'essai
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2021
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2021
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    Bonjour EricDgn,

    J'ai essayé la base que tu m'as envoyé,

    Ça me donne ce message d'erreur :

    Nom : erreur code ericdgn.JPG
Affichages : 150
Taille : 155,8 Ko

    Cordialement,

    Kensy

  10. #10
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 230
    Points : 5 595
    Points
    5 595
    Par défaut
    Bonjour,

    Cela dépend peut-être de la version d'Excel car cela fonctionne sur mon pc (Excel 365).

    Mettre cette ligne en remarque (ajouter un ' en début de ligne, qui du coup est affichée en vert) et remettre en fonction la ligne précédente (enlever le ' qui se trouve en début de ligne, qui du coup est affichée en noir).

    Énumération XlFileFormat

    Cordialement.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2021
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2021
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    EricDgn,

    Merci, ça fonctionne.

    Cordialement,

    Kensy

  12. #12
    Membre à l'essai
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2021
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2021
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    EricDgn,

    J'ai créé une requête union comme tu me l'avais conseillé.

    Cependant, je n'arrive pas à la copier à la place de "sRecordsource".

    Comment faire?

    Ma requête se nome "R_Export_Union".

    Cordialement,

    Kensy

  13. #13
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 230
    Points : 5 595
    Points
    5 595
    Par défaut
    Bonjour,

    Je ne vois pas vraiment où se trouve le problème. Normalement il suffit de mentionner le nom de la requête dans l'appel de la routine, par exemple quelque chose du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Export_Xls "R_Export_Union", CurrentProject.Path & "\R_Export_Union.csv"
    Il faut évidemment que la requête union elle-même fonctionne correctement pour que l'export puisse ensuite fonctionner.

    Un petit exemple en attaché avec une requête union nommée NomPr_PrNom.

    Cordialement.
    Fichiers attachés Fichiers attachés

  14. #14
    Membre à l'essai
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2021
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2021
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    Bonjour EricDgn,

    J'ai trouvé d'où vient le problème.

    j'ai mis un critère dynamique dans la requête, afin de la filtrer sur un enregistrement précis.

    Nom : Critère dynamique.JPG
Affichages : 76
Taille : 33,9 Ko

    la requête union fonctionne bien, j'obtiens les lignes désirées, grâce au critère renvoyé par mon formulaire.

    Cependant le code non fonctionne plus.

    Cordialement,

    Kensy

  15. #15
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 770
    Points : 14 812
    Points
    14 812
    Par défaut
    bonjour,
    les requêtes contenant des paramètres sont un peu complexes à utiliser dans les recordset de VBA.
    Voici ce que tu peux faire :
    -déplace le paramètre formulaire (TR_Code) dans la requête UNION
    - rajoute le code ci-dessous avant l'instruction CopyFromRecordset:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ' déclaration querydef (définition de requête)
    Dim oQdf as QueryDef
     
    Set oQdf = CurrentDb.QueryDefs("sRecordsource")
    ' affectation du paramètre
    oQdf.Parameters("Tr_Code") = Forms![NomDuFormulaire].[NomduControle]
     
    ' affectation du Recordset
    Set rs = oQdf.OpenRecordset
    la dernière instruction remplace l'ancienne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rs = CurrentDb.Querydefs(sRecordsource)

  16. #16
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 230
    Points : 5 595
    Points
    5 595
    Par défaut
    Bonjour,

    Merci à tee_grandbois pour sa solution, qui fonctionne après avoir nommé le paramètre, par exemple en LeCode

    Nom : Critère dynamique 2.jpg
Affichages : 95
Taille : 46,3 Ko
    et adapté son code en fonction du nom donné au paramètre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ' déclaration querydef (définition de requête)
    Dim oQdf as QueryDef
     
    Set oQdf = CurrentDb.QueryDefs("sRecordsource")
    ' affectation du paramètre
    oQdf.Parameters("LeCode") = Forms![NomDuFormulaire].[NomduControle]
     
    ' affectation du Recordset
    Set rs = oQdf.OpenRecordset
    Cordialement.
    Fichiers attachés Fichiers attachés

  17. #17
    Membre à l'essai
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2021
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2021
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    Bonjour à tous,

    Merci pour votre aide.

    J'ai utilisé une requête action, afin de copier coller le résultat de la requête union dans une table temporaire.

    J'ai en suite remplacé par le nom de cette table.

    ça fonctionne.

    Cordialement,

    Kensy

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2016] Export feuilles Excel au format CSV UTF-8 pipe delimited
    Par DiGio dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 20/09/2019, 16h46
  2. [XL-2007] exporter un document excel au format pdf avec comme nom une cellule
    Par revemane dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/07/2015, 03h34
  3. [AC-2010] Exportation d'une requête SQL avec mise en forme
    Par Daejung dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 24/12/2011, 14h03
  4. Problème export excel sur une requete avec critère
    Par eddyG dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 20/09/2006, 11h46
  5. Réponses: 41
    Dernier message: 02/05/2006, 14h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo