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 :

vba outlook / word


Sujet :

VBA Outlook

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 11
    Points : 5
    Points
    5
    Par défaut vba outlook / word
    Bonjour,
    je suis en train de créer une newsletter automatique et pour cela, je dois récupérer les informations pour la newsletter dans différents e-mails via leurs pièces jointes.
    Tout en VBA, j'ai commencé par classer les mails correspondants aux critères dans un dossier "à traiter", et là, j'ai une boucle pour traiter chacune des pièces jointes présentes dans ce dossier.
    et là, je suis complètement bloquée

    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
     
    Sub concaten()
     
        Dim uneAppli As New Outlook.Application
        Dim docWord As Object
        Dim myName As String
        Dim i As Integer
        Dim NbMail As Long
        Dim Mynamespace As Outlook.NameSpace
     
        Set Mynamespace = uneAppli.GetNamespace("MAPI")
        Set uneAppli.ActiveExplorer.CurrentFolder = Mynamespace.GetDefaultFolder(olFolderInbox)
        NbMail = Mynamespace.Folders.GetFirst.Folders.GetNext.Folders.GetNext.Items.Count
        If NbMail >= 1 Then
            Set docWord = Application.CreateObject("Word.Application")
            docWord.Visible = True
            For i = 1 To NbMail
            'Call word(pj)
            Call deplacer_fin
            ...
        End If
    End Sub
    J'avoue que le code n'est pas super, surtout pour obtenir le nombre de message dans le dossier mais ce n'est pas le plus important pour l'instant.
    bon, j'ai pas tout mis... et "call word(pj)" c'est pour dire que c'est là que je mettrai la procédure avec la pj en paramètre. Mais je ne sais pas du tout comment faire pour que Word récupère la pièce jointe !

    Quelqu'un aurai une idée pour la marche à suivre ? ça devient assez urgent !

  2. #2
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 45
    Points : 49
    Points
    49
    Par défaut
    J'ai le même problème, je ne sais pas si c'est plus simple mais j'ai pensé à un moyen pour détourner le problème :
    ce serait d'ouvrir la pièce jointe, utiliser la fonction "wait" d'outlook et passer la main à Word, mais à l'heure actuelle, je n'y suis toujours pas parvenue.
    Je débute en vba et là, je ne sais pas comment faire !
    Merci de si la réponse vous a servi, ça vous donne aussi des points !
    ainsi que Tagguer si le problème est réglé !

    La culture... ce qui a fait de l'homme autre chose qu'un accident de l'univers. (André Malraux)

  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
    C'est la logique qui n'y est pas.

    Pour récupérer les pièces jointes par Word, il faut les ouvrir dans le répertoire contenant les pièces jointes.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  4. #4
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 45
    Points : 49
    Points
    49
    Par défaut
    J'ai suivit ton conseil :
    j'ai recherché le répertoire dans lequel il y a les e-mail avec les pièces jointes
    ça, c'est bon, maintenant, j'aimerai ouvrir la pièce jointe. Pour cela, j'ai déclaré

    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
    Sub ouvrir_pj()
        Dim appli As Outlook.application
        Dim dossier As Outlook.Folder
        Dim myItem As Outlook.MailItem
        Dim pj As Outlook.Attachments
        Dim myNamespace As Namespace
     
        Set appli = New Outlook.application
        Set myNamespace = Outlook.GetNamespace("MAPI")
        Set dossier = myNamespace.GetDefaultFolder(olFolderInbox).Folders.GetNext
        Debug.Print dossier
        Set myItem = dossier.Items.GetFirst
        Debug.Print myItem.Attachments.Item(1).Filename
        pj = myItem.Attachments.Item(i)
        ...
    End Sub
    j'arrive à lire le nom des pièces jointes, mais ce qui m'agace un peu, c'est que je ne trouve pas la méthode pour ouvrir la pièce jointe (sachant bien que c'est un document Word). Et là, ça bug à pj = myItem.Attachments.Item(1) j'ai essayer avec .Index et bien d'autre mais sans succes

    PS : tous les debug.print c'est pour vérifier que je suis dans le bon sens
    Merci de si la réponse vous a servi, ça vous donne aussi des points !
    ainsi que Tagguer si le problème est réglé !

    La culture... ce qui a fait de l'homme autre chose qu'un accident de l'univers. (André Malraux)

  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
    Tu dois sauver la pièce jointe dans un répertoire du disque dur et pas dans un répertoire outlook.

    Pour récupérer les fichiers, jette un oeil ici
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  6. #6
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 45
    Points : 49
    Points
    49
    Par défaut
    Bon, j'ai modifier mon code pour sauvegader les e-mail sur le disque dur en m'inspirant fortement du lien que tu m'as passé. Pour l'instant, j'en suis à la configuration du chemin et création du dossier si nécessaire.
    si le dossier n'existe pas, alors le code le crée, mais il affiche un message d'erreur : "Erreur d'exécution '13' : imcompatibilité de type"
    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
    Function creer_dossier_sauv(ByVal dossier As String)
     
        On Error GoTo err
        Dim oFSO As Scripting.FileSystemObject
        Dim oFld As Folder
     
        'Instanciation du FSO
        Set oFSO = New Scripting.FileSystemObject
        On Error GoTo err
        If oFSO.FolderExists(dossier) = False Then
            Set oFld = oFSO.CreateFolder(dossier)
        End If
     
    fin:
        Exit Function
    err:
        Select Case err.Number
           Case 13: Debug.Print "incompatibilité de type"
           Case 58: Debug.Print "Le dossier existe déjà"
           Case 76: Debug.Print "Chemin incorrect"
           Case Else: Debug.Print "Erreur inconnue"
        End Select
        Resume fin
     
    End Function
     
    Sub recherche_dossier()
     
        Dim oFSO As Scripting.FileSystemObject
        Dim oFld As Folder
        Dim dossier As String
     
        dossier = ""
        dossier = "D:\stage\2em_annee\"         'chemin du dossier d'enregistrement
        dossier = dossier & "newsletter_" & Format(Now, "dd.mm.yyyy")
     
    Set oFSO = New Scripting.FileSystemObject
    'Accède au dossier
    If oFSO.FolderExists(dossier) = False Then
        Debug.Print "Ce dossier n'existe pas"
        Call creer_dossier_sauv(dossier)
    End If
     
    End Sub
    Puisque le dossier est créé comment se fait il qu'il y ait ce message d'erreur et y a-t-il y moyen de le masquer ?
    Merci de si la réponse vous a servi, ça vous donne aussi des points !
    ainsi que Tagguer si le problème est réglé !

    La culture... ce qui a fait de l'homme autre chose qu'un accident de l'univers. (André Malraux)

  7. #7
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 45
    Points : 49
    Points
    49
    Par défaut
    Je n'ai pas encore résolu le problème précedent mais il y a plus grave : même en m'inspirant du lien vers la manipulation des fichiers en vba, je n'arrive pas à enregistrer la pièce jointe !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub deplacer_fin(ByVal i As Integer)
        Dim myOlApp As New Outlook.Application
        Dim myItem As Outlook.MailItem
        Dim myNameSpace As Outlook.NameSpace
     
        Set myNameSpace = myOlApp.GetNamespace("MAPI")
        Set myItem = myNameSpace.Folders.GetFirst.Folders.GetNext.Folders.GetNext.Items.GetFirst
        Debug.Print myItem.Subject
     
        myItem.Attachments.SaveAsFile "D:\doc1.doc"
    End Sub
    pour la ligne "myItem.Attachments.SaveAsFile "D:\doc1.doc" " j'ai un message d'erreur "438" : propriété ou méthode non gérée par cet objet. Je ne vois pas où est l'erreur ! d'après l'aide d'outlook, c'est ainsi qu'on détermine le chemin et le nom du document qu'on veut enregistrer !
    help !!
    est-ce que ce serait myItem qui ne supporterait pas cet ordre ?
    Merci de si la réponse vous a servi, ça vous donne aussi des points !
    ainsi que Tagguer si le problème est réglé !

    La culture... ce qui a fait de l'homme autre chose qu'un accident de l'univers. (André Malraux)

  8. #8
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 45
    Points : 49
    Points
    49
    Par défaut
    Bon, j'ai résoslu le problème de sauvegarde sur le disque dur. pour ceux que ça peut interresser :
    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
     
     Option Compare Binary
     Option Explicit
     
    Public Sub envoi_sur_HD()
     
    Dim objOutlook As Outlook.Application 'représente l'application outlook
    Dim objItems As Outlook.Items 'représente un objet outlook
    Dim objMailItem As MailItem 'représente un mail
    Dim PJ As Attachment 'représente un fichier joint
    Dim mailIndex As Integer 'représente le numéro d'indexation des mails
    Dim cpt As Integer 'compteur de mails traités
    Dim reponse 'affichage de msg
     
     
    cpt = 0 'initialisation
     
    Set objOutlook = New Outlook.Application 'objOutlook devient l'application
     
    Set objItems = objOutlook.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Items
    'objItems représente la boîte de reception
     
    For mailIndex = 1 To objItems.Count 'pour index de mail allant de 1 au nb total de mail
     
    Set objMailItem = objItems.item(mailIndex) 'objMailItem devient le mail indexé par mailIndex
     
    If objMailItem.Subject Like "informations_Newsletter" Then
        'si le sujet du mail est "inform..." alors
     
         Set PJ = objMailItem.Attachments.item(1) 'PJ reçoit la 1ere pîèce jointe de ce mail et la seule mais objMailItem.Attachemennts est l'ensemble de ses pièces jointes, il faut donc préciser le numéro de celui qui nous interresse
         PJ.SaveAsFile "d:\sondage\" & PJ.DisplayName
         'On sauve la pièce jointe dans le dossier sondage le fichier s'appelle comme la pièce jointe
         objMailItem.Delete 'destuction du mail
         'qui entraine des changement dans l'indexation des mails
         Set objItems = objOutlook.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Items
         'on recommence l'indexation
     
         mailIndex = 0 'on remet l'index à 0 (cette instruction ne semble pas fonctionner ! ????
         cpt = cpt + 1 'et on incrémente le nombre de mail traité
       End If
     
      Select Case mailIndex 'ces instructions servent à résoudre le problème
      Case objItems.Count: Exit For 'de la réinitialisation de l'index (nécessaire après le delete !)
      End Select 'Si l'index est égale au nombre de mail, il faut sortir.
    Next
     
    End Sub
    attention ! me message est supprimer de la boite de récéption par la ligne de code suivante :
    je tiens à préciser que ce code n'est pas de moi.
    Merci de si la réponse vous a servi, ça vous donne aussi des points !
    ainsi que Tagguer si le problème est réglé !

    La culture... ce qui a fait de l'homme autre chose qu'un accident de l'univers. (André Malraux)

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup Asteroide ! ton code m'a préciseuse ! quelques modifications pour moi et c'est parfait ! ça enregistre ! Merci beaucoup ! Je vais enfin pouvoir terminer mon developpement !
    à tous !!

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

Discussions similaires

  1. [VBA Excel Word]Adapter un code Excel a Word
    Par Baxter67 dans le forum VBA Word
    Réponses: 4
    Dernier message: 08/08/2005, 23h43
  2. Réponses: 2
    Dernier message: 04/02/2005, 13h23
  3. [VBA][outlook] récupération des adresses mail
    Par arno2004 dans le forum VBA Outlook
    Réponses: 4
    Dernier message: 27/07/2004, 18h48
  4. Envoi d'un mail en VBA: outlook ne se lance pas
    Par Hannibal dans le forum VBA Access
    Réponses: 4
    Dernier message: 01/06/2003, 15h24
  5. [VBA-W] [Word] Insérer une image MSChart
    Par fredo1664 dans le forum VBA Word
    Réponses: 2
    Dernier message: 20/11/2002, 09h09

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