VB et les adresses mails

Fermé
romsec - 6 avril 2004 à 14:09
 romsec - 26 avril 2004 à 11:22
Bonjour,
Je veux envoyer un mail aux adresses de la colonne 13 copie les adresses de la colonne17.
Le CODE ci desssous permet d'envoyer les mails mais qd il recontre une cellule vide , ilr eprend la dernière adresse
De plus qd il recontre une nouvelle adresse , au lieu d'envoyer un mail à cette adresse , il l'ajoute à l'adresse précedent dans le même mail.
Si qqun pouvait me filer un coup de main , ce serait cool
Merci

Sub SendMails()
Dim obj As String
Dim mes As String
Dim myStr As String
Dim myStr1 As String
obj = InputBox("Objet du message")
mes = InputBox("Entrer le message")


For i = 5 To 100
If InStr(myStr, Trim(Cells(i, 13))) = 0 Then
myStr = myStr & Cells(i, 13) & ";"
If InStr(myStr1, Trim(Cells(i, 17))) = 0 Then
myStr1 = myStr1 & Cells(i, 17) & ";"
End If
End If

myStr = Left(myStr, Len(myStr))
myStr1 = Left(myStr1, Len(myStr1))
adresse = myStr
copie = myStr1
URLto = "mailto:" & adresse & "?subject=" & obj & "&body=" & mes & "&Cc=" & copie
ActiveWorkbook.FollowHyperlink Address:=URLto
Next
End Sub

21 réponses

Utilisateur anonyme
6 avril 2004 à 14:43
A pas tout compris ???
Tu veux quoi : un message par adresse trouvée sur chaque ligne, ou un message unique envoyé à toutes les adresses trouvées ?
0
C'est un message unique envoyé à toutes les adresses trouvées
mais la solution que j'ai trouvé pour que dans chaque mail n'apparaisse que les 2 adresses de la même ligne
c'est d'envoyer un mail différent à chaque adresse
Mais j'ai ce Pb (cf ci dessus):
Pb avec les cellules vides
Pb qd il rencontre une autre adresse il l'ajoute dan le mail au lieu de creer un nouveau mail ?
Merci
0
Utilisateur anonyme
6 avril 2004 à 15:33
Bon, pour qu'il te crée un nouveau mail à chaque adresse trouvée, il faut que la création de message se fasse dans ta boucle, pas en dehors.
Ce qui, concrétement, te donne ça :
Dim obj As String
Dim mes As String
Dim myStr As String
Dim myStr1 As String
obj = InputBox("Objet du message")
mes = InputBox("Entrer le message")


For i = 5 To 100
If InStr(myStr, Trim(Cells(i, 13))) = 0 Then
myStr = myStr & Cells(i, 13) & ";"
If InStr(myStr1, Trim(Cells(i, 17))) = 0 Then
myStr1 = myStr1 & Cells(i, 17) & ";"
End If
myStr = Left(myStr, Len(myStr))
myStr1 = Left(myStr1, Len(myStr1))
adresse = myStr
copie = myStr1
URLto = "mailto:" & adresse & "?subject=" & obj & "&body=" & mes & "&Cc=" & copie
ActiveWorkbook.FollowHyperlink Address:=URLto
End If

Next


@+
0
Merci ton idée est bonne
mais le Pb c'est qu'il ajoute les adresses mails
pae ex: il va envoyer à : Cell(1,13)+Cell(2,13)
ave en copie: Cell(1,17)+Cell(2,17)
Et je voudrai qu'il fasse 2 mails différents
De plus qd il tombe sur une cellule vide, il essaie d'envoyer un mail
Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
6 avril 2004 à 15:52
Merde, je viens d'essayer ma soluce et c une grosse connerie.
Y'a un truc que je ne comprends pas, pourkoi tu rajoutes un ";" à chaque fois si c pour envoyer autant de message que d'adresse ???
Voili, j'ai refait et là ça marche :
Sub SendMails()
Dim obj As String
Dim mes As String
Dim myStr As String
Dim myStr1 As String
obj = InputBox("Objet du message")
mes = InputBox("Entrer le message")


For i = 4 To 10
If InStr("@", Trim(Cells(i, 13))) = 0 Then
myStr = Cells(i, 13)
If InStr("@", Trim(Cells(i, 17))) = 0 Then
myStr1 = Cells(i, 17)
End If
myStr = Left(myStr, Len(myStr))
myStr1 = Left(myStr1, Len(myStr1))
adresse = myStr
copie = myStr1
URLto = "mailto:" & adresse & "?subject=" & obj & "&body=" & mes & "&Cc=" & copie
ActiveWorkbook.FollowHyperlink Address:=URLto
myStr = ""
myStr1 = ""
End If

Next
End Sub

@+
0
Merci j'ai essayé , ça marche.
Dis moi est ce que tu saurais quel code rajouter de manière à ce que qd soit la ligne 13 soit la ligne 17 est vide il n'essaie pas d'envoyer un mail ?

En fait les ";" c'est parceque je voulai automatiser cette opération mais je ne pense pas que ce soit posible en envoyant un mail à chaque adresse ?
Merci
0
Utilisateur anonyme
6 avril 2004 à 16:28
Simple, il te faut juste concaténer tes conditions en une seule :
For i = 4 To 10
If InStr("@", Trim(Cells(i, 13))) = 0 And InStr("@", Trim(Cells(i, 17))) = 0 Then
myStr = Cells(i, 13)
myStr1 = Cells(i, 17)
myStr = Left(myStr, Len(myStr))
myStr1 = Left(myStr1, Len(myStr1))
adresse = myStr
copie = myStr1
URLto = "mailto:" & adresse & "?subject=" & obj & "&body=" & mes & "&Cc=" & copie
ActiveWorkbook.FollowHyperlink Address:=URLto
myStr = ""
myStr1 = ""
End If

Next

@+
0
Je n'ai pas réussi avec ta méthode mais
En fait le mieux est d'enlever 2 lignes de code à la fin:
myStr=""
myStr1=""
Ce qui permet d'enlever tous les mails ou l'adresse ou la copie est vide.
Le problème c 'est qu'il prend comme copie la dernière adresse(colonne17) utlisée avec une adresse (colonne13) valide utlisée si la cellule de la colonne 17 est vide.
0
Utilisateur anonyme
6 avril 2004 à 17:27
Bizazrre, ça marche chez moi...
Je ne pense pas qu'il faille enlever ces 2 lignes, au contraire.
La logique de ce que je t'ai mis c'est :
on regarde si les cellules (i,13) et (i,17) contiennent qqc
si oui alors on crée le message
sinon on fait rien
on remet a 0 les variables
on continue depuis le début à la ligne suivante

Ca doit marcher...
@+
0
Il ne met aucune adresse dans le destinataire Outlook pour aucun mail
Il met uniquement les copies
0
Sinon je voudrai indiquer une condition: qu'il ne lance pas le mail si la couleur d'écriture des adresses dans "mystr " est noire ?
0
Utilisateur anonyme
7 avril 2004 à 11:32
Il suffit de rajouter une condition :
if Trim(Cells(i, 33).Font.ColorIndex)<>1 then
.......


@+
0
La couleur noire est codée par le 1 ?
Jai essayé ce code et dans ma colonne , j'ai des adresses en noir qu'il essaie de lancer qd même ?
0
Ci-dessous mon code, avec la condition de couleur mais elle n'agit pas sur le résultat ?
Sub SendMail()
Dim obj As String
Dim mes As String
Dim myStr As String
Dim myStr1 As String
obj = InputBox("Objet du message")
mes = InputBox("Entrer le message")

For i = 5 To 130
If InStr(myStr, Trim(Cells(i, 9))) = 0 Then
If Trim(Cells(i, 9).Font.ColorIndex) <> 1 Then
myStr = Cells(i, 9)
If InStr(myStr1, Trim(Cells(i, 6))) = 0 Then
myStr1 = Cells(i, 6)
End If
End If
myStr = Left(myStr, Len(myStr))
myStr1 = Left(myStr1, Len(myStr1))
adresse = myStr
copie = myStr1
URLto = "mailto:" & adresse & "?subject=" & obj & "&body=" & mes & "&Cc=" & copie
ActiveWorkbook.FollowHyperlink Address:=URLto

myStr1 = ""

End If
Next
End Sub
0
Utilisateur anonyme
7 avril 2004 à 13:58
Salut !
Le NOIR est bien codé sur 1, mais si c'est noir.
Si ça ne passe pas, il s'agit vraissemblablement de la couleur AUTOMATIQUE d'excel, définie elle sur -4105 (moins 4105).
@+
0
Il s'agit en effet du code -4105
Par contre je rencontre un Pb très bizarre:
Il envoie en mail avec uniquement l'adresse 9 (sans copie) autant de fois qu'il y a une adresse dans la couleur auto(-4105)
cad que si j'ai 4 adresses en couleur auto de suite, ensuite il va envoyer 4 mails avec juste l'adresse 9 (sans copie) avant d'envoyer le mail avec la copie ???????
(Ce n'est pas un Pb de couleur car c'est la même chose avce d'autres couleurs)
0
Utilisateur anonyme
8 avril 2004 à 10:27
Tu peux remettre tout ton code, ou le mieux, c que tu me l'envoies par mail avec la feuille de calcul, voir ou ça merde...
Adresse : voir profil.
0
Merci HDU, en fait ce sont ces lignes la qui n'allaient pas:

If InStr(myStr, Trim(Cells(i, 9))) = 0 Then
If Trim(Cells(i, 9).Font.ColorIndex) <> -4105 Then

Il fallait mettre:
If InStr(myStr, Trim(Cells(i, 9))) = 0 And Trim(Cells(i, 9).Font.ColorIndex) <> -4105 Then

Sinon il ne prenait pas en compte la première partie de la condition et il envoyait les doublons
Merci
0
Je voudrai savoir si tu connais la syntaxe pour définir un lien hypertexte.
par ex au lieu d'avoir ça:
If InStr(myStr, Trim(Cells(i, 9))) = 0 And Trim(Cells(i, 9).Font.ColorIndex) <> -4105 Then
je voudrai avoir:
If Instr(myStr,Trim(Cells(i,9)))=0 And 'le mot est un lien hypertexte' Then
cad qu'il n'envoie le mail que si l'adresse est un lien hypertexte
Merci
0
Utilisateur anonyme
13 avril 2004 à 13:58
Comme ça, non.
Mais par contre, tu peux vérifier s'il y a bien un '@'.
0