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 :

[VBA] Excel dans access (utilisation d'objets excel dans access)


Sujet :

VBA Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 73
    Points : 47
    Points
    47
    Par défaut [VBA] Excel dans access (utilisation d'objets excel dans access)
    Bonjour,

    Je cherche depuis un moment comment utiliser les objets excel dans access.
    J'utilise une macro excel qui me permet de faire du trie sur des fichiers. J'importe cette feuille excel dans access afin de garder une feuille excel pas trop lourde.

    J'ai lu pas mal de sujet ou l'on parler d'importer la bibliothèque d'objet d'excel dans access (ce que j'ai fait). Mais maintenant j'aimerais connaître comment ouvrir l'application excel et lancer sa macro (ou pourquoi pas executer sa macro depuis access ?).

    Merci pour votre aide

    voici un morceau de code que j'ai trouvé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim xlApp As Object
    Set xlApp = CreateObject("Excel.Application")

  2. #2
    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
    Salut,
    je vois ton poste et je pense que dans le post ici le code que j'ai mis devrait pouvoir t'aider.

    Il fait ce que tu demandes et plus.

    En résumé, j'exporte des données de access vers excel par un bouton. Ensuite si j'ai un script lié à la table que je viens d'exporter, j'ouvre un fichier excel qui contient tous mes scripts, celui-ci ouvre le fichier excel à traiter , applique le script , sauve le fichier excel reformatté et le ferme.

    J'ai alors un autre bouton pour voir le résultat.
    Ca marche génial.

    J'ai découvert après qu'il existe un autre système qui consite à coller du code VBA dans le fichier excel créé et si on l'affecte à l'évènement OPEN, il s'exécute à l'ouverture du fichier.
    Je ne m'y suis jamais mis et cela ne correspond pas trop à ce que je cherche.

    J'espère que tu comprendras.

    Bonne chance.

    Edit_______________

    Un exemple de Script Excel exécuté par le Script Access.
    Je passe des paramètres qui me permettent de manipuler les données (titres colonnes, cacher les colonnes inutiles (car l'appli est multicentres avec des caractéristiques différentes).
    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
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
     
    Sub Gmain_Extra_Activity_List(Document As String, Excel_Workbook As String, Excel_Script_File As String, Specific_param As Variant)
     
    '
    ' Gmain_Student_List Macro
    ' Macro enregistrée le 26/05/2006 par Admin
    '
        Dim lrow        As Long
        Dim xlrow       As String
        Dim Range_Id    As String
        Dim Temp_Range_Id As String
        Dim off        As Long
        Dim Column_from As String
        Dim Column_to   As String
        Dim Start_Range_Id As String
        Dim tablw()      As String
        Dim weeks        As Single
        Dim idx          As Integer
        Dim Sel_Range    As String
     
     
        Workbooks.Open Filename:=Document
     
        Windows(Excel_Workbook).Activate
        ActiveSheet.UsedRange
        ActiveSheet.UsedRange
        Range_Id = Get_Range_Id(ActiveSheet.UsedRange.Name)
        Start_Range_Id = Range_Id
        Column_from = Trim(Get_Column_From(ActiveSheet.UsedRange.Name))
        Column_to = Trim(Get_Column_To(ActiveSheet.UsedRange.Name))
        Range(Range_Id).Select
    '**********************************************
    '* real VB Script Start  here                 *
    '**********************************************
    'Header Line In Bold
        Range_Id = Column_from & "1:" & Column_to & "1"
        Range(Range_Id).Font.Bold = True
        lrow = ActiveSheet.UsedRange.Rows.Count
        xlrow = lrow
     
    'Autofit
        Range_Id = Column_from & ":" & Column_to
        Columns(Range_Id).EntireColumn.AutoFit
     
    'Hide Fields
        tablw = Split(Specific_param, "~") 'Specific param = Weeks_nbr
        weeks = tablw(1)
     'Rename Optional Activities Weeks Colums Header
        Sel_Range = "D1"
        For idx = 1 To weeks
        With Range(Sel_Range).Offset(0, idx - 1)
                .Value = "Week" & idx & " Activity"
                .HorizontalAlignment = xlGeneral
                .VerticalAlignment = xlBottom
                .WrapText = True
                .Orientation = 0
                .AddIndent = False
                .IndentLevel = 0
                .ShrinkToFit = False
                .ReadingOrder = xlContext
                .MergeCells = False
         End With
       Next idx
     
    'Resize Renamed Column
        Range_Id = "D:L"
        Columns(Range_Id).ColumnWidth = 15
     
     'unused Week : Counter (From C))
       For idx = weeks + 1 To 8
        Columns(Range("C1").Column + idx).EntireColumn.Hidden = True
       Next idx
     
     
    'Add Border Line to delimit NAme
        Range_Id = "B2:B" & xlrow
        Range(Range_Id).Select
        Selection.Borders(xlDiagonalDown).LineStyle = xlNone
        Selection.Borders(xlDiagonalUp).LineStyle = xlNone
        With Selection.Borders(xlEdgeLeft)
            .LineStyle = xlContinuous
            .Weight = xlThick
            .ColorIndex = xlAutomatic
        End With
        Selection.Borders(xlEdgeTop).LineStyle = xlNone
        Selection.Borders(xlEdgeBottom).LineStyle = xlNone
        With Selection.Borders(xlEdgeRight)
            .LineStyle = xlContinuous
            .Weight = xlThick
            .ColorIndex = xlAutomatic
        End With
        Selection.Borders(xlInsideVertical).LineStyle = xlNone
        Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
     
    'Restrict Width
        Columns("A:A").Select 'Category
        Selection.ColumnWidth = 7
        Columns("B:B").Select 'Name
        Selection.ColumnWidth = 30
        Columns("C:C").Select 'Age
        Selection.ColumnWidth = 4.57
     
     
    'Sort
        Range(Start_Range_Id).Select
        Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range("B2") _
            , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
            False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
            :=xlSortNormal
     
    'Freeze panes
        Range("B2").Select
        ActiveWindow.FreezePanes = True
    'goto A1
        Range("A1").Select
        ActiveWorkbook.Save
        ActiveWorkbook.Close
    '**********************************************
    '* real VB Script Stop   here                 *
    '**********************************************
        Windows(Excel_Script_File).Activate
    End Sub

  3. #3
    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
    Bonjour et bienvenue sur les forums Office de DVP.

    Pour utiliser un Objet Excel dans Access, tu as plusieurs solution rien que pour la déclaration et l'utilisation des objets.

    Ta solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim xlApp As Object
    Set xlApp = CreateObject("Excel.Application")
    crée une nouvelle instance de l'application, mais tu dois être certain de touts les objets et syntaxes que tu vas utilser.

    Si tu veux utiliser une instance d'Excel existante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim xlApp As Object
    Set xlApp = GetObject(,"Excel.Application")
    C'est ce que l'on appelle le LateBinding, on lie la bibliothèque Excel au dernier moment dans le code.

    La solution la plus facile à mettre en oeuvre est le référencement de la bibliothèque Excel dans ton projet.

    Outils => Références => Microsoft Excel ....

    On l'utilise de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim xlApp As Excel.Application
    Set xlApp = New Excel.Application
    Dès lors, tu bénéficies de l'IntelliSense ou autocomplétion du code.
    Chaque fois que tu vas utiliser un objet Excel, le VBE va te proposer les différents objets, méthodes et propriétés que tu peux utiliser.

    Tu peux aussi utiliser ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim xlApp As New Excel.Application
    ou encore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim xlApp As Excel.Application
    Set xlApp = Excel.Application
    dans le cas où une instance d'Excel est déjà créée.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 73
    Points : 47
    Points
    47
    Par défaut
    Je vous remercie de vos réponses plus que complète. je vais les étudiers et je repasse taguer le sujet en conséquence.

    Edit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim xlApp As Excel.Application
    Set xlApp = New Excel.Application
     
    Workbooks.Open chemin, Local:=True
    devrais m'ouvrir le classeur excel. J'ai importer la bibliothèque Excel dans access. Malheureusement le classeur ne s'ouvre pas (je n'ai aucun message d'erreur)

    Chemin est une variable de type string qui contiens le chemin du classeur Excel à ouvrir

  5. #5
    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,

    si, le classeur est ouvert, mais tu ne le vois pas !

    Je reprend la méthode que tu as choisie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim xlApp As Excel.Application
    Set xlApp = New Excel.Application
     
    xlApp.Workbooks.Open chemin, Local:=True
     
    xlApp.Visible = True
    Mais perso, je travaille autrement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim xlApp As Excel.Application
    Dim xlWB As WorkBook
    Dim xlSh As WorkSheet
     
    Set xlApp = New Excel.Application
    Set xlWB = xlApp.Workbooks.Open (chemin, Local:=True)
    set xlSh = 
     
    xlApp.Visible = True
    ce qui me permet de rendre l'utilisation de mon code plus fluide est facile à utiliser.
    On utilise dans le code

  6. #6
    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
    Bonjour,
    tu dois instancier tes références Excel autrement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Set XlWkb = XLApp.Workbooks.Open(chemin)
     
    ....
     
    XlWkb.Close

  7. #7
    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
    Oops

    J'ai fait un copier coller idiot.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 73
    Points : 47
    Points
    47
    Par défaut
    Oui, c'est ce qu'il me semblait. Aprés quelque recherche du coté de l'ancien post de Godzestla j'ai réussi à ouvrir mon fichier excel. Je pense que maintenant ca va aller.

    Merci beaucoup

    La solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        Dim xlApp As Excel.Application
        Dim xlWB As Workbook
        Dim xlSh As Worksheet
        Set xlApp = New Excel.Application
        Set xlWB = xlApp.Workbooks.Open(chemin)
        Set xlApp = nothing

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 73
    Points : 47
    Points
    47
    Par défaut
    rebonjour,

    Vous m'avez bien aider, alors je reviens vous poser une toute petite question.
    Je suis certains que la solution est trés simple, mais je la trouve pas.

    alors voilà, j'importe un fichier excel dans access (aprés la fameuse execution de la macro à distance) mais je n'arrive pas à importer des feuilles différentes.

    chemin est une variable contenant le chemin de mon fichier excel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "Tfusion", chemin, True, Feuil1
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "Tfusion2", chemin, True, Feuil2
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "Tfusion3", chemin, True, Feuil3
    pour la feuille 1 : sous excel lorsque je la manipule j'écris Feuil1
    pour la feuille 2 : sous excel lorsque je la manipule j'écris Feuil2 (cependant Acess m'importe encore la Feuil1
    idem pour la feuille 3.

    le but est d'obtenir 3 tables access chacune correspondante à une feuille excel

    Merci de votre aide

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 73
    Points : 47
    Points
    47
    Par défaut
    J'ai trouvé la solution je vous la fait partager pour les futurs ...

    Cette solution n'est pas ultime puisque vous devrez précisez du coup le nombre de colone. Mais il faut écrire le nom des feuilles suivit de votre plage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "Tfusion", chemin, True, "Sheet1!A:AG"
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "Tfusion2", chemin, True, "Sheet2!A:E"
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "Tfusion3", chemin, True, "Sheet3!A:F"
    Dans mon cas ce n'est pas grave puisqu'il y a toujours le même nombre de colone, j'éspère que la réponse aidera d'autre personnes

  11. #11
    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
    Rebonjour,
    tu n'es pas obligé de connaître le nombre de colonnes.

    Il te suffit de mentionner un range assez large, et il reprendra uniquement les colonnes avec titre en ligne 1 si tu utilise le parm HasFieldNames = True.

    Essaie par exemple avec "Sheet2!A:E" alors que tu n'as que 5 colonnes.
    Ca fonctionne.

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

Discussions similaires

  1. Inserer un fichier en objet (icon) dans word a partir d'excel
    Par laurent27530 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/10/2014, 06h37
  2. Utilisation des objets déclarés dans un repeater
    Par grosdave653 dans le forum Flex
    Réponses: 1
    Dernier message: 13/08/2007, 10h13
  3. Utiliser l'objet appelant dans l'objet appelé
    Par Nyphel dans le forum C++
    Réponses: 3
    Dernier message: 13/03/2007, 10h33
  4. Utiliser des objets automation dans Oracle
    Par WebPac dans le forum Forms
    Réponses: 10
    Dernier message: 29/11/2006, 19h17
  5. Utiliser des objets SWING dans une vue RCP
    Par manuga72 dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 20/10/2006, 17h26

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