VB et les adresses mails

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

  • 1
  • 2
  1. Utilisateur anonyme
     
    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
  2. romsec
     
    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
  3. Utilisateur anonyme
     
    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
  4. romsec
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Utilisateur anonyme
     
    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
  7. romsec
     
    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
  8. Utilisateur anonyme
     
    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
  9. romsec
     
    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
  10. Utilisateur anonyme
     
    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
  11. romsec
     
    Il ne met aucune adresse dans le destinataire Outlook pour aucun mail
    Il met uniquement les copies
    0
  12. romsec
     
    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
  13. Utilisateur anonyme
     
    Il suffit de rajouter une condition :
    if Trim(Cells(i, 33).Font.ColorIndex)<>1 then
    .......

    @+
    0
  14. romsec
     
    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
  15. romsec
     
    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
  16. Utilisateur anonyme
     
    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
  17. romsec
     
    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
  18. Utilisateur anonyme
     
    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
  19. romsec
     
    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
  20. romsec
     
    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
  21. Utilisateur anonyme
     
    Comme ça, non.
    Mais par contre, tu peux vérifier s'il y a bien un '@'.
    0
  • 1
  • 2