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

VBScript Discussion :

lancement macro excel depuis un script vb


Sujet :

VBScript

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2006
    Messages : 57
    Points : 34
    Points
    34
    Par défaut lancement macro excel depuis un script vb
    Hello,

    Je suis en train de monopoliser le forum avec mes questions, mais la j'ai encore besoin de vos lanternes ^^

    Il se trouve que je dois lancer une macro excel depuis un vbs et je ne trouve pas la bonne méthode ( et je ne comprends pas trop ).

    J'ai trouvé ca :

    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
    Private Sub Command1_Click()
    Dim Xl As Excel.Application
    Dim Wb As Excel.Workbook
     
    Set Xl = CreateObject("Excel.application")
    Xl.Visible = True
    Set Wb = Xl.Workbooks.Open("C:\leClasseur.xls")
     
    Xl.Run "nomMacro"
    '
    'autre possiblité :
    'Xl.Run Wb.Name & "!Module1.nomMacro"
    '
    '
    '
    Set Wb = Nothing
    Set Xl = Nothing
    End Sub
    Mais je sais pas si c'est vraiment la bonne méthode, car je la trouve assez complexe par rapport au travail qui doit être fait ( c'est à dire, juste lancer une macro dans excel )

    En vous remerciant,

    Chicho à la ramasse

  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    La méthode n'est pas complexe. Avant de pouvoir lancer une macro excel, tu doit ouvrir un fichier excel.
    C'est ce que fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Set Xl = CreateObject("Excel.application")
    Xl.Visible = True
    Set Wb = Xl.Workbooks.Open("C:\leClasseur.xls")
    D'abord tu crées une application excel, puis tu ouvres le classeur spécifié.
    C'est ce que tu ferais manuellement (lancer excel et ouvrir un fichier à partir d'excel).
    Cela te permets de rendre excel visible, avec la valeur false, tu verras pas excel s'ouvrir, mais il s'ouvrira qd même.
    C'est la commande qui te permets de lancer une macro. Je ne l'ai jamais utilisé, donc je ne sais aps si cela fonctionne.
    As tu essayé ce code ?
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  3. #3
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Voila ce que j'ai récupéré un jour sur un autre forum
    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
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
     
    Dans la zone General-Declarations d'un module, créez une variable publique:  
    Public MonWd     ' Pour Word
    Public MonXl      'Pour Excel
    'Déclaration des Variables
       Dim MonXl
    'Ceci initialise la variable et charge Excel en arrière plan
       Set MonXl = New Excel.Application 
    ou Set MonXl = CreateObject("Excel.Application")   ' Pour Excel
    ou Set MonWd = CreateObject("Word.Application")    ' Pour Word
    'Rend Excel visible, ce n'est pas indispensable, mais plus spectaculaire...
       MonXl.Visible = True 
    'Ouverture d'un Classeur Existant
       MonXl.Workbooks.Open FileName:="C:\Documents and Settings\Administrateur\Mes documents\Classeur1.xls"
    'sélection d'une feuille du classeur en cours
       MonXl.Sheets("E.MAIL DIRECTION").Select
       MonXl.Sheets(1).Select 'selectionne la premiere feuille du classeur
    'Ajoute un nouveau classeur
       MonXl.Workbooks.Add 
    'ajoute une feuille à la fin du classeur
       Dim newSheet
       Dim nbfeuille
       nbfeuille = MonXl.Worksheets.Count
       Set newSheet = MonXl.Sheets.Add(after:=MonXl.Worksheets(nbfeuille), Type:=xlWorksheet)
    'renvoi le nom de la premiere feuille du classeur ou attribu un nom à une feuille
       NomFeuille= MonXl.Sheets(1).Name
       MonXl.Sheets(1).Name = "Feuille Ajoutée"
    'renseigne la valeur d'une cellule
       MonXl.Range("A1").Value = "XY" 
    'teste la valeur d'une cellule
       If MonXl.Range("A3").Value <> "" Then
    'sélection d'une colonne entière et supprime le contenu des cellules
       MonXl.Columns("F:F").Select
       MonXl.Selection.ClearContents
       MonXl.Selection.Clear
    'Assure la sélection des trois cellules
       MonXl.Range("A1:A3").Select 
    'assure la selection d'un bloc de lignes et colonne de la feuille Sheet1
       MonXl.Worksheets("Sheet1").Range("A1:C10").selected 
    'effectuer un copier-coller d'une colonne à l'autre
        MonXl.Columns("F:F").Select
        MonXl.Selection.Copy
        MonXl.Columns("G:G").Select
        MonXl.ActiveSheet.Paste
    'modifie la hauteur de la ligne n°1 
       MonXl.Rows("1:1").RowHeight = 39
    'active un classeur (lorsque plusieurs sont chargés)
       MonXl.Windows("E MAIL POINT AU 23 MARS 2002 PAR DISTRICT.xls").Activate
    ' sauvegarde le classeur en cours
       MonXl.ActiveWorkbook.Save
    'sauvegarde le classeur en cours sous un autre nom
       MonXl.ActiveWorkbook.SaveAs Filename:="E:\Mes documents\DOC EXCEL\E MAIL POINT AU 23 MARS 2002 PAR DISTRICT2.xls", _
            FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False
    'ferme le classeur en cours
       MonXl.ActiveWindow.Close
    'se positionner sur la premiere feuille
       MonXl.ActiveWindow.ScrollWorkbookTabs Position:=xlFirst ou bien MonXl.Worksheets(1).Activate 
    ' Fixe la largeur de la colonne selectionnée
        MonXl.Selection.ColumnWidth = 26
    ' Fixe la largeur d'une colonne    
        MonXl.Columns("F:F").ColumnWidth = 40.14
    'Selectionne une ligne complete,active une cellule de la ligne et revoi le nombre de lignes sélectionnées
         MonXl.Rows("13:13").Select
         Monxl.Range("B13").Activate
    NbLignes=MonXl.rows.Count 
    NbLignes=Monxl.Columns.Count
    'selectionne une colonne puis active le fitre automatique et applique un filtre 
        MonXl.Columns("F:F").Select
        Monxl.Selection.AutoFilter
    'doit contenir dir dans le texte
        Monxl.Selection.AutoFilter Field:=1, Criteria1:= "=*dir*", Operator:=xlAnd 
       'doit contenir magasin ou se terminer par dir  
        MonXl.Selection.AutoFilter Field:=1, Criteria1:="=*magasin*", Operator:=xlOr,Criteria2:="=*dir"
         'Ne doit pas commencer par B et ne doit pas finir par X
        MonXl.Selection.AutoFilter Field:=6, Criteria1:="<>b*", Operator:=xlAnd, Criteria2:="<>*x"
    'supprime une ligne
        MonXl.Worksheets("Sheet1").Rows(3).Delete
        MonXl.Range("G:G").Count           'affiche 65536 (nb maxi de lignes)
        MonXl.Range("G:G").Item(1)         'affiche le texte contenu dans la cellule
        MonXl.Range("G:G").Item(1).Value   'Equivalent à la ligne précédente
        MonXl.Range("G:G").Item(1).Address(ReferenceStyle:=xlR1C1) 'affiche les coordonnées de la cellule $G$1255
        MonXl.Range("G:G").Item(1).Address(ReferenceStyle:=xlA1)   'affiche les coordonnées de la cellule R1C7
        MonXl.Range("G:G").Item(1).Address(RowAbsolute:=False, ColumnAbsolute:=False) ' affiche les coordonnées de la cellule sans les $ : G1244
        MonXl.Range("G:G").Item(1).Address(external:=True) 'affiche le nom du classeur la feuille en cours et les coordonnées de la cellule en cours
    'affiche la feuille dans sa taille maxi et positionne le curseur sur l'angle sup gauche
        MonXl.ActiveWindow.WindowState = xlMaximized
        MonXl.ActiveWindow.ScrollRow = 1
        MonXl.ActiveWindow.ScrollColumn = 1
    'Modifie la taille et la position de la fenêtre Windows Excel
        Application.Left = 75.25
        Application.Top = 1
        Application.Width = 649.5
        Application.Height = 474
    'Cet exemple montre comment supprimer des lignes dans la zone en cours de la feuille de calcul 1 où la valeur de la cellule 1 de la ligne est la même que celle de la cellule 1 de la ligne précédente.
    dim rw
    For Each rw In MonXl.Worksheets(1).Cells(1, 1).CurrentRegion.Rows
        this = rw.Cells(1, 1).Value
        If this = last Then rw.Delete
        last = this
    Next
    'Cet exemple montre comment faire défiler la fenêtre du classeur jusqu'à ce que la sélection 'apparaisse dans le coin supérieur gauche de la fenêtre.
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        With ActiveWindow
            .ScrollRow = Target.Row
            .ScrollColumn = Target.Column
        End With
    End Sub
    Cet exemple montre comment attribuer la valeur « 3.14159 » à la cellule A1 de la feuille « Sheet1 ».
       Worksheets("Sheet1").Range("A1").Value = 3.14159
    Cet exemple montre comment créer une formule dans la cellule A1 de la feuille « Sheet1 ».
       Worksheets("Sheet1").Range("A1").Formula = "=10*RAND()"
    Cet exemple montre comment exécuter une boucle sur les cellules A1:D10 de la feuille « Sheet1 ». Si une des cellules a une valeur inférieure à 0,001, le code remplace cette valeur par 0 (zéro).
       For Each c in Worksheets("Sheet1").Range("A1:D10")
           If c.Value < .001 Then
               c.Value = 0
           End If
       Next c
    Cet exemple montre comment exécuter une boucle sur la plage appelée « TestRange » et comment afficher le nombre de cellules vides de la plage.
       numBlanks = 0
       For Each c In Range("TestRange")
           If c.Value = "" Then
               numBlanks = numBlanks + 1
           End If
       Next c
       MsgBox "There are " & numBlanks & " empty cells in this range"
    Cet exemple montre comment affecter le style italique à la police des cellules A1:C5 de la feuille « Sheet1 ». L'exemple utilise la Syntaxe 2 de la propriété Range.
    Worksheets("Sheet1").Range(Cells(1, 1), Cells(5, 3)).Font.Italic = True
    Sub OuvreExcel() 
    'Déclaration des Variables
    Dim MonXl
        'Initialise la variable et charge Excel en arrière plan
        Set MonXl = New Excel.Application 
        'Rend Excel visible, ce n'est pas indispensable, mais plus spectaculaire...
        MonXl.Visible = True 
        'Definition du répertoire Courant
        ChDir "E:\Mes documents\DOC EXCEL" 'Change des répertoire Actif
        'Ouvre un Fichier Excel
        MonXl.Workbooks.Open Filename:= _
            "E:\Mes documents\DOC EXCEL\E MAIL POINT AU 23 MARS 2002 PAR DISTRICT.xls"
        'Selectionne La feuille Nommée TOUS
        MonXl.Sheets("TOUS").Select
        'Copie la feuille en cours Nommée TOUS et en cré une autre au début du classeur
        MonXl.Sheets("TOUS").Copy Before:=Sheets(1)
        'Selectionne un Bloc de Cellules
        MonXl.Range("A4:F1223").Select
        'Copie la Sélection en cours
        MonXl.Selection.Copy
        'Ajoute une feuille au classeur
        MonXl.Sheets.Add
        'Colle la sélection sur la feuille active en cours
        MonXl.ActiveSheet.Paste
        ' renvoi le nom de la feuille active
        NomFeuille = MonXl.ActiveSheet.Name
        'Annule le mode Couper ou Copier et supprime la marque de sélection.
        Application.CutCopyMode = False
        'sélection du filtre automatique
        MonXl.Selection.AutoFilter
        'renvoi le nombre de lignes ou le nombre de colonnes dans la selection
        NbLignes = MonXl.Selection.Rows.Count
        NbLignes = MonXl.Selection.Columns.Count
        'ferme le classeur en cours
        MonXl.ActiveWindow.Close
        'quitte Excel
        MonXl.Quit 
    End Sub
     
    Private Sub Command1_Click()
    Dim MonXl
    Dim retour
    Dim MsgOulk
    Dim myitem
    Dim myrecipient
    Dim destadresse
    Dim message
    'retour = Shell("C:\Program Files\Outlook Express\msimn.exe /mailurl:mailto:dtmdp@wanadoo.fr?subject=mon sujet&Body=" & Text1.Text, vbHide)
    Set MsgOulk = CreateObject("Outlook.Application")
    Set message = MsgOulk.CreateItem(olMailItem)
    message.Recipients.Add ("FR1226")
    message.AddressList.AddressEntries(1).Address = ""
    Debug.Print message.Recipients(1)
    Debug.Print message.Recipients(1).AddressEntry.Address
    message.Name = "dtmdp"
    message.Subject = "toto"
    message.Send
     
    Set MonXl = New Excel.Application 'Ceci initialise la variable et charge Excel en arrière plan
    MonXl.Visible = True 'Rend Excel visible, ce n'est pas indispensable, mais plus spectaculaire...
    'Ouverture d'un Classeur Existant
    MonXl.Workbooks.Open FileName:="C:\Documents and Settings\Administrateur\Mes documents\Classeur1.xls"
    MonXl.Workbooks.Add 'Ajoute un nouveau classeur
    MonXl.Range("A1").Value = "XY" 'Envoie le contenu des textboxes dans les cellules
    MonXl.Range("A2").Value = "ZT"
    MonXl.Range("A3").Value = "RT"
    If MonXl.Range("A3").Value <> "" Then Beep
    MonXl.Range("A1:A3").Select 'Assure la sélection des trois cellules
    'MonXl.Charts.Add 'Ajoute un graphique au classeur courant en s'inpirant des données sélectionnées
    'MonXl.ActiveChart.ChartType = XL3DPie 'Transforme le graphique en Secteur 3D
    'MonXl.ActiveWorkbook.Close False 'Ferme le classeur sans enregistrer
    'MonXl.Quit 'Quitte Excel
    End Sub
    'sélectionner l'ensemble des cellules de la feuille 1
        Xl.Worksheets(1).Cells.Select
        'fixer la police pour l'ensemble des cellules
        Xl.Selection.Font.Name = "Arial"
        Xl.Selection.Font.FontStyle = "Normal"
        Xl.Selection.Font.Size = 9
        'texte justifié à droite
        Xl.Selection.HorizontalAlignment = xlLeft
        'selectionne la colonne D (4eme)
        Xl.Columns("D:D").select
        'fixer la largeur de colonne
        Xl.Columns("D:D").ColumnWidth = 8
        'centrer le texte de la 4 eme colonne
        Xl.Columns("D:D").HorizontalAlignment = xlCenter
        'forcer le type de données (ici @ signifie texte)
        Xl.Columns("D:D").NumberFormat = "@"
        'ajoute un commentaire sur la cellule D1 (4eme colonne 1ere ligne)
        Xl.Sheets(1).Range("D1").AddComment
        'Indique si le commentaire reste affiché ou non
        Xl.Sheets(1).Range("D1").Comment.Visible = False
        'Texte du commentaire affecté à la cellule
        Xl.Worksheets(1).Range("D1").Comment.Text Text:="Mon commentaire"
        'positionner les volets
        Xl.ActiveWindow.SplitRow = 0.733
        Xl.ActiveWindow.SplitColumn = 1.94
        'Figer les volets
        Xl.ActiveWindow.FreezePanes = True
        'mise en place du filtrage automatique
        'Important, il ne faut pas que la fenêtre soit réduite sinon echec 
        Xl.Application.WindowState = xlNormal
        Xl.Worksheets(1).Cells.Select
        Xl.Selection.AutoFilter
         ' Tri des enregistrements  
        Xl.Worksheets(1).Cells.Select
        Xl.Selection.Sort Key1:=Xl.Worksheets(1).Range("A1"), Order1:=xlAscending, Key2:=Xl.Worksheets(1).Range("D1") _
            , Order2:=xlAscending, Key3:=Xl.Worksheets(1).Range("E1"), Order3:=xlAscending, _
            Header:=xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
         ' Filtrage sur colonne 4 (recherche les cellules qui contiennent le mot "neuf" 
        Xl.Selection.AutoFilter Field:=4, Criteria1:="=*neuf*", Operator:=xlAnd
         ' Filtrage sur colonne 14 (recherche les cellules qui sont égales à "Stock" 
        Xl.Selection.AutoFilter Field:=14, Criteria1:="Stock"
        ' Filtrage sur colonne 15 (recherche les cellules dont la valeur est différentes de zéro)
        Xl.Selection.AutoFilter Field:=15, Criteria1:="<>0"
    Cela pourrait être utile à différente personne !!!
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  4. #4
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Je serais bien curieux de voir que ce code fonctionne en VBS.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Public MonWd as Word.Application     ' Pour Word
    Public MonXl as Word.Application       'Pour Excel
    Le typage n'étant pas admis en VBS.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2006
    Messages : 57
    Points : 34
    Points
    34
    Par défaut
    au fait j'ai finalement réussi

    Je suis parti exactement sur la méthode de cedric

    voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    'Ouverture du fichier excel
    Set objExcel = CreateObject("Excel.Application" )
    Set objWorkbook = objExcel.Workbooks.Open("chemin de mon fichier") 
    objExcel.Visible = True
     
    'lancement de la macro dans le fichier excel ouvert
    objExcel.run "MAJ_stats"

    Bon maintenant je dois me demerder pour que mon script écrive directement ce qu'il faut dans la macro une fois lancé !
    Merci quand même les gens


    ps : si qqun peut m'aider quand même ou me mettre sur la voie pour pouvoir écrire dans un box qui s'ouvre une fois la macro lancé et de pouvoir lancer le box se serait genial ^^

  6. #6
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Bonne remarque AlainTech, j'ai corrigé les ereurs sur la déclaration des variables dans le ode que j'ai fournis.
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

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

Discussions similaires

  1. Lancement macro Excel depuis MindManager
    Par jalseth dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 05/07/2008, 17h58
  2. lancer une macro excel depuis une appli access
    Par LostIN dans le forum Access
    Réponses: 1
    Dernier message: 22/08/2006, 11h10
  3. Lancer une macro Excel depuis Access
    Par pascal913 dans le forum Access
    Réponses: 12
    Dernier message: 31/07/2006, 15h31
  4. Lancer une macro Excel depuis Access
    Par marcobosio dans le forum Access
    Réponses: 6
    Dernier message: 05/06/2006, 20h51
  5. Lancement macro excel à partir d'access
    Par frevale dans le forum Access
    Réponses: 3
    Dernier message: 11/04/2006, 13h11

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