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

VBA Access Discussion :

[Office 2003] Exporter une analyse comparative de 3 DB dans un fichier excel.


Sujet :

VBA Access

  1. #1
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut [Office 2003] Exporter une analyse comparative de 3 DB dans un fichier excel.
    Bonjour,
    mon besoin est le suivant.

    J'exporte actuellement au moyen du code ci-dessous tout un tas de donnée d'une DB vers excel, en leur appliquant ou pas après export un script de mise en forme (Pivot, Sous-totaux, formattage de colonne, ...).

    Ce système fonctionne très bien mais avec l'inconvénient que la méthode .TransferSpreadsheet écrase le fichier excel produit, ce qui me pose problème pour la nouvelle demande.

    Je dois pouvoir faire une analyse comparative des données par semaine sur les DB (distinctes) des 3 dernières années (dont celle en cours) et ce à partir de l'application maitre qui n'a en ligne que la DB 2009.

    En résumé, je voudrais à partir de mon appli 2009 extraire les données des appli 2008 et 2007, les formatter via VBA access et SQL pour sélectionner les données et calculer des compteurs et ensuite pousser tout cela dans 1 fichier excel.

    Comment puis-je travailler sur les données de 2 autres DB ?

    Je n'ai jamais fait cela.
    Pour le travail sur la DB active seule, aucun soucis, mais je ne sais pas comment attaquer les DB distantes, quelquepart comme si les données étaient à ma disposition dans la DB courante.

    Pour info, dans les années précédentes, les tables ont le même nom mais pas nécessairement le même design, mais les données à considérer sont bien sûr identiques.

    Si je dois passer par du code qui génére une table de travail (a exporter) qu'on crée à partir des 3 années à comparer, cela ne me gêne pas sur le principe.

    J'avais pensé importer les tables années -1 et -2 dans la Db courante, mais je ne suis pas certain que cela soit une bonne idée.


    Ci-joint, mon code d'export vers excel que j'utilise actuellement (pour info).

    Si je n'ai pas été clair, n'hésitez pas à demander une traduction de mon chinois.

    Merci a vous.

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
    Public Sub Export_Excelsheet(From_Table As String, to_file As String, Specific_param As Variant)
        Dim recv     As Recordset
        Dim Reci     As Recordset
        Dim Recexcel As Recordset
        Dim Argument As String
        Dim Quote    As String
        Dim nada     As Variant
     
     
        Dim Dbv  As Database
        Dim document As String
        Dim Excel_Workbook As String
     
     
        Quote = """"
        'Reference Current Database
     
        Set Dbv = DBEngine.Workspaces(0).Databases(0)
     
        'Open Recordset Zcontrol and get 1st record
     
        Set recv = Dbv.OpenRecordset("SQL_Zcontrol", , dbReadOnly)
        recv.FindFirst "DB_Year > 0"
     
        If recv.EOF Then GoTo exit_export_excelsheet
     
        'Open Recordset Installations  and get 1st record
     
        Set Reci = Dbv.OpenRecordset("SQL_Installation_Lines", , dbReadOnly)
        Reci.FindFirst "Install_Nr > 0"
     
        If Reci.NoMatch Then GoTo exit_export_excelsheet
     
        document = Trim(recv![Generated_excel_Folder]) & Format(Now, "yyyy-mm-dd") & "-" & Trim(to_file) & ".Xls"
        Excel_Workbook = recv![Generated_File_Prefix] & Format(Now, "yyyy-mm-dd") & "-" & Trim(to_file) & ".Xls"
        On Error Resume Next
        Kill document
     
        DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, From_Table, document, True
     
     
        'Open Recordset Export_Excel  and get 1st record
     
        Set Recexcel = Dbv.OpenRecordset("SQL_Export_Excel", dbOpenDynaset, dbReadOnly)
        Argument = "Object_Name = '" & From_Table & "'"
        Recexcel.FindFirst Argument
     
        If Recexcel.NoMatch Then
           MsgBox to_file & " exported to " & Trim(recv![Generated_excel_Folder]) & Format(Now, "yyyy-mm-dd") & "-" & Trim(to_file) & ".Xls"
           GoTo exit_export_excelsheet
        End If
        MsgBox to_file & " exported to " & Trim(recv![Generated_excel_Folder]) & Format(Now, "yyyy-mm-dd") & "-" & Trim(to_file) & ".Xls (Script File '" & Trim(recv![Excel_Script_File]) & "[" & Trim(Recexcel![Script_Name]) & "]' will be applied now)"
        Call Execute_Excel_Script(document, Excel_Workbook, recv![Script_Folder], recv![Excel_Script_File], Recexcel![Script_Name], Specific_param)
        Recexcel.Close
        recv.Close
        Reci.Close
     
     
    exit_export_excelsheet: '
    End Sub
     
    Sub Execute_Excel_Script(document As String, Excel_Workbook As String, Script_Folder As String, Excel_Script_File As String, Script_Name As String, Specific_param As Variant)
    On Error Resume Next
    Dim XLApp As Object
    Dim ExcelWasNotRunning As Boolean    ' Indicateur de libération finale.
    Dim FullScript As String
     
    FullScript = Trim(Script_Folder) & Trim(Excel_Script_File)
     
    Set XLApp = GetObject(, "Excel.Application")
    If err <> 0 Then
       err.Clear
       ExcelWasNotRunning = True
       Set XLApp = CreateObject("Excel.application")
     Else
        ExcelWasNotRunning = False
    End If
    XLApp.Visible = True
    Set XlWkb = XLApp.Workbooks.Open(FullScript)
     '
     ' ici nous lançons les macros automatiques d'Excel mais vous pouvez mettre du code
     '
    XlWkb.RunAutoMacros xlAutoOpen
     
    XLApp.Run Script_Name, document, Excel_Workbook, Excel_Script_File, Specific_param
    'XlWkb.Save
    XlWkb.Close
    'If ExcelWasNotRunning = True Then
        XLApp.Application.Quit
    'End If
     
    Set XlWkb = Nothing
    Set XLApp = Nothing
    'Set m_Access = Access.Application
    'm_Access.Visible = True
     
    End Sub

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Pour l'export, Cafeine a fait un joli tuto
    http://cafeine.developpez.com/access/tutoriel/excel

  3. #3
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Merci Heureux-Oli,

    voici une documentation que je vais précieusement conserver.

    J'ai peut-être mal formulé ma demande, mais ma préoccupation principale se situe plutot au niveau de la consolidation de données venant de 3 DB:
    1 Active dans le .MDB courant, 2 autres dans 2 autres MDB.

    Dit autrement, je voudrais :

    Depuis application active avec DB 2009 :

    * Extraire les données de 2009 et les formatter (OK)
    * Extraire les données de 2008 (hors de la DB 2008) et les formatter
    * Extraire les données de 2007 (hors de la DB 2007) et les formatter.

    Ensuite Exporter le tout vers Excel (Je pense être capable de le faire).

    je ne sais pas comment extraire les données de 2 autres DB si possible sans faire une import des tables concernées dans la DB courante.
    Pour rappel, les tables de 2008 et 2007 sont similaires, mais pas nécessairement semblables.

    Comment programmer leur manipulation pour dire au code que la table est ailleurs.

  4. #4
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Sans lier les tables, tu dois travailler soit en DAO soit en ADO.

    Perso, je préfère le DAO.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim db07 As DAO.DataBase
    Dim rs07 As DAO.Recordset
     
    Set db07 = DAO.OpenDatabase("Lechemindetadb")
    set rs07 = db07.OpenRecordset("Select * From MaTable")
    De cette façon, tu peux manipuler les données d'une autre DB sans lier les tables.


    Si tu veux en apprendre un peu plus http://warin.developpez.com/access/dao/

  5. #5
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Merci,

    je crois que c'est ce que je cherche.

    Bonne journée.

    Edit---02/02---------------------------
    En fait cela fonctionne tellement bien qu'on ne remarque absolument pas que toutes les tables ne sont pas dans la DB courante.
    Impressionant d'efficacité. Encore merci.

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

Discussions similaires

  1. [Office 2003] Scroller une listbox
    Par Sclarckone dans le forum Général VBA
    Réponses: 2
    Dernier message: 26/04/2012, 10h26
  2. [Toutes versions] Besoin d'une aide pour valider mon travail dans un fichier excel.
    Par Hitman_11 dans le forum Excel
    Réponses: 3
    Dernier message: 27/06/2011, 18h46
  3. [WS 2003] Déploiement d'office 2003 via une GPO
    Par arnaud.c13 dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 17/03/2011, 11h03
  4. [Débutant] Copier une image .png et la coller dans un fichier excel
    Par bambou015 dans le forum Images
    Réponses: 5
    Dernier message: 22/06/2010, 11h02
  5. [Office 2003] Ajouter une bouton pointant vers un programme externe
    Par KalHadj-Nikov dans le forum Microsoft Office
    Réponses: 5
    Dernier message: 04/10/2006, 16h10

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