Précédent   Forum du club des développeurs et IT Pro > Logiciels > Solutions d'entreprise > Lotus Notes
Lotus Notes Forum d'entraide sur le logiciel de travail collaboratif Lotus Notes
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 05/07/2012, 12h06   #1
omarter
Invité régulier
 
Inscription : mars 2007
Messages : 32
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 32
Points : 7
Points : 7
Par défaut Connaitre le mail de l'expediteur en VBA Excel (Lotus 8.5)

Bonjour,

J'ai un fichier excel qui envoi un mail en automatique à :
- la personne qui rajoute des infos dans le fichier excel (Utilisateur)
- a l'administrateur du fichier excel (Admin)

Pour faire cet envoie de mail, j'utilise la session Lotus de l'utilisateur.

Pour trouver l'adresse email de l'utilisateur, je bricole un mail avec la session de l'OS mais ca ne semble pas être fiable en fonction des UserName OS.

Il doit y avoir un moyen de trouver le mail de l'utilsateur non via Lotus non ?
Comment puis-je faire ?

Merci pour votre aide
omarter est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2012, 14h20   #2
Mandraxx
Membre éclairé
 
Avatar de Mandraxx
 
Homme
Architecte de système d'information
Inscription : mai 2011
Messages : 168
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France, Gers (Midi Pyrénées)

Informations professionnelles :
Activité : Architecte de système d'information
Secteur : Conseil

Informations forums :
Inscription : mai 2011
Messages : 168
Points : 374
Points : 374
Bonjour,

Il faut récupérer le document site actuel puis extraire le champ ImailAddress qui doit contenir l'adresse Internet de l'utilisateur courant ou bien tout autre champ suivant le mode d'adressage.

Bref sur le principe, ça donnerait :
Code :
1
2
3
4
5
Set session = CreateObject("Notes.NotesSession")
Set db = session.GetDatabase("","names.nsf",false)
Set view = db.GetView("Locations")
Set site = view.GetDocumentByKey(session.GetEnvironmentString("Location",True))
emailAdress = site.GetItemValue("ImailAddress")(0)
A adapter bien sûr pour gérer les cas d'erreurs et autres aléas liées à la pratique (client Notes fermé, etc.).

@+
__________________
Le choix motivé par le seul argument de modernité est intrinsèquement dépourvu de créativité.
Mandraxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2012, 14h13   #3
omarter
Invité régulier
 
Inscription : mars 2007
Messages : 32
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 32
Points : 7
Points : 7
Merci pour votre réponse.
Par contre, a la ligne "AdresseDemandeur = site.GetItemValue("ImailAddress")(0)", la macro sort sur le message d'erreur.

Auriez une idée par rapport au code source ci-dessous ?

En tout cas, merci pour votre réponse.

Code :
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
Sub UseLotus() '(CheminEtFichier As String, Sujet As String, Message As String)
    Dim oSession As Object     'CreateObject("Notes.NotesSession")
    Dim UserName As String     'Nom d'utilisateur
    Dim DataBase As Object     'Base des mails
    Dim DataBaseName As String 'Nom de la base
    Dim Document As Object     'Mail
    Dim AdresseAdmin As String
    Dim AdresseDemandeur As String
    Dim Workspace As Object
    'Dim UIdoc As Object
    Dim AttachME As Object     'Fich joint en RTF
    Dim AttachF1 As Object     '1' pièce attachée
    Dim i, j, txtbody, CheminEtFichier, Msg$, T$
    Dim Db As Object
    Dim View As Object
    Dim site As Object
    


    
    On Error GoTo ErreurNET: Err.Clear '*****
    

    
    
    ' Crée la session
    Set oSession = CreateObject("Notes.NotesSession")
    Set Workspace = CreateObject("Notes.NotesUIWorkspace") '''''
   ' Set Document = Workspace.CurrentDocument 'test2
    ' Récupère nom d'utilisateur
    UserName = oSession.UserName
    DataBaseName = Left$(UserName, 1) & Right$(UserName, (Len(UserName) - InStr(1, UserName, " "))) & ".nsf"
    ' Ouvre la base des mails (si fermé, ouvre et demande le password)
    Set DataBase = oSession.GetDatabase("", DataBaseName)
    If Not DataBase.IsOpen Then DataBase.OPENMAIL
    
    '########################## envoi ###############################################
    'récupère dans la feuille nommée NomDeLaFeuilDATA$ et le Range nommé "CellDATA_AdresDestinataire"
    'les adresses séparées par ";"
    Dim Tablo As Variant, AdresDestinataire As String
    ' AdresDestinataire = Sheets("data").Range("b5")
    AdresseAdmin = "o.marter@chatelain.ch" ' envoie a l'admin AC
    
    Set Db = oSession.GetDatabase("", "names.nsf", False)
Set View = Db.GetView("Locations")
Set site = View.GetDocumentByKey(oSession.GetEnvironmentString("Location", True))
AdresseDemandeur = site.GetItemValue("ImailAddress")(0)
    
    
    
    
    
   ' AdresseDemandeur = Left(OSUserName, 1) & "." & Right(OSUserName, Len(OSUserName) - 1) & "@chatelain.ch" ' envoie au demandeur
    If AdresseAdmin = AdresseDemandeur Then
        AdresDestinataire = AdresseAdmin
        Else
        AdresDestinataire = AdresseAdmin & ";" & AdresseDemandeur
    End If
    If InStr(AdresDestinataire, ";") = 0 Then AdresDestinataire = AdresDestinataire & ";"
    Tablo = Split(AdresDestinataire, ";")
    '       boucle envoi                 .
    For i = LBound(Tablo) To UBound(Tablo)
     If Trim(Tablo(i)) > "" Then
        AdresDestinataire = Tablo(i)
        
        'crée le document et colle /AdresDestinataire /Sujet /Message
        Set Document = DataBase.CREATEDOCUMENT
        
        Document.Form = "Memo"
        Document.SendTo = AdresDestinataire
        Document.Subject = AC_New_Number & " - Une nouvelle action a été crée par " & Sheets("Description").TextBox1
        
        'définition du corps du message
        'For j = 1 To 10
            txtbody = txtbody & Range("D" & j + 4) & vbLf
            txtbody = "Problème : " & Sheets("Description").TextBox6 & vbLf
            txtbody = txtbody & "Cause potentielle : " & Sheets("Description").TextBox5 & vbLf
            txtbody = txtbody & vbLf & vbLf & vbLf & "E-mail généré automatiquement par la base Amélioration Continue"
            txtbody = txtbody & vbLf & Workbooks(ActiveWorkbook.Name).FullName
        'Next j
        Document.Body = txtbody
          
          
          '-----------test2---------------
        Worksheets("Description").Range("A1:Q30").CopyPicture
        Call Document.GotoField("Body")
        Call Document.Paste
          
        
        'Joint le Fichier s'il y en a un !?
        If CheminEtFichier <> "" Then
           Set AttachME = Document.CREATERICHTEXTITEM("Attachment")
           Set AttachF1 = AttachME.EmbedObject(1454, "", CheminEtFichier, "Attachment")
        End If
        
        'Envoi le Mail
        Document.SAVEMESSAGEONSEND = False 'True svg dans les courriers envoyés
        Document.PostedDate = Now()
        Document.send 0, AdresDestinataire
        ' suite...
        Set Document = Nothing: Set AttachME = Nothing: Set AttachF1 = Nothing
     End If
    Next
    GoTo FinMail ' fin ##############################################################
    
ErreurNET:
    Msg$ = "Erreur " & Err.Source & "  No " & Err.Number & vbLf & vbLf & Err.Description
    T$ = "Envoi Mail: Problème de connexion !?"
    MsgBox Msg$, vbCritical, T$, Err.HelpFile, Err.HelpContext
    GoTo FinMail
    
FinMail:
    Set oSession = Nothing: Set DataBase = Nothing
    Set Document = Nothing: Set AttachME = Nothing: Set AttachF1 = Nothing
    On Error GoTo 0: Err.Clear
End Sub
omarter est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2012, 10h12   #4
Mandraxx
Membre éclairé
 
Avatar de Mandraxx
 
Homme
Architecte de système d'information
Inscription : mai 2011
Messages : 168
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France, Gers (Midi Pyrénées)

Informations professionnelles :
Activité : Architecte de système d'information
Secteur : Conseil

Informations forums :
Inscription : mai 2011
Messages : 168
Points : 374
Points : 374
Bonjour,

Quel est le message d'erreur obtenu ?
Est-ce un "Object variable not set" ?

L'API Notes a la fâcheuse habitude de renvoyer Nothing en cas d'erreur Il faut donc souvent tester les objets avec un If Not x Is Nothing Then.

Si par exemple, il ne trouve pas le document site, la variable site vaudra Nothing et du coup, l'instruction d'après échoue. Il faut donc tester ce qui est mal renseigné afin de pouvoir déterminer d'un point de vue admin les paramètres à adapter (partage du fichier ID, lancement du client Notes, etc.)

Vous pouvez aussi vérifier la valeur de la variable Location dans le fichier notes.ini (dans le dossier programme de l'installation Lotus Notes) : si le document site est réservé à un ID utilisateur, il se peut qu'il faille analyser cette valeur un peu plus en détail pour trouver le nom du document site actuel (premier élément d'une liste de valeurs séparées par des virgules).

@+
__________________
Le choix motivé par le seul argument de modernité est intrinsèquement dépourvu de créativité.
Mandraxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2012, 14h49   #5
omarter
Invité régulier
 
Inscription : mars 2007
Messages : 32
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 32
Points : 7
Points : 7
Merci pour votre réponse. Par contre, je crains que je n'ai pas toutes les compétences pour tout comprendre.

Alors voici ce que je peux vous dire :

- Il s'agit de l'erreur N°91 avec un object variable non définit.
- Une fois le set sur view fait, la variable "view" reste en "Nothing" (etat apres survole avec la souris lors de l'execution du code).
Est normal que dans la ligne
Code :
Set view = db.GetView("Locations")
"locations" est au pluriel ? Dans le fichier note.ini, je n'ai que Location au singulier.

Est-ce qu'avec ces informations vous pouvez m'aider ?

J'ai bien l'impression que j'ai affaire a un pro, peut être que vous avez une solution a un autre problème lié a lotus : http://www.developpez.net/forums/d12...e/#post6766172
omarter est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2012, 15h31   #6
Mandraxx
Membre éclairé
 
Avatar de Mandraxx
 
Homme
Architecte de système d'information
Inscription : mai 2011
Messages : 168
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France, Gers (Midi Pyrénées)

Informations professionnelles :
Activité : Architecte de système d'information
Secteur : Conseil

Informations forums :
Inscription : mai 2011
Messages : 168
Points : 374
Points : 374
Ok, donc c'est bien un élément qui n'est pas trouvé par l'API.

Si c'est view qui reste à Nothing et que db est correctement renseignée après le GetDatabase, c'est effectivement qu'il ne trouve pas la vue dans le carnet d'adresses.

Vous pouvez essayer d'ouvrir le fichier names.nsf local dans l'outil Designer et vérifier la présence de la vue Avancé\Sites (elle doit normalement avoir un alias Locations). Si ce n'est pas le cas (ça peut dépendre de la version du client...), ça explique pourquoi il ne la trouve pas...
Vous pourriez aussi utiliser la vue ($Locations) mais je ne suis pas sûr que le GetDocumentByKey fonctionne car le nom du document site vient en second, c'est donc plus délicat...

Le Location (au singulier) du notes.ini est utilisé quant à lui par l'appel à GetEnvironmentString, il indique quel est le document site actuellement utilisé.

Après, là comme çà, je n'ai pas plus d'idées... Il faut fouiller l'aide de Designer (LotusScript étant très proche de VBA, la documentation des classes LotusScript est très utile pour comprendre le fonctionnement de l'API : la seule différence réside dans le fait que l'on construit avec New sous Lotus et CreateObject en VBA).

J'avais effectivement vu l'autre post mais là, ça dépasse mes compétences : je suis administrateur Domino, pas développeur, je me débrouille donc sur les scripts d'infra mais quand ça va trop loin en dév, je suis perdu .

@+
__________________
Le choix motivé par le seul argument de modernité est intrinsèquement dépourvu de créativité.
Mandraxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2012, 11h37   #7
omarter
Invité régulier
 
Inscription : mars 2007
Messages : 32
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 32
Points : 7
Points : 7
Merci pour votre réponse.

Si Designer n'est pas installé sur mon poste ( en tout cas je ne trouve rien dans C:\Programmes), ai-je un autre moyen de vérifier le fichier name.nsf ?
omarter est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2012, 21h09   #8
Mandraxx
Membre éclairé
 
Avatar de Mandraxx
 
Homme
Architecte de système d'information
Inscription : mai 2011
Messages : 168
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France, Gers (Midi Pyrénées)

Informations professionnelles :
Activité : Architecte de système d'information
Secteur : Conseil

Informations forums :
Inscription : mai 2011
Messages : 168
Points : 374
Points : 374
Bonjour,

Il y a bien maintenir Ctrl+Shift avec clic droit sur la base et "Aller à..." qui montre toutes les vues (même les vues cachées) mais ce n'est pas aussi bien que Designer car on ne voit pas les alias.

@+
__________________
Le choix motivé par le seul argument de modernité est intrinsèquement dépourvu de créativité.
Mandraxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2012, 08h52   #9
omarter
Invité régulier
 
Inscription : mars 2007
Messages : 32
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 32
Points : 7
Points : 7
Désolé de mon ignorance, mais via quelle application je peux faire cette manip (Ctrl+Shift avec clic droit sur la base et "Aller à..." ) ?
omarter est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2012, 13h22   #10
Mandraxx
Membre éclairé
 
Avatar de Mandraxx
 
Homme
Architecte de système d'information
Inscription : mai 2011
Messages : 168
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France, Gers (Midi Pyrénées)

Informations professionnelles :
Activité : Architecte de système d'information
Secteur : Conseil

Informations forums :
Inscription : mai 2011
Messages : 168
Points : 374
Points : 374
Bonjour,

Depuis le client Notes standard, sur le signet du names.nsf (Carnet d'adresses personnel) qui est situé sur la zone Esapce de travail.

On maintient Ctrl+Shift enfoncées pendant que l'on clique avec le bouton droit de la souris sur le signet -> Application (ou Base de documents avant la V8) -> Aller à...

@+
__________________
Le choix motivé par le seul argument de modernité est intrinsèquement dépourvu de créativité.
Mandraxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2012, 17h51   #11
omarter
Invité régulier
 
Inscription : mars 2007
Messages : 32
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 32
Points : 7
Points : 7
Merci pour vos indications, j'ai trouvé la vue ($Locations).

Donc visiblement, le non fonctionnement ne provient pas de ca.

Avez vous une autre piste ?

En tout cas, merci d'apporter votre contribution à mon problème.
omarter est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/07/2012, 07h51   #12
Mandraxx
Membre éclairé
 
Avatar de Mandraxx
 
Homme
Architecte de système d'information
Inscription : mai 2011
Messages : 168
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France, Gers (Midi Pyrénées)

Informations professionnelles :
Activité : Architecte de système d'information
Secteur : Conseil

Informations forums :
Inscription : mai 2011
Messages : 168
Points : 374
Points : 374
Bonjour,

Dans ce cas, il faut remonter d'un cran : est-ce que le GetDatabase retourne bien un handle différent de Nothing et est-ce qu'il pointe sur la bonne base (on peut le vérifier en affichant la propriété Title de cet objet et le comparer au titre de la base locale names.nsf dans le client Lotus) ?

@+
__________________
Le choix motivé par le seul argument de modernité est intrinsèquement dépourvu de créativité.
Mandraxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 04h56.


 
 
 
 
Partenaires

Hébergement Web