[VBA] Question simple sur InStr et adresse e-mail...

Question simple sur InStr et adresse e-mail... [VBA] - VB/VBA/VBS - Programmation

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
Reply

Marsh Posté le 19-04-2005 à 13:54:20   

Reply

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.

Reply

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

Reply

Marsh Posté le 19-04-2005 à 14:54:43    

merci pour vos reponses! je vais voir si je peux me debrouiller avec ca.

Reply

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!
 
 :jap:  :jap:  :jap:


Message édité par llllllllll le 19-04-2005 à 19:00:30
Reply

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??????

Reply

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).
 
QUEL EST LE MESSAGE D'ERREUR??????


 
 
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!

Reply

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à...

Reply

Marsh Posté le 20-04-2005 à 10:28:44    

gfa a écrit :

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à...


 
Non ca marche pas :( :( :(
 
J'obtiens le meme message d'erreur  :??:
 
Ca doit bien pourtant etre possible!


Message édité par llllllllll le 20-04-2005 à 10:28:58
Reply

Marsh Posté le 20-04-2005 à 11:48:26    

Tu es sûr que Email1Address est bien une propriété de ton Item?

Reply

Marsh Posté le 20-04-2005 à 11:48:26   

Reply

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...

Reply

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).

Reply

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
 
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).


 
Baah "Mail" pointe sur "MailItem" soit un message e-mail non?


Message édité par llllllllll le 20-04-2005 à 15:37:06
Reply

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 :
  1. Set Mail = Inbox.Items(no de mail)


 
Mais ce bout de code est à prendre avec bcp de prudence :) il faut très certainement le tripatouiller un peu

Reply

Marsh Posté le 20-04-2005 à 16:45:36    

gfa a écrit :

[/cpp]
 
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 :
  1. Set Mail = Inbox.Items(no de mail)


 
Mais ce bout de code est à prendre avec bcp de prudence :) il faut très certainement le tripatouiller un peu


 
 
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

Reply

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 :)
(il n'y a rien dans l'aide a part des ReplyAll


 
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 :)

Reply

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?
 
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 :)


 
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...

Reply

Marsh Posté le 21-04-2005 à 09:05:57    

llllllllll a écrit :


 
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...


 
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 :
  1. Set ns = GetNamespace("MAPI" )
  2.     Set Inbox = ns.GetDefaultFolder(olFolderInbox)
  3.     For i = 1 To Inbox.Items.Count
  4.       Set Mail = Inbox.Items.Item(i)
  5.     Next i


 
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 :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed