Bonsoir,
Quelques petites réflexions.
Tout d'abords
Comment voulez-vous qu'on vous aide, vous donner des brides de code
Je suis entièrement d'accord...
Ensuite :
For Each cell In Columns("N").Cells.SpecialCells(xlCellTypeConstants)
Ici il faut être plus explicite Columns se réfère à la feuille active ce qui peut entrainer des résultats inattendus.
De plus vous recherchez un adresse de courriel, alors pourquoi sélectionner des cellules spéciales ?
Donc un simple :
For Each Cell In Feuil1.Columns("N")
ou si vous utilisez un tableau structuré :
For Each Cell In Feuil1.Range("Tableau1").ListObject.ListColumns("Mail").DataBodyrange
Maintenant,
Sur cette ligne :
If cell.Value Like "?*@?*.?*" And
- L'utilisation des point d'interrogation et des astérisques est redondante, les astérisques sont suffisantes.
- L'opérateur like par défaut effectue une comparaison Binaire, ce qui peut engendrer des résultats innattendus.
Préférez lui une fonction :
'@Description "Valide une adresse de courriel."
Function IsValidEmail(Email As String) As Boolean
Const MAIL_PATTERN As String = "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$" ' // Valide une adresse de courriel
Dim RegEx As Object
Set RegEx = CreateObject("VBScript.RegExp")
With RegEx
.PATTERN = MAIL_PATTERN
.IgnoreCase = True
.Global = False
End With
IsValidEmail = RegEx.test(Email)
If Not RegEx Is Nothing Then Set RegExp = Nothing
End Function
Et pour l'appel
For Each Cell In Feuil1.Columns("N")
Dim MailTo As String
MailTo = Cell.Value
Dim Confirmed As Boolean
Confirmed = (Cell.Offset(0, 1).Value = LCase("etat / confirmation"))
If IsValidEmail(MailTo) And Confirmed Then
'...
'...
Maintenant on attends de voir la suite.