Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1712 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1052128
llllllllll
Posté le 19-04-2005 à 13:54:20  profilanswer
 

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
mood
Publicité
Posté le 19-04-2005 à 13:54:20  profilanswer
 

n°1052160
schmur
Posté le 19-04-2005 à 14:09:06  profilanswer
 

normalement il y a une méthode qui permet de savoir si une chaîne de caractère et contenu dans une autre.

n°1052254
gfa
Posté le 19-04-2005 à 14:40:54  profilanswer
 

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

n°1052289
llllllllll
Posté le 19-04-2005 à 14:54:43  profilanswer
 

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

n°1052531
llllllllll
Posté le 19-04-2005 à 16:58:20  profilanswer
 

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
n°1053046
AlainTech
Pas trouvé? Cherche encore!
Posté le 20-04-2005 à 00:36:37  profilanswer
 

"cette ligne marche pas" n'est pas un message d'erreur que je connais (ni ne comprends).
 
QUEL EST LE MESSAGE D'ERREUR??????

n°1053152
llllllllll
Posté le 20-04-2005 à 09:17:33  profilanswer
 

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!

n°1053159
gfa
Posté le 20-04-2005 à 09:30:41  profilanswer
 

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

n°1053226
llllllllll
Posté le 20-04-2005 à 10:28:44  profilanswer
 

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
n°1053364
gfa
Posté le 20-04-2005 à 11:48:26  profilanswer
 

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

mood
Publicité
Posté le 20-04-2005 à 11:48:26  profilanswer
 

n°1053379
llllllllll
Posté le 20-04-2005 à 11:59:19  profilanswer
 

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

n°1053386
gfa
Posté le 20-04-2005 à 12:03:50  profilanswer
 

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

n°1053696
llllllllll
Posté le 20-04-2005 à 15:36:51  profilanswer
 

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
n°1053794
gfa
Posté le 20-04-2005 à 16:27:52  profilanswer
 

[/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

n°1053851
llllllllll
Posté le 20-04-2005 à 16:45:36  profilanswer
 

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

n°1053882
gfa
Posté le 20-04-2005 à 16:52:53  profilanswer
 

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

n°1053915
llllllllll
Posté le 20-04-2005 à 17:04:22  profilanswer
 

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

n°1054803
gfa
Posté le 21-04-2005 à 09:05:57  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

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

 

Sujets relatifs
petite question sur les THREADenvoi de mail
Vérification du mailValider un formulaires par la barre d'adresse pour reinitialis routeur
Contrôler bouton de la barre d'outil Word en VBAQuestion sur upload de fichier
adresse du projetobtenir mon adresse IP en Perl
Bonjour, juste une question !Envoyer un Mail depuis Acces
Plus de sujets relatifs à : [VBA] Question simple sur InStr et adresse e-mail...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR