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 Outlook Discussion :

[Outlook 2010] Lancer une macro sur un mail sélectionné


Sujet :

VBA Outlook

  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Mars 2014
    Messages : 8
    Points : 2
    Points
    2
    Par défaut [Outlook 2010] Lancer une macro sur un mail sélectionné
    Bonjour à tous.

    Mon problème peut paraître bête mais cela fait plusieurs heures que je recherche partout une solution et je n'en trouve pas.
    J'espère donc pouvoir compter sur vous pour m'aiguiller.

    J'ai construit une macro VBA Outlook qui vient lire les pièces-jointes et les enregistrer sur un emplacement spécifique. Jusque là, tout fonctionnait parfaitement, car je travaillais sur un lancement de ma macro via une règle à réception de mon message qui possédait un sujet particulier.

    Mon code était le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub MacroGSER(MyItem As Outlook.MailItem)
     
        Dim myAttachments As Object
     
        Dim myOrt As String
        Dim i As Integer
     
         'Boîte de dialogue simple pour le chemin de sauvegarde
        myOrt = "J:\Planning_indispo\Test\"
     
            Set myAttachments = MyItem.Attachments
            If myAttachments.Count > 0 Then
     
                'Pour chaque pièce jointe, faire etc...
    A présent, je souhaiterai lancer cette macro manuellement. je sélectionne donc mon message préalablement reçu et je lance ma macro. Mon nouveau code est le suivant :

    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
    Sub MacroGSER()
     
    Dim MyItem As Outlook.MailItem    
    Dim myAttachments As Object
     
        Dim myOrt As String
        Dim i As Integer
     
         'Boîte de dialogue simple pour le chemin de sauvegarde
        myOrt = "J:\Planning_indispo\Test\"
     
            Set myAttachments = MyItem.Attachments
            If myAttachments.Count > 0 Then
     
                'Pour chaque pièce jointe, faire etc...
    sauf qu'à l'exécution, la ligne "Set myAttachments = MyItem.Attachments" renvoit un message d'erreur d'exécution '91' : Variable objet ou variable de bloc With non définie.

    Comment dois-je donc rédiger mon nouveau code pour pouvoir le lancer manuellement et non pas avec une règle ?

    Merci d'avance pour aide !

    Amicalement,
    hobbit3

  2. #2
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Salut,
    si tu repars de ta première macro telle qu'elle est, tu ne touches à rien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SUB Lancement_MACROGSER
     
    Dim ObjItem as object
    Dim ObjMail as outlook.mailitem
     
    Set ObjItem = Application.ActiveInspector.CurrentItem
    If Not ObjItem .Class = olMail Then exit sub
     
    set ObjMail =ObjItem 
    call MacroGSER (ObjMail)
    END SUB

  3. #3
    Candidat au Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Mars 2014
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Salut oliv et merci pour ta réactivité !

    Malheureusement, ta solution ma mène à la même erreur sur la ligne "Set ObjItem = Application.ActiveInspector.CurrentItem"

    As-tu une explication ?

    Encore merci pour ton aide précieuse !

    hobbit3

  4. #4
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    ah oui ton Email doit être ouvert !

    sinon voici pour prendre celui qui est selectionné.


    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
    Sub GetSelectedItems()
        Dim myolApp As New Outlook.Application
        Dim myOlExp As Outlook.Explorer
        Dim myOlSel As Outlook.Selection
        Dim MsgTxt As String
        Dim x As Integer
        MsgTxt = "Vous devez selectionner un seul mail"
        Set myOlExp = myolApp.ActiveExplorer
        Set myOlSel = myOlExp.Selection
        x = myOlSel.Count
        If x <> 1 Then
           MsgBox MsgTxt
           Exit Sub
        End If
    'ca c'est pour l'afficher
        myOlSel.Item(x).Display
    'ca c'est pour le mettre dans la variable précedente
    Set ObjItem=myOlSel.Item(x)
     
        End Sub

  5. #5
    Candidat au Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Mars 2014
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Impeccable ! Cela fonctionne parfaitement à présent.
    Je n'avais pas pensé à appeler ma macro avec une autre ! Un très grand merci à toi

    Tant que je suis là, j'en profite !

    Dans la suite de ma macro, j'ouvre plusieurs classeurs Excel sur lesquels j'effectue divers tâches.

    Je souhaiterai fermer un seul de ces classeurs à la fin de la procédure, mais je ne trouve pas la syntaxe correcte. Aurais-tu cela sous le coude ?

    hobbit3

  6. #6
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    en principe tu dois effecter tes fichiers excel à des variables :

    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
     
     
    Dim appExcel As Excel.Application    'Application Excel
    Dim wbExcel As Excel.Workbook    'Classeur Excel
    Dim wsExcel As Excel.Worksheet    'Feuille Excel
     
    Dim wbExcel2 As Excel.Workbook    'un autre classeur
     
    'Ouverture de l'application
    Set appExcel = CreateObject("Excel.Application")
    appExcel.Visible = True
     
    Set wbExcel = appExcel.Workbooks.Open("c:\temp\ance.xls", 0, 0)    'en écriture
     
    Set wbExcel2 = appExcel.Workbooks.Open("c:\temp\balance.xls", 0, 0)    'en écriture
     
    ' tu fais des trucs
     'tu fermes le premier sans enregistrer
     
     wbExcel.close False
     
     'tu fermes le second en enregistrant
    wbExcel2.save
     wbExcel2.close

  7. #7
    Candidat au Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Mars 2014
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    C'est parfait !
    Décidément très efficace !

    Encore merci et à bientôt !

    hobbit3

  8. #8
    Candidat au Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Mars 2014
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Bonjour.

    Je pensais à un dernier petit détail.

    Comment faire pour fermer le mail que j'ai ouvert pour lancer la macro au début de la procédure ?
    J'aimerai éviter d'avoir à le fermer manuellement une fois la procédure terminée..

    Merci d'avance !

    hobbit3

  9. #9
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Bonjour,
    tout simplement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ObjItem.close olDiscard
    avec
    olDiscard 1 Les modifications apportées au document sont ignorées.
    olPromptForSave 2 L'utilisateur est invité à enregistrer les documents.
    olSave 0 Les documents sont enregistrés.


    mais tu n'es pas obligé de faire le display

    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
    Sub GetSelectedItems()
        Dim myolApp As New Outlook.Application
        Dim myOlExp As Outlook.Explorer
        Dim myOlSel As Outlook.Selection
        Dim MsgTxt As String
        Dim x As Integer
     
    Dim ObjItem as object
    Dim ObjMail as outlook.mailitem
     
        MsgTxt = "Vous devez selectionner un seul mail"
        Set myOlExp = myolApp.ActiveExplorer
        Set myOlSel = myOlExp.Selection
        x = myOlSel.Count
        If x <> 1 Then
           MsgBox MsgTxt
           Exit Sub
        End If
     
    'ca c'est pour le mettre dans la variable précedente
    Set ObjItem=myOlSel.Item(x)
     
    If Not ObjItem .Class = olMail Then exit sub
     
    set ObjMail =ObjItem 
    call MacroGSER (ObjMail)
     
        End Sub

  10. #10
    Candidat au Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Mars 2014
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Bonjour !

    Je suis confronté à un problème que je n'avais pas prévu.

    Dans ma macro outlook, j'ai codé une procédure qui permet d'extraire d'un mail donné deux de ses pièces-jointes lorsque j'exécute la macro.
    Mon code a été écrit pour que les fichiers "Nom1.csv" et "Nom2.csv" soient extraits.
    Mon code est du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    i = 1
    While myAttachments(i).FileName <> "Nom1.csv"
    i = i + 1
    Wend
    Or, il arrive que les fichiers que je recoivent s'écrivent "Nom1 .csv" et "Nom2.csv", avec un espace entre le nom et le type de fichier.

    Comment faire pour extraire l'un ou l'autre des noms en fonction du nom de la pièce-jointe sans crasher la macro ? J'ai bien essayé d'inclure un "Or" dans ma condition While, mais ça ne fonctionne pas.

    En vous remerciant.

    hobbit3

  11. #11
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Bonjour,
    tu peux faire comme cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    i = 1
    While replace(myAttachments(i).FileName," ","") <> "Nom1.csv"
    i = i + 1
    Wend

    ou comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    i = 1
    While instr("Nom1.csv;Nom2.csv;Nom2 .csv;Nom1 .csv",myAttachments(i).FileName) =0
     
    i = i + 1
    Wend

  12. #12
    Candidat au Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Mars 2014
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup !

    La première méthode n'a pas fonctionné, mais la seconde oui !

    Bonne journée.
    hobbit3

  13. #13
    Candidat au Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Mars 2014
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Bonjour à tous !

    Je reviens vers vous pour une petite question d'apparence simple mais à laquelle je ne trouve pas de réponse.

    Je souhaite, depuis une macro Outlook, écrire sur un classeur Excel déjà ouvert.
    Je sais faire cette opération sur un classeur fermé via le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set xlBook = appExcel.Workbooks.Open("X:\Macro.xlsm")
    Set wsExcel = xlBook.Worksheets("Feuil1")
    wsExcel.Cells(30, 1) = hh
    Mais bizarrement, incapable de trouver la bonne formulation pour un classeur déjà ouvert.

    Merci d'avance pour votre aide !

  14. #14
    Membre du Club Avatar de SCryptCypher
    Femme Profil pro
    MacGyver
    Inscrit en
    Novembre 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : MacGyver

    Informations forums :
    Inscription : Novembre 2013
    Messages : 35
    Points : 64
    Points
    64
    Par défaut
    Tout simplement avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set xlBook = appExcel.Workbooks("Macro.xlsm")
    Ou encore, en prévoyant le cas où le fichier n'est pas ouvert :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Set xlBook = Nothing
    On Error Resume Next
    Set xlBook = appExcel.Workbooks("Macro.xlsm")
    On Error GoTo 0
    If xlBook Is Nothing Then Set xlBook = appExcel.Workbooks.Open("X:\Macro.xlsm")
    « Si c’est vert ou si ça remue, c’est de la biologie.
    Si ça pue, c’est de la chimie.
    Si ça ne fonctionne pas, c’est de la physique.
    Si ça occupe des tableaux entiers de formules, c’est des mathématiques.
    Si ça fait ce qu’on dit, mais pas ce qu’on veut, c’est de l’informatique. »

  15. #15
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Salut
    Sans oublier le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set appExcel = GetObject(,"Excel.Application")

Discussions similaires

  1. Lancer une macro sur changement de valeur cellule
    Par maximilien59 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/01/2012, 11h10
  2. Lancer une macro sur changement de valeur cellule
    Par reyzilin dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 13/12/2011, 17h57
  3. lancer une macro sur un evenement Outlook
    Par zenico64 dans le forum VBA Outlook
    Réponses: 1
    Dernier message: 25/11/2010, 10h37
  4. lancer une macro sur une cellule ou sur du texte
    Par xadep dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 02/09/2009, 17h50
  5. [VBA-E]Lancer une macro sur changement de valeur cellule ?
    Par jeremiegrenoble dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/03/2006, 14h22

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