5/5 (46 avis)
Vue 59 729 fois - Téléchargée 1 395 fois
Option Explicit '---------- API ----------- 'pour faire passer au premier plan Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long 'pour ouvrir la fenetre Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long 'pour verifier si la Lotus est ouvert Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Dim sSrvr As String 'the mail server for the current user Dim MailDbName As String 'THe current users notes mail database name Dim UserName As String 'The current users notes name Dim retval As Variant 'Holds return value for functions handle '---------------- fonction ouverture de session Notes ----------- Function CreateNotesSession() As Boolean Const notesclass$ = "NOTES" Const SW_SHOWMAXIMIZED = 3 'plein ecran Const SW_SHOWMMINIZED = 2 'reduire Const SW_SHOWWINDOW = 1 'fenetre Const SW_SHOW = 5 Dim Lotus_Session As Object Dim rc& Dim lotusWindow& lotusWindow = FindWindow(notesclass, vbNullString) Set Lotus_Session = CreateObject("Notes.NotesSession") sSrvr = Lotus_Session.GETENVIRONMENTSTRING("MailServer", True) MailDbName = Lotus_Session.GETENVIRONMENTSTRING("MailFile", True) UserName = Lotus_Session.UserName DoEvents 'Ouverture de Lotus Notes retval = Shell("C:\APPLI\Notes5\notes.exe =h:\notes\notes.ini", vbMaximizedFocus) 'verifier que Lotus est bien ouvert (recupere le handle) lotusWindow = FindWindow(notesclass, vbNullString) If lotusWindow <> 0 Then rc = ShowWindow(lotusWindow, SW_SHOW) rc = SetForegroundWindow(lotusWindow) CreateNotesSession = True Else CreateNotesSession = False End If End Function Sub CreateMailandAttachFileAdr(Optional IsSubject As String = "", Optional SendToAdr As String, Optional CCToAdr As String, Optional BCCToAdr As String = "", Optional Attach1 As String = "", Optional Attach2 As String = "", Optional body As String = "") Const EMBED_ATTACHMENT As Integer = 1454 Const EMBED_OBJECT As Integer = 1453 Const EMBED_OBJECTLINK As Integer = 1452 Dim s As Object ' use back end classes to obtain mail database name Dim db As Object ' Dim doc As Object ' front end document Dim beDoc As Object ' back end document Dim workspace As Object ' use front end classes to display to user Dim bodypart As Object ' Dim bodyAtt As Object ' Dim lbsession As Boolean lbsession = CreateNotesSession If lbsession Then 'cree la session Lotus Notes Set s = CreateObject("Notes.Notessession") 'se connecte a sa database Set db = s.getDatabase(sSrvr, MailDbName) If db.ISOPEN = True Then 'database deja ouvert Else Call db.Openmail End If 'cree un document memo Set beDoc = db.CreateDocument beDoc.Form = "Memo" 'construction du mail Set bodypart = beDoc.CREATERICHTEXTITEM("Body") 'beDoc.From = "Moi" 'inutile beDoc.SendTo = SendToAdr beDoc.CopyTo = CCToAdr beDoc.BlindCopyTo = BCCToAdr beDoc.Subject = IsSubject '----------------------------------------- 'Remarque si destinataire multiple il suffie de mettre un tableau d'e-mail dans SendTo (CopyTo,BlindCopyTo) 'exemple : 'Dim recip(25) as variant 'recip(0) = "emailaddress1" 'recip(1) = "emailaddress2" e.t.c 'beDoc.sendto = recip '---------------------------------------- ' documents joint 1 If Len(Attach1) > 0 Then If Len(Dir(Attach1)) > 0 Then Set bodyAtt = bodypart.EmbedObject(EMBED_ATTACHMENT, "", Attach1, Dir(Attach1)) End If End If ' documents joint 2 If Len(Attach2) > 0 Then If Len(Dir(Attach2)) > 0 Then Call bodyAtt.EmbedObject(EMBED_ATTACHMENT, "", Attach2, Dir(Attach2)) End If End If 'Affichage du mail dans Lotus Notes Set workspace = CreateObject("Notes.NotesUIWorkspace") Call workspace.EditDocument(True, beDoc).FieldSetText("Body", body) Set s = Nothing Else MsgBox "Votre Lotus Notes est fermé !" End If End Sub Private Sub envoyer_Click() CreateMailandAttachFileAdr Msujet.Text, Mto.Text, Mcc.Text, Mbcc.Text, MdocJoint1.Text, MdocJoint2.Text, Mbody.Text End Sub
31 déc. 2010 à 17:42
Quand j'ai ajouté l'instruction ci-dessus mentionnée, ça a fait apparaître la pièce jointe, mais ça a levé une exception sur cette instruction, objet incompatible si je me rappelle bien.
Je n'ai pas trop cherché du côté de On Error Resume Next, mais avec ceci ça a l'air de marcher, on verra la semaine prochaine pour une deuxième pièce jointe :
Set AttachME = beDoc.CREATERICHTEXTITEM(Attach1)
Set EmbedObj = AttachME.EMBEDOBJECT(1454, "", Attach1)
(Attach1 est le chemin vers le fichier - AttachME et EmbedObj sont déclarés comme objets, je me demande si j'ai déclaré la bonne référence puisqu'il n'y a que le "late binding" qui fonctionne)
31 déc. 2010 à 17:08
Il y a quand même autre chose : je me demande bien comment je peux être le premier à rencontrer le problème en fonction du nombre d'intervenants dans le fil, je n'ai pu voir la pièce jointe dans le message qu'après avoir ajouté en ligne 111 :
Call workspace.EDITDOCUMENT(True, beDoc).FIELDSETTEXT("Attachment", bodyAtt)
et je ne suis arrivé à cette conclusion, au bout de quelques heures, que parce qu'en VB aussi, quand on a ajouté un objet à une collection, il faut mettre à jour la collection ensuite pour l'exploiter.
Par curiosité, je ne sais pas trop à quoi sert le quatrième argument de EmbedObject, là où on a mis Dir(Attach1). J'ai mis "piecejointe" dedans, et je n'ai vu apparaître "piecejointe" nulle part.
En mettant en commentaire l'API ShowWindow j'ai pu éviter de faire apparaître une fenêtre bizarre, et les quelques tests que j'ai faits semblent donner un résultat correct jusque là, on verra si quelqu'un a un apport intéressant en réponse à la question dans le forum.
30 déc. 2010 à 17:47
Ce n'est pas dramatique puisque si je la sélectionne le mail vient se mettre devant, mais ça peut troubler les utilisateurs.
Comme ce n'est pas le même sujet puisque là le thème est de parcourir une arborescence pour sélectionner la bonne fenêtre, j'ai posé la question là :
http://www.vbfrance.com/forum/sujet-SELECTIONNER-FENETRE-LOTUS-NOTES_1489504.aspx
14 avril 2010 à 05:37
J'allais oublier. Grâce aux codes glanés çà et là, j'ai pu envoyer des fichiers Excel par LotusNotes avec Access(2003). D'autres lignes de code vba me permettent maintenant de concaténer les adresses e-mail dans une requête en Access, et de les inscrire dans la fenêtre des destinataires LotusNotes.
Je dois à tous les Codes-Sourciers au moins un champ Mémo de mercis.
Là où j'ai besoin d'aide, c'est que je ne sais pas comment dépasser la limite de 250 caractères du champ texte "Courriels" de la requête "R_AdrCourriels", ce qui me limite à environ 9 adresses concaténées.
La concaténation est faite par une Fonction en VBA
Je me demande si il est possible, au lieu d'utiliser la requête "R_AdrCourriels", d'écrire directement, en VBA, un code SQL qui ferait la même chose que la requête, mais en "forçant" le type Mémo pour le champ "Courriel".
Et... Comment dois-je m'y prendre ?
Merci d'avance
Bonne journée
Chordially
Est-ce que quelqu'un a une idée ?
14 avril 2010 à 04:58
Le lien ftp écrit par SeHN ne fonctionnait pas pour moi.
En cherchant un peu je suis arrivé à celui-ci :
http://suitedev.psclistens.com/lotus/smtsuite/smtstdev.nsf/c6b28d896717ee1386256a310011fee1/8bd591160a12d2a986256a3100122494!OpenDocument
Juste au cas où cela pourrait servir.
Bonne journée
Chordially
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.