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

OpenOffice & LibreOffice Discussion :

Macro envoi mail outlook


Sujet :

OpenOffice & LibreOffice

  1. #1
    Membre à l'essai
    Macro envoi mail outlook
    Bonjour,

    Voilà dans la macro j aimerais savoir comment faire pour que l’envoi se fasse selon la valeur d’une cellule où il y aurait l’adresse mail du destinataire

    Merci d avance

    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 EnvoiMail_Outlook( ) 
     
       Dim oObj As Object , AppOutlook As Object
     
       Dim oMail As Object
     oObj = createUnoService("com.sun.star.bridge.OleObjectFactory") 
     AppOutlook = oObj.createInstance("Outlook.Application") 
     
      oMail = AppOutlook.CreateItem(0) 
     
      With oMail
     
        .To =  ????
     
        .Subject = "Rapport mensuel " & Date 
     
        .Body = "Bonjour," & Chr(10) & _
     
           "Je vous souhaite une bonne lecture." & Chr(10) & Chr(10) & _
     
           "Cordialement" & Chr(10) & _
     
           Environ("username") & Chr(10) & Chr(10)  
     
        .send 
     
      End With
    End Sub

  2. #2
    Membre habitué
    Macro envoi mail outlook
    Bonjour,

    Juste pour la récupération de la valeur d'une cellule. Dans l'exemple de code, je considère que le destinataire se trouve dans la "feuille1", cellule "C6"

    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
      Dim oDoc As object, oFeuille As object, oCell As Object
      Dim sDestinataire As String 
      oDoc = ThisComponent
      oFeuille = oDoc.getSheets.getByName("Feuille1")
      oCell = oFeuille.getCellRangeByName("C6")
      sDestinataire = oCell.String 
     
      'A titre d'exemple
      'Pour afficher la variable (à supprimer par la suite dans ton code)
      Print sDestinataire
    '......  
    '......  
    '......  
    '  Et dans ton code
    .To =  sDestinataire


    Cordialement
    Libre Office Version: 6.4.6.2 (x64)
    Windows 10

  3. #3
    Membre chevronné
    Pourquoi utiliser ce service ?
    Il nécessite l'installation de MS-Outlook et ne fait que piloter cette application propriétaire avec un logiciel libre.

    Sous OpenOffice, le plus simple est d'utiliser com.sun.star.system.SystemMailProvider qui est dédié à l'envoi de courriel de manière interne.
    Rédacteur PHP / Delphi ADO / Novell / OpenOffice.org

    Inutile de m'envoyer vos questions par MP, je ne réponds que par le forum.

  4. #4
    Membre à l'essai
    merci beaucoup pour cette aide cela fonctionne parfaitement

  5. #5
    Membre à l'essai
    pour terminer cette macro pourriez vous me dire si il est possible d'avoir un récapitulatif de l'envoi du mail ?
    En gros d'avoir la date d'envoi le destinataire... qui s'archive sur une feuille

    Je sais pas si je suis bien clair ?!?

    Merci d'avance

  6. #6
    Membre habitué
    Macro envoi mail outlook
    Bonjour,

    Une manière comme une autre de le faire....

    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
    'A mettre après End With
     
    'Considérant que la feuille pour Archiver est la "Feuille2"
    'et que l'on veut mettre la date en colonne A et le destinataire en colonne B
     
    'Récupération de la première ligne vide
    Dim zoneVide As Variant
    Dim oMaZone As Object
    Dim lig As Long 
    oFeuille  = oDoc.getSheets.getByName("Feuille2")
    oMaZone = oFeuille.getCellRangeByName("A1:B200")
    zoneVide = oMaZone.queryEmptyCells.RangeAddresses
    lig = zoneVide(0).StartRow + 1
     
     
    'Insertion des données
    oCell = oFeuille.getCellRangeByName("A" & lig)
    oCell.String = Date 
    oCell = oFeuille.getCellRangeByName("B" & lig)
    oCell.String = sDestinataire


    Cordialement
    Libre Office Version: 6.4.6.2 (x64)
    Windows 10

  7. #7
    Membre à l'essai
    waouhhh un très grand merci pour ces réponses de qualité !!!! J'arrive à bien comprendre la macro et la modifier selon mes besoins avec les lignes informatives dans la macro !!!!
    encore merci pour tout

  8. #8
    Membre à l'essai
    Allez je continue de profiter de votre bonté !
    Je me heurte à un problème j'ai définit une zone d'impression et automatisé l'impression mais pour conclure tout ça j'aimerais que ce que j'imprime soit aussi envoyé par mail ...
    Est ce possible ?
    Merci d'avance



    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
     Sub Impress_send
     
      'IMPRESSION
     
      Dim maZone As Object, oFeuilleImpression As Object 
      Dim Props() As New com.sun.star.beans.PropertyValue
      Dim adrZones(1) As New com.sun.star.table.CellRangeAddress
      Dim oObj As Object , AppOutlook As Object 
      Dim oMail As Object , oFeuille As Object , oCell As Object
      Dim sDestinataire As String
      Dim oDoc As Object
      oDoc = ThisComponent
     
     
      oFeuille = oDoc.getSheets.getByName("Impression") 'Nom de la feuille'
     
      oCell = oFeuille.getCellRangeByName("B58") 
     
     
     
      'Renseigne la cellule avec le mail'
       sDestinataire = oCell.String
     
      oFeuilleImpression = ThisComponent.getSheets.getByName("Impression") 
      Thiscomponent.CurrentController.ActiveSheet = oFeuilleImpression
     
      'Je détermine la zone à imprimer
      maZone = oFeuilleImpression.getCellRangeByName("A3:K53")
      adrZones(0) = maZone.RangeAddress
      oFeuilleImpression.PrintAreas = adrZones()
     
      'J'imprime
      ThisComponent.Print(Props()) 
     
        Rem *** Initialisation du mail *** 'Validation envoi du mail et infos'
     
        Reponse = MsgBox ("Souhaitez-vous envoyer le suivi hebdo à toute l'équipe",132,"Envoi par Email")
     
     
         	If Reponse = 6 then goto Suite
         	Stop
     
         	Suite:
     
       oObj = createUnoService("com.sun.star.bridge.OleObjectFactory")  
       AppOutlook = oObj.createInstance("Outlook.Application")  
     
      oMail = AppOutlook.CreateItem(0)  
     
      With oMail 
        .To = sDestinataire 
        .Subject = "Suivi EEC"
        .Body = "Bonjour l'équipe !"& Chr(13) & Chr(13) & "Voici le suivi" &Chr(10) & Chr(10) & _ 
           "Bonne journée, " & Chr(13) & Chr(13) & "L'équipe Emploi" & Chr(10) & Chr(10)
        .send  
      End With
     
     
      'Message box impression validée et consignes pour modifier imprimante par défaut'
     
       Print "Suivi Hebdo imprimé et envoyé !" & Chr(13) & Chr(13) & "Pour information l'impression s'est lancée automatiquement sur votre imprimante par défaut. Vous pouvez modifier l'imprimante par défaut dans Calc - Fichier - Paramétrage de l'imprimante"    
     
     end sub

  9. #9
    Membre habitué
    Macro envoi mail outlook
    Bonsoir,

    Le corps de ton mail se présente sous forme de chaine de caractère (String).
    Hors ta plage est un tableau de tableaux (array). Il ne peut donc en l'état, être incorporé dans le texte du mail.
    A moins de faire une "bidouille" pour récupérer le contenu de la plage pour en faire une ou plusieurs chaines de caractères.
    Mais là, difficile de faire quelque chose sans un fichier exemple.
    Il faudrait, et ce qui est souvent conseillé sur le forum, c'est de joindre un fichier exemple en pièce jointe avec les macros.
    Au préalable, tu peux anonymiser ton fichier et y mettre des données fictives.
    Avec cela il sera possible de faire quelque chose.

    Évidemment je pourrai créer un fichier Calc fictif, y mettre tes macros, et ensuite travailler sur ce que tu me demande mais je n'ai pas de fil directeur. Et imagines si les contributeurs de ce forum doivent faire cela à chaque fois pour aider quelqu'un cela prendrai des heures inutiles.
    Et en plus pas sûr que cela corresponde à tes besoins. Alors que, si je travaille sur un classeur déjà structuré (même avec des valeurs bidons), je suis sûr d'aller dans le bon sens.

    Je vais tout de même commencer à me pencher sur ton problème en attendant ton fichier exemple.

    Cordialement
    Libre Office Version: 6.4.6.2 (x64)
    Windows 10

  10. #10
    Membre à l'essai
    Bonjour merci de prendre de votre temps afin de résoudre mon problème. Je suis vos précieux conseils et je vous mets en pièce jointe un fichier anonymisé.
    Dans le principe la macro devrait imprimer et envoyé par mail l'ensemble des infos de la feuille.

    Merci d'avance

  11. #11
    Membre habitué
    Macro envoi mail outlook
    Bonjour,
    J'ai regardé ton fichier. Aucune données dedans mais j'ai tout de même les étiquettes (nom des colonnes).
    La plage est relativement importante et récupérer le tout sous forme de chaines de caractères va être un peu long. Ce qui m'inquiète c'est le rendu final (donner l'apparence d'un tableau et alignement des données).

    Donc avant de commencer, il t'il absolument nécessaire que cela apparaisse dans le corps du mail ?

    Un autre solution rapide est de créer par macro un fichier PDF représentant la zone concernée et au travers de la macro de le joindre directement dans le mail.

    Ça je peux le faire très rapidement.
    Auquel cas, j'ai besoin de savoir si tu utilise LibreOffice ou OpenOffice, car depuis un certain les deux API sont différentes dans certains domaines et notamment la messagerie mail.
    Libre Office Version: 6.4.6.2 (x64)
    Windows 10

  12. #12
    Membre à l'essai
    Oui ça serait parfait avec un pdf et pour info j utilise libre office !
    Vraiment grand merci

  13. #13
    Membre habitué
    Macro envoi mail outlook
    Bonjour,

    En pièce jointe ton fichier modifié.

    Avant tout comme ta zone d'impression dépasse le format A4, il faut avant tout, changer le format de ta feuille. Format Page. Onglet Page et mettre en paysage.
    Ceci permettra d'avoir un PDF correct.

    J'ai ajouté le code pour insérer une pièce jointe. Mais comme je n'ai pas OutLook je n'ai pas pu tester.
    Si çà marche pas on pourra utiliser un service interne à LibreOffice comme le dit plus haut "Bidouille"

    Tu testes et tu reviens vers moi si problème.
    Cordialement

    Libre Office Version: 6.4.6.2 (x64)
    Windows 10

  14. #14
    Membre à l'essai
    merci je continue de tester et reviens vers vous

  15. #15
    Membre à l'essai
    Alors le test est concluant même si la macro est un peu longue à s’exécuter et met le fichier en "ne répond pas" tout fonctionne parfaitement.
    J'ai juste tenté de modifier l'endroit où le pdf s'enregistre sans succès.
    Mais vraiment grand merci pour votre temps et votre savoir

  16. #16
    Membre habitué
    Macro envoi mail outlook
    Bonjour,

    Chez moi l'export et la création du PDF met environ 5 secondes, ce qui peut paraître long.
    J'ai ajouté une petite boite d'info "Patientez" le temps de l'opération. Ensuite elle se ferme seule. L'utilisateur saura qu'il faut attendre quelques secondes.

    Pour ce qui est du chemin de sauvegarde, je t'explique. La ligne de code ci dessous fait appel à une fonction qui retourne le chemin du document CALC:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
      'Appel de la fonction pour récupérer le chemin du document Calc  
      sCheminDoc = getDirectory(ThisComponent.URL)


    Si tu veux mettre ce fichier dans un sous répertoire il faut donc faire à la place de:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    sCheminDoc = sCheminDoc & sNomExport &".pdf"


    Mettre:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
      sCheminDoc = ConvertFromURL (sCheminDoc)
      sCheminDoc = sCheminDoc & "ARCHIVES" & getPathSeparator & sNomExport &".pdf"
      'Je remet le chemin sous forme d'URL
      sCheminDoc = ConvertToURL (sCheminDoc)


    Par contre si tu veux un enregistrement spécifique il faudrait me dire où. Directement sur C ou D..... ou dans un endroit de ta session utilisateur. Auquel cas le code est différent. Donc pour l'instant je me suis limité à un sous répertoire de ton fichier CALC principal.
    Cordialement
    Libre Office Version: 6.4.6.2 (x64)
    Windows 10

  17. #17
    Membre à l'essai
    Tout fonctionne parfaitement un grand merci pour votre aide !!

###raw>template_hook.ano_emploi###