Envoi mail en fonction d'une cellule d'un tableau
Bonjour,
Je souhaite envoyer automatiquement un mail si certaines conditions sont respectées :
Les adresses mail sont stockées dans le tableau "AdressesMail". Initialement le code prévoyait d'envoyer le mail en vérifiant pour chacune des lignes d'une colonne, cependant comme il est nécessaire de modifier à chaque fois les lignes à vérifier, je souhaite créer un tableau dans lequel vérifier pour chacune des lignes si les valeurs sont identiques.
Ci-dessous le code que j'utilise mais que je n'arrive pas à bien ajuster pour l'envoi du mail.
Sub Mail()
Dim LeMail As Variant
Dim Ligne As Integer
Set LeMail = CreateObject("outlook.application") 'création d'un objet outlook
'Objectif pour chaque ligne de mon tableau d'adresses mail, il doit comparer les valeurs avec deux autres et si elles sont identiques envoyer un mail.
For Each Row In Range("AdressesMail")
'For Each Ligne = 4 To 32 ' Code initialement utilisé
If Worksheets("Listes").Range("F" & Row) = Range("H15") Or Worksheets("Listes").Range("F" & Row) = Range("H21") Then
'If Worksheets("Listes").Range("F" & Ligne) = Range("H15") Or Worksheets("Listes").Range("F" & Ligne) = Range("H21") Then 'Texte initialement créé et qui fonctionnait
With LeMail.CreateItem(0)
.Subject = "Nouveau mail 'Sujet du mail
.To = Worksheets("Listes").Range("H" & Row) 'Destinataire
'.Body = "Bonjour," & vbCr & vbLf & "Un nouveau mail.
.Display 'permet d'afficher le mail avant d'envoyer le mail
' .Send 'envoi du mail
End With
End If
Next Row
End SubEdit modo : Merci de mettre le code entre balises avec le bouton </>
Bonjour Tik et Tok,
Alors pour commencer, il est bien de mettre "Option Explicit" en début de module
Cela vous permettrait de voir vos erreurs
Ensuite on n'utilise jamais un terme VBA (Row) dans une variable
Et pour finir, pourquoi ne pas avoir gardé la ligne qui fonctionnait !?
' Code initialement créé et qui fonctionnait
'If Worksheets("Listes").Range("F" & Ligne) = Range("H15") Or Worksheets("Listes").Range("F" & Ligne) = Range("H21") ThenBref sans fichier et sans savoir vraiment ce que vous voulez, ça va être compliqué
@+
Bonjour BrunoM45,
Effectivement le premier code fonctionnait bien cependant mon objectif est qu'il soit proactif et ne nécessite pas de retourner systématiquement dans le code pour modifier les numéros de lignes en cas d'ajout d'une nouvelle adresse mail.
En créant un tableau, une nouvelle ligne de tableau est automatiquement ajoutée lors de la création d'un nouveau contact.
Du coup je souhaite modifier le code en remplaçant les numéros de lignes par les lignes du tableaux afin de les comparer à d'autres cellules.
J'espère avoir été un peu plus clair.
J'ai mis en pièce jointe le fichier.
Merci d'avance pour votre aide.
@+
Bonjour à tous,
Voici un essai d'adaptation du code :
Sub Mail()
Dim oOutlook As object, cell as range, Ligne As Integer ', Dest as string
Set oOutlook = CreateObject("outlook.application") 'création d'un objet outlook
with worksheets("Listes")
For Each cell in .Range("AdressesMail")
Ligne = cell.row
'Dest = .range("H" & Ligne).value '<<< activer si Range("AdressesMail") n'est pas en H
If .Range("F" & Ligne) = Range("H15") Or .Range("F" & Ligne) = Range("H21") Then
With oOutlook.CreateItem(0)
.Subject = "Nouveau mail" 'Sujet du mail
.To = cell.value '<<< remplacer par Dest si Range("AdressesMail") pas en H
'.Body = "Bonjour," & vbCr & vbLf & "Un nouveau mail."
.Display 'permet d'afficher le mail avant d'envoyer le mail
'.Send 'envoi du mail
End With
End If
Next cell
end with
End SubIci, je considère que la plage AdressesMail est en colonne H. Si je me trompe, il faudra activer la ligne d'affectation de la variable Dest et remplacer cell.value par Dest dans la propriété .to du mail.
Cdlt,
Merci pour l'aide, ça fonctionne en partie, comme la plage AdressesMail représente 3 colonnes, le souci est que je me retrouve avec 3 mail envoyés à la même personne.
Je penses que je vais finalement opté pour ma première idée qui était de regarder pour chacune des lignes, celles qui correspondaient à mes valeurs.
Et pour résoudre le problème d'ajout de nouvelles adresses mail je vais mettre le nombre de ligne à 100.
Merci encore pour l'aide
Ok.
En tout cas, au cas où, en supposant que AdressesMail contiennent la colonne H et que celle-ci soit la 3è parmi les 3, cette modification :
For Each cell in .Range("AdressesMail").columns(3)permettrait de résoudre le problème.
Cdlt,