Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Concatener les cellules visibles pour faire liste de diffusion pour outlook

8 réponses
Avatar
Alex
Bonjour =E0 tous,

Actuellement, je proc=E8de manuellement mais je souhaiterai le faire en
macro dans une boucle, mais je n'y parviens pas, et viens vous
demander votre aide. Voici comment je proc=E8de :

J'ai une base de donn=E9es de "contacts" avec des donn=E9es de type Nom,
Prenom, Soci=E9t=E9, Adresse, Adresse mail... et une colonne S=E9lection.

Avec la colonne s=E9lection, je mets un caractere "X" pour marquer ma
s=E9lection. J'utilise le filtre automatique sur cette colonne et
selectionne les "non vide", afin de ne trouver que les lignes qui
m'interesse.

Je me positionne apr=E8s la derni=E8re ligne de donn=E9es "Selection" dans
la colonne adresse mail, et l=E0 j'applique la fonction concatener
chaque cellule avec l'adresse mail, en intercalant entre chaque
adresse mail les caract=E8res suivants "; " pour obtenir une cellule
avec toutes mes adresses mails avec le s=E9parateur "; " et ainsi
obtenir ma liste de diffusion, que je n'ai plus qu'=E0 copie dans
outlook pour envoi.

Merci par avance de votre aide.
Bien cordialement.
Alex

8 réponses

Avatar
DanielCo
Bonjour,
Donne-nous quelques précisions complémentaires : Quelle est la plage
filtrée, quelle est la colonne "Sélection" et la colonne "adresse
mail".
Cordialement.
Daniel


Bonjour à tous,

Actuellement, je procède manuellement mais je souhaiterai le faire en
macro dans une boucle, mais je n'y parviens pas, et viens vous
demander votre aide. Voici comment je procède :

J'ai une base de données de "contacts" avec des données de type Nom,
Prenom, Société, Adresse, Adresse mail... et une colonne Sélection.

Avec la colonne sélection, je mets un caractere "X" pour marquer ma
sélection. J'utilise le filtre automatique sur cette colonne et
selectionne les "non vide", afin de ne trouver que les lignes qui
m'interesse.

Je me positionne après la dernière ligne de données "Selection" dans
la colonne adresse mail, et là j'applique la fonction concatener
chaque cellule avec l'adresse mail, en intercalant entre chaque
adresse mail les caractères suivants "; " pour obtenir une cellule
avec toutes mes adresses mails avec le séparateur "; " et ainsi
obtenir ma liste de diffusion, que je n'ai plus qu'à copie dans
outlook pour envoi.

Merci par avance de votre aide.
Bien cordialement.
Alex
Avatar
Alex
Bonjour,

Merci pour votre réponse.
Pour répondre à voes interrogations :

Ma plage filtrée est variable en fonction du nombre de ligne
selectionné par un caractere. si j'ai sélectionné deux lignes, ma
plage après utilisation du filtre me présentatera que 2 lignes avec
l'ensemble de mes colonnnes. La sélection se fait toujours en manuel,
car la selection depend à qui on veut écrire et est variable en
fontion du mail. (La sélection se fera toujours en manuel même si
j'arrive à faire la macro de concatenation d'addresse mail).

Ma colonne "Sélection" est en C.

Ma colonne "Adresse Mail" est en E.

Espérant avoir bien répondu à votre attente.
Cordialement.
Alex
Avatar
FFO
On 4 mai, 10:43, Alex wrote:
Bonjour,

Merci pour votre réponse.
Pour répondre à voes interrogations :

Ma plage filtrée est variable en fonction du nombre de ligne
selectionné par un caractere. si j'ai sélectionné deux lignes, ma
plage après utilisation du filtre me présentatera que 2 lignes avec
l'ensemble de mes colonnnes. La sélection se fait toujours en manuel,
car la selection depend à qui on veut écrire et est variable en
fontion du mail. (La sélection se fera toujours en manuel même si
j'arrive à faire la macro de concatenation d'addresse mail).

Ma colonne "Sélection" est en C.

Ma colonne "Adresse Mail" est en E.

Espérant avoir bien répondu à votre attente.
Cordialement.
Alex



Salut à toi

Ce bout de code devrait faire

i = 2
Do While i < Range("C65535").End(xlUp).Row + 1
If Range("C" & i) = "X" Then
Liste = Liste & Range("E" & i) & ";"
End If
i = i + 1
Loop
Range("E" & i + 1) = Mid(Liste, 1, Len(Liste) - 1)

Traitement à partir de la ligne 2
Résultat première cellule libre colonne E

Fais des essais et dis moi !!!!!!
Avatar
DanielCo
La macro suivante crée et affiche un message avec les destinataires. Tu
n'as plus qu'à compléter ce message et l'envoyer.

Sub EnvoiMail()
Dim Rg As Range, c As Range
Dim OlApp As Object, M As Object
With Sheets("Feuil1")
Set Rg = .Range(.[C1], .Cells(Rows.Count, 3).End(xlUp))
End With
Rg.AutoFilter
Rg.AutoFilter Field:=1, Criteria1:="X"
Set Rg = Rg.SpecialCells(xlCellTypeVisible)
If Rg.Count > 1 Then
Set OlApp = CreateObject("Outlook.application")
Set M = OlApp.CreateItem(olMailItem)
With M
For Each c In Rg
If c.Row > 1 Then
.Recipients.Add c.Offset(, 2)
End If
Next c
.display
End With
Else
Exit Sub
End If
End Sub

Daniel


Bonjour,

Merci pour votre réponse.
Pour répondre à voes interrogations :

Ma plage filtrée est variable en fonction du nombre de ligne
selectionné par un caractere. si j'ai sélectionné deux lignes, ma
plage après utilisation du filtre me présentatera que 2 lignes avec
l'ensemble de mes colonnnes. La sélection se fait toujours en manuel,
car la selection depend à qui on veut écrire et est variable en
fontion du mail. (La sélection se fera toujours en manuel même si
j'arrive à faire la macro de concatenation d'addresse mail).

Ma colonne "Sélection" est en C.

Ma colonne "Adresse Mail" est en E.

Espérant avoir bien répondu à votre attente.
Cordialement.
Alex
Avatar
Alex
Bonjour à tous,

Merci pour vos réponses.
La solution proposée par FFO, foncitonne bien, j'ai juste modifié en
fixe la cellule de concatenation pour ne pas la chercher.
La solution de Daniel bloque sur .Recipients.Add c.offset(,2), mais je
ne sais pas à quoi cela est du ? mais cela ne fait pas de mail
brouillon, sans doute car cela bloque avant ?
Merci par avance de vos réponses.
Bien cordialement.
Alex
Avatar
DanielCo
La solution de Daniel bloque sur .Recipients.Add c.offset(,2), mais je
ne sais pas à quoi cela est du ? mais cela ne fait pas de mail
brouillon, sans doute car cela bloque avant ?



Ca fonctionne pour moi, mais peut-être pas avec une version antérieure
à Outlook 2007; laquelle as-tu ?
Avatar
Alex
Re :
Oui je travaille sur la 2003.
Cdt.
Avatar
DanielCo
Essaie (sans garantie) :

Sub EnvoiMail2()
Dim Rg As Range, c As Range
Dim OlApp As Object, M As Object
With Sheets("Feuil1")
Set Rg = .Range(.[C1], .Cells(Rows.Count, 3).End(xlUp))
End With
Rg.AutoFilter
Rg.AutoFilter Field:=1, Criteria1:="X"
Set Rg = Rg.SpecialCells(xlCellTypeVisible)
If Rg.Count > 1 Then
Set OlApp = CreateObject("Outlook.application")
Set M = OlApp.CreateItem(olMailItem)
With M
For Each c In Rg
If c.Row > 1 Then
txt = txt & c.Offset(, 2).Value & ";"
End If
Next c
txt = Left(txt, Len(txt) - 1)
.to = txt
.display
End With
Else
Exit Sub
End If
End Sub

Daniel


Re :
Oui je travaille sur la 2003.
Cdt.