Question simple sur InStr et adresse e-mail... [VBA] - VB/VBA/VBS - Programmation
Marsh Posté le 19-04-2005 à 14:09:06
normalement il y a une méthode qui permet de savoir si une chaîne de caractère et contenu dans une autre.
Marsh Posté le 19-04-2005 à 14:40:54
En effet essaie de partir là-dessus... La méthode c'est InStr.
Et il te faudra tester chacun des 3 mots avec un opérateur booléen...
Je ne crois pas qu'il y ait une autre possibilité... Le "LIKE" de SQL n'existe pas à ma connaissance en VB
Marsh Posté le 19-04-2005 à 14:54:43
merci pour vos reponses! je vais voir si je peux me debrouiller avec ca.
Marsh Posté le 19-04-2005 à 16:58:20
Vous pensez que cela peut marcher avec .EmailAdress ?
Par exemple pour des adresses venant du domaine gmail.com:
If InStr(Item.Email1Address, "gmail" ) > 0 Then
(si je vous demande c'est que cette ligne marche pas en fait...)
Merci!
Marsh Posté le 20-04-2005 à 00:36:37
"cette ligne marche pas" n'est pas un message d'erreur que je connais (ni ne comprends).
QUEL EST LE MESSAGE D'ERREUR??????
Marsh Posté le 20-04-2005 à 09:17:33
AlainTech a écrit : "cette ligne marche pas" n'est pas un message d'erreur que je connais (ni ne comprends). |
Oups, desole!
Le message d'erreur est :
Error number: 438
Error description: Object does not support this property or method.
En gros, ca veut surement dire que Email1Address ne fonctionne pas avec InStr.
Vous ne connaissez-pas un autre moyen?
(Rappel: pour que que la condition soit valide si dans l'adresse email de l'envoyeur se trouve une chaine de caracteres "gmail" )
Merci!
Marsh Posté le 20-04-2005 à 09:30:41
Salut,
Est-ce que tu as pas moyen de faire plutôt qqchose du genre:
If InStr(Item.Email1Address.Text, "gmail" ) > 0 Then
Le message d'erreur vient du fait que ton Item.Email1Address ne renvoie pas une chaîne de caractère (enfin je pense).
Voilà...
Marsh Posté le 20-04-2005 à 10:28:44
gfa a écrit : Salut, |
Non ca marche pas
J'obtiens le meme message d'erreur
Ca doit bien pourtant etre possible!
Marsh Posté le 20-04-2005 à 11:48:26
Tu es sûr que Email1Address est bien une propriété de ton Item?
Marsh Posté le 20-04-2005 à 11:59:19
gfa a écrit : Tu es sûr que Email1Address est bien une propriété de ton Item? |
A priori oui:
--------------------------------
Sub DAS()
On Error GoTo DAS_err
Dim ns As NameSpace
Dim Inbox As MAPIFolder
Dim Mail As MailItem
Dim Item As Object
Dim Atmt As Attachment
Dim FileName As String
Dim i As Integer
Dim DAS As MAPIFolder
Set ns = GetNamespace("MAPI" )
Set Inbox = ns.GetDefaultFolder(olFolderInbox)
Set DAS = Inbox.Folders("DAS" )
i = 0
------------------------------------------------------------
J'avais essaye avec:
If InStr(Mail.Email1Address.Text, "gmail" ) > 0 Then
Mais j'obtiens le message d'erreur suivant:
Error number: 91
Error description: Object variable or Withblock variable not set...
Marsh Posté le 20-04-2005 à 12:03:50
Ben il me semble que dans ton code il manque l'initialisation de Mail
Et pour VB Mail ne pointe sur rien du tout...
Faudrait faire un Set Mail = ...
Mais là je sais pas trop je me suis jamais amusé avec les "classes" Outlook (je suppose que c'est de ça qu'il s'agit).
Marsh Posté le 20-04-2005 à 15:36:51
gfa a écrit : Ben il me semble que dans ton code il manque l'initialisation de Mail |
Baah "Mail" pointe sur "MailItem" soit un message e-mail non?
Marsh Posté le 20-04-2005 à 16:27:52
[/cpp]
llllllllll a écrit : Baah "Mail" pointe sur "MailItem" soit un message e-mail non? |
Hmmmm pas tout à fait, en fait quand tu fais le Dim, tu dis à VB de quel type de variable sera la variable Mail... Mais par contre tu ne l'assignes pas en faisant un simple Dim.
Regarde par exemple avec ta variable Inbox, tu l'as déclarée (en faisant le Dim) et tu lui as affecté une "valeur" (en faisant le set). Par contre pour Mail, tu n'as fait que sa déclaration...
Pour moi, à partir de ton "objet" Inbox, tu dois affecté à ta variable Mail un MailItem justement... En faisant peut-être qqch comme:
Code :
|
Mais ce bout de code est à prendre avec bcp de prudence il faut très certainement le tripatouiller un peu
Marsh Posté le 20-04-2005 à 16:45:36
gfa a écrit : [/cpp]
|
Ah d'accord! Merci, j'avais pas compris. Pour le No de mail, il faudrait que cela s'applique a tous. Tu saurais ce qu'il faudrait que j'ecrive? Je me debrouille pour le tripatouillage
(il n'y a rien dans l'aide a part des ReplyAll
Marsh Posté le 20-04-2005 à 16:52:53
llllllllll a écrit : Ah d'accord! Merci, j'avais pas compris. Pour le No de mail, il faudrait que cela s'applique a tous. Tu saurais ce qu'il faudrait que j'ecrive? Je me debrouille pour le tripatouillage |
Ben en fait si j'ai à peu près compris, ce que tu désires faire c'est de scanner la Inbox pour repérer les mails venant d'un domaine bien précis c'est juste?
Alors si c'est ça, il te faut faire une boucle For avec comme borne max items.count - 1 si l'indice des items commence à 0 (ce qui est sûr à 90%).
Mais bon, si tu fais tout ça pour ensuite déplacer des e-mails dans un répertoire de Outlook, tu ferais mieux d'utiliser l'assistant Gestion des messages du menu Outils d'Outlook
Marsh Posté le 20-04-2005 à 17:04:22
gfa a écrit : Ben en fait si j'ai à peu près compris, ce que tu désires faire c'est de scanner la Inbox pour repérer les mails venant d'un domaine bien précis c'est juste? |
aaah si c'etait que ca... je n'embeterai personne en fait ce que je veux c'est que le code sauve le fichier attache de certains messages (provenant de gmail ou autre) dans un dossier windows sur un serveur en le "taguant" d'une date, pour ensuite le mettre a la poubelle en faisant comme si on l'avait lu.
Tout marche bien en fait, mais je galere au niveau des criteres de selection du mail: je ne peux pas le faire avec SenderName (trop precis), les keywords [If InStr(Item.Subject, "blablabla" ) > 0 Then] ne sont pas assez exhaustifs, l'ideal dans mon cas est le domaine de l'adresse email.
Voila le code en entier qui marche bien avec les keywords, on sait jamais cela pourra peut etre t'etre utile un jour!
Sub DAS()
On Error GoTo DAS_err
Dim ns As NameSpace
Dim Inbox As MAPIFolder
Dim Mail As MailItem
Dim Item As Object
Dim Atmt As Attachment
Dim FileName As String
Dim i As Integer
Dim DAS As MAPIFolder
Set ns = GetNamespace("MAPI" )
Set Inbox = ns.GetDefaultFolder(olFolderInbox)
Set DAS = Inbox.Folders("DAS" )
i = 0
'-----------------------------------------------------------------------------------
'-----------------------------------------------------------------------------------
For Each Item In DAS.Items
For Each Atmt In Item.Attachments
If InStr(Item.Subject, "Keyword" ) > 0 Then
FileName = "X:\Folder\" & _
Format(Item.CreationTime, "yymmdd_" ) & Atmt.FileName
Atmt.SaveAsFile FileName
i = i + 1
Item.UnRead = False
Item.Delete
End If
Next Atmt
Next Item
'-----------------------------------------------------------------------------------
'-----------------------------------------------------------------------------------
DAS_exit:
Set Atmt = Nothing
Set Item = Nothing
Set ns = Nothing
Exit Sub
'-----------------------------------------------------------------------------------
DAS_err:
MsgBox "An unexpected error has occurred." _
& vbCrLf & "Please note and report the following information." _
& vbCrLf & "Macro Name: DAS" _
& vbCrLf & "Error Number: " & Err.Number _
& vbCrLf & "Error Description: " & Err.Description _
, vbCritical, "Error!"
Resume DAS_exit
End Sub
Tu penses que je devrais mettre quoi alors pour Set Mail?
[Set Mail = Inbox.Items("-1" )] ?
Je ne suis pas tres familier avec les boucles...
Marsh Posté le 21-04-2005 à 09:05:57
llllllllll a écrit : |
Alors, moi j'ai testé très rapidement ton code. Et pour récupérer chacun des mails contenu dans ma boîte de réception, je fais:
Code :
|
Par contre, je n'ai pas trouvé de propriété dans l'objet Mail permettant de récupérer l'adresse e-mail de la personne qui a écrit le mail. On arrive très bien à récupérer son nom en clair mais pour l'e-mail... J'ai essayé avec un Mail.ReplyRecipients.Item(index).Address mais chez moi c'est pas très parlant parce que des fois vide... Mais bon les mails avec lesquels j'ai testé viennent tous d'un serveur Exchange et peut-être qu'il gère différement les reply to si c'est de la messagerie interne.
Dis-moi si chez toi tu obtiens un résultat plus flagrant... Ca m'intéresse
Marsh Posté le 19-04-2005 à 13:54:20
Bonjour,
Voila un bout de mon code:
'--------------------------------------------
For Each Item In DAS.Items
For Each Atmt In Item.Attachments
If Item.Subject = "here you go" Then
FileName = "C:\Documents and Settings\Analyst 4\Desktop\" & _
Format(Item.CreationTime, "yymmdd_" ) & Atmt.FileName
'-------------------------------------------------------------------------------------
La condition est "here you go" dans le sujet du message.
Comment faire pour que la condition soit vrai meme si elle est incomplete?
Par exemple un message avec seulement "here" ou "you" dans le sujet?
J'ai essaye intuitivement d'ecrire des trucs genre "here" Or "you" And "go" mais ca marche pas... vous pouvez m'aider?
Merci!
Message édité par llllllllll le 19-04-2005 à 18:47:23