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 :

Exécuter une macro variable dans Excel , avec des paramêtres


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 Exécuter une macro variable dans Excel , avec des paramêtres
    Bonjour,

    j'utilise depuis lontemps avec succès la macro suivante qui me permet très souvent d'appliquer un script de formattage sur un fichier excel créé par export depuis Access.

    Code pour l'export
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, From_Table, document, True
    Call Execute_Excel_Script(document, Excel_Workbook, recv![Script_Folder], recv![Excel_Script_File], Recexcel![Script_Name])
    Code Pour l'appel du script de reformattage
    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
     
    Sub Execute_Excel_Script(document As String, Excel_Workbook As String, Script_Folder As String, Excel_Script_File As String, Script_Name As String)
    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)
     '
     ' lançement des macros automatiques d'Excel
     '
    XlWkb.RunAutoMacros xlAutoOpen
     
    XLApp.Run Script_Name, document, Excel_Workbook, Excel_Script_File
    'XlWkb.Save
    XlWkb.Close
    'If ExcelWasNotRunning = True Then
        XLApp.Application.Quit
    'End If
     
    Set XlWkb = Nothing
    Set XLApp = Nothing
     
     
    End Sub
    La limitation actuelle de ce systeme est qu'il n'y a pas de parametres lors de l'appel de mon Script dans Excel.
    Je voudrais par exemple, pour un export particulier, renommer la colonne B en "VOYAGE 27/05", en fonction des données qui sont dans la DB.

    Il me faudrait donc parfois 0 parametre en plus, parfois N, en fonction du cas.

    Je voudrais donc :
    1) Appeler Sub Execute_Excel_Script avec un nombre de parametres variables de types variables
    2) Exécuter XLApp.Run avec un nombre de parametres variables de type variable dépendant des parametres d'appel à Sub Execute_Excel_Script

    Est-ce possible ?

    Si je ne suis pas clair, n'hésitez pas à demander des précisions.

    Ci-joint, un exemple de script excel lancé par ce systeme, mais actuellement sans parametre "data".
    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
    Sub Gmain_Attendees_Presence_ART5_FOR(Document As String, Excel_Workbook As String, Excel_Script_File As String)
     
    '
    ' Gmain_Attendees_Presence_ART5 Macro
    ' Macro enregistrée le 30/05/2006 par Admin
    '
        Dim lrow        As Long
        Dim xlrow       As String
        Dim Range_Id    As String
        Dim Saved_Range_id As String
        Dim Temp_Range_Id As String
        Dim off        As Long
        Dim Column_from As String
        Dim Column_to   As String
     
     
        Workbooks.Open Filename:=Document
     
        Windows(Excel_Workbook).Activate
        ActiveSheet.UsedRange
        ActiveSheet.UsedRange
        Range_Id = Get_Range_Id(ActiveSheet.UsedRange.Name)
        Saved_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).Select
        Selection.Font.Bold = True
    'Freeze panes
        Range("C2").Select
        ActiveWindow.FreezePanes = True
    'Autofit
        Range_Id = Column_from & ":" & Column_to
        Columns(Range_Id).EntireColumn.AutoFit
    'Autofit
        Columns("E:F").Select
        Selection.NumberFormat = "h:mm"
        Columns("E:F").EntireColumn.AutoFit
        Columns("C:C").Select
        Selection.NumberFormat = "d/mmm/yy"
        Columns("C:C").EntireColumn.AutoFit
        Columns("U:U").Select
        Columns("U:U").EntireColumn.AutoFit
        Selection.NumberFormat = "d/mmm/yy"
        Columns("U:U").EntireColumn.AutoFit
     
    'get row number
        lrow = ActiveSheet.UsedRange.Rows.Count
        xlrow = lrow
     
     
     
        Range("C2").Select
        ActiveWorkbook.Save
        ActiveWorkbook.Close
    '**********************************************
    '* real VB Script Stop   here                 *
    '**********************************************
        Windows(Excel_Script_File).Activate
    End Sub
    merci.

  2. #2
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    bonjour,

    je sais, je vais je ter un pavé dans la mare, mais si il y a transformation, tu ne pourrais pas le faire directement depuis access?

    sinon ,en passant les parametres via une array, cela devrait le faire!

  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
    Salut mayekeul,

    merci pour le pavé.

    A vrai dire, je préfére faire la manip dans excel, car de toute façon j'y passe pour le reformattage, créer un Pivot table ou autre cosmétique du genre.
    cela me permet de ne rien faire de spécifique dans access mais uniqement dans la macro Excel en question, s'il a lieu.

    Ce fameux array que tu me suggères, tu le vois défini dans mes parametres et dimensionné comment, vu que tu as compris que sa longueur est variable (parfois rien dedans) avec un contenu généralement de type string (je pense pouvoir m'en contenter).

  4. #4
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    le parametre ne doit pas de dimension définie justement

    et d'ailleurs, en principe, tu ne sais pas le faire

    dans ton excel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sub machin(prm as variant)
    en access
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    dim prm(10)
     
    xlapp.run machin,param()
    un truc dans le genre quoi!

  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
    Dernière question,

    pour séparer les parametres je fais comment : SPLIT ?

  6. #6
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    tu va envoyer l'entieretté de ton tableau

    donc en fait tu recevra une variable

    il n'y a aucun besoin de faire un split

    pour appeler la variable, tu fait
    var(xx)

    euh comprends tu?


  7. #7
    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
    Oui et non,

    mais dans mon tableau j'ai N parametres .

    Alors comment je les sépare ?

  8. #8
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    Pourquoi les séparer?

    tu va faire passer un tableau avec N parametres

    qui seront evidemment dissocié dans le tableau
    tu aura par exemple
    var(prm1)
    var(prm2)

    contenu dans le tableau var(N)

  9. #9
    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
    Ok mayekeul,

    j'ai mal formulé ma question. ce que je cherche c'est le nombre d'éléments dans ma table variant.

    j'ai lu quelquepart que c'est C'est juste ?

    Et dois déclarer ma procédure comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub Proc_exemple(Fixed_parm As String, ParamArray var())
    ou bien comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub Proc_exemple(Fixed_parm As String, var())
    selon toi.

  10. #10
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    c'est et la deuxième est la bonne

  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


    J'ai fait comme tu as dit et c'est

    j'avais essayé avec ParmArray mais comme j'ai plusieurs call intermédiaire, c'était .

    Encore merci.

    Thierry.

  12. #12
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    de rien, avec plaisir!

    un pti click sur peut -être?

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 26/02/2015, 15h48
  2. [XL-2010] Exécuter une macro seulement dans les feuilles nommées par des nombres.
    Par baptou42 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/05/2014, 16h40
  3. Importation d'une table access dans excel avec Macro
    Par wamkey dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 28/01/2014, 22h44
  4. Exécuter une macro appelée dans VBS sur une machine sans Excel
    Par rcomlan dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/12/2013, 22h51
  5. Réponses: 0
    Dernier message: 28/05/2008, 15h15

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