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

Filtre pour mailling

15 réponses
Avatar
Manu
Bonsoir,

J'ai en col B d'une grande BDD des N° qui se suivent 1, 2, 3... Je
souhaiterais qu'une boite de dialogue me demande ce que je souhaite filtrer
dans cette col B (par exemple entre 100 et 150) et qu'ensuite ca lance mon
mailing préparer en amont dans Word avec les champs souhaité également déjà
préparé dans Word mais que des lignes entre 100 et 150.
Puis que j'ai une archive de ces 50 lignes et à quelle date j'ai fais ce
mailing dans une autre feuil Excel "archive mailing" et à chaque fois que je
relancerais le mailing, je souhaiterais que ca s'ajoute à cette feuil.

Pas sure de me faire comprendre.... dites-moi...

Je sais que je peux le faire par l'enregistreur en utilisant des filtres
élaborés pour choisir facilement les intervalles de ligne, mais je sent que
ca va être long, n'y a t'il pas une solution rapide.

Merci

manu


---
Ce courrier électronique ne contient aucun virus ou logiciel malveillant parce que la protection avast! Antivirus est active.
http://www.avast.com

10 réponses

1 2
Avatar
MichD
Bonjour,

Tu veux quelque chose comme ceci :

'-----------------------------------------------
Sub test()
Dim Début As Variant, Fin As Variant

Début = Application.InputBox(prompt:="Le numéro de départ?", Type:=1)
If Début = False Then MsgBox "Opération annulée": Exit Sub

Fin = Application.InputBox(prompt:="Le numéro de la fin?", Type:=1)
If Fin = False Then MsgBox "Opération annulée": Exit Sub

With Worksheets("Feuil1") ' nom de la feuille et adresse de la plage à adapter
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
.AutoFilter field:=1, Criteria1:=">=" & Début, _
Operator:=xlAnd, Criteria2:="<=" & Fin
End With
End With
End Sub
'-----------------------------------------------
Avatar
Manu
Exactement Mich ! Et qu'ensuite ca me colle en valeur les résultats des
données de ce filtre et non les titres dans la feuil "archive mailing" dans
la dernière cellule pleine de la colonne A (j'ai cru comprendre qu'en VBA,
il fallait partir de la fin et remonter), dans la ligne 1 de la feuil
"archive mailing" il y aura déjà les titres

Ensuite j'insèrerais une col Vide en A pour titre "Date mailing" qui
indiqueras la date du jour ou j'aurais envoyé cette macro. Cela me permettra
dans le temps de savoir à quelle date j'aurais envoyé le mailing.

Merci

manu


"MichD" a écrit dans le message de groupe de discussion :
m0hgpf$pvo$

Bonjour,

Tu veux quelque chose comme ceci :

'-----------------------------------------------
Sub test()
Dim Début As Variant, Fin As Variant

Début = Application.InputBox(prompt:="Le numéro de départ?", Type:=1)
If Début = False Then MsgBox "Opération annulée": Exit Sub

Fin = Application.InputBox(prompt:="Le numéro de la fin?", Type:=1)
If Fin = False Then MsgBox "Opération annulée": Exit Sub

With Worksheets("Feuil1") ' nom de la feuille et adresse de la plage à
adapter
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
.AutoFilter field:=1, Criteria1:=">=" & Début, _
Operator:=xlAnd, Criteria2:="<=" & Fin
End With
End With
End Sub
'-----------------------------------------------


---
Ce courrier électronique ne contient aucun virus ou logiciel malveillant parce que la protection avast! Antivirus est active.
http://www.avast.com
Avatar
MichD
À titre d'information supplémentaire :

A ) Suppose que ta liste existe dans un document Excel ayant une extension .xlsx

1 - Donne un "NOM" à la plage de données.

B ) Maintenant ouvre Word :

1 - Menu Publipostage / Sélection des destinataires / Utiliser une liste existante / dans la fenêtre
ouvrante : "Nouvelle source" / Nouvelle fenêtre : DSN-ODBC / Fenêtre suivante : Excel Files /
Fenêtre suivante : choix du répertoire et du fichier Excel (.xlsx) / Fenêtre suivante : Choix du NOM
de la table des données du fichier Excel / dans la fenêtre suivante : Cocher la case à cocher dans
le bas de la fenêtre : Toujours essayer d'utiliser ce fichier pour actualiser les données / Terminer

2 - Revenu dans Word, utilise la commande : "Modifier la liste des destinataires" / Tu as la table
"NOM" qui apparaît dans une fenêtre / en bas de cette fenêtre, tu as la commande "Filtrer", un clic
et tu te retrouves dans une fenêtre où tu peux choisir le champ du filtre et les critères que tu
veux appliquer. Tu fermes par OK - OK -

3 - Maintenant, tu es prêt à lancer ton publipostage avec les données que tu as retenu dans ton
fichier Word.

Nul besoin de faire un filtre dans Excel au préalable!
Avatar
Manu
Pas de soucis pour cela Mich, je l'ai déjà prévu, mais ce qui m'intéresse
surtout, c'est l'archive de ce qui sera envoyé dans la Feuil "archive
mailing" à chaque fois que je choisirais un intervalle de ligne.

Manu

"MichD" a écrit dans le message de groupe de discussion :
m0hin5$v4u$


À titre d'information supplémentaire :

A ) Suppose que ta liste existe dans un document Excel ayant une extension
.xlsx

1 - Donne un "NOM" à la plage de données.

B ) Maintenant ouvre Word :

1 - Menu Publipostage / Sélection des destinataires / Utiliser une liste
existante / dans la fenêtre
ouvrante : "Nouvelle source" / Nouvelle fenêtre : DSN-ODBC / Fenêtre
suivante : Excel Files /
Fenêtre suivante : choix du répertoire et du fichier Excel (.xlsx) / Fenêtre
suivante : Choix du NOM
de la table des données du fichier Excel / dans la fenêtre suivante : Cocher
la case à cocher dans
le bas de la fenêtre : Toujours essayer d'utiliser ce fichier pour
actualiser les données / Terminer

2 - Revenu dans Word, utilise la commande : "Modifier la liste des
destinataires" / Tu as la table
"NOM" qui apparaît dans une fenêtre / en bas de cette fenêtre, tu as la
commande "Filtrer", un clic
et tu te retrouves dans une fenêtre où tu peux choisir le champ du filtre et
les critères que tu
veux appliquer. Tu fermes par OK - OK -

3 - Maintenant, tu es prêt à lancer ton publipostage avec les données que tu
as retenu dans ton
fichier Word.

Nul besoin de faire un filtre dans Excel au préalable!


---
Ce courrier électronique ne contient aucun virus ou logiciel malveillant parce que la protection avast! Antivirus est active.
http://www.avast.com
Avatar
MichD
Adapte le nom des feuilles et des plages de cellules au besoin.

'-------------------------------------------------------------------------
Sub test()
Dim Début As Variant, Fin As Variant
Dim Dest As Range, Rg As Range, Nb As Long

Application.ScreenUpdating = False
Application.EnableEvents = False

Début = Application.InputBox(prompt:="Le numéro de départ?", Type:=1)
If Début = False Then MsgBox "Opération annulée": Exit Sub

Fin = Application.InputBox(prompt:="Le numéro de la fin?", Type:=1)
If Fin = False Then MsgBox "Opération annulée": Exit Sub

With Worksheets("Feuil1")
With .Range("A1:D" & .Range("A65536").End(xlUp).Row)
.AutoFilter field:=1, Criteria1:=">=" & Début, _
Operator:=xlAnd, Criteria2:="<=" & Fin
adrfiltre = .Resize(.Rows.Count - 1).Offset(1) _
.SpecialCells(xlCellTypeVisible).Address

nb = Application.CountA(.Columns(1).SpecialCells(xlCellTypeVisible)) - 1

With Worksheets("Date mailing")
Set Dest = .Range("A" & .Range("A65536").End(xlUp).Row + 1)
End With
Dest.Resize(nb).EntireRow = .Range(adrfiltre).Value
.AutoFilter
End With
End With
Application.ScreenUpdating = True
Application.EnableEvents = True

End Sub
'-------------------------------------------------------------------------
Avatar
MichD
Quelques petites retouches :

'--------------------------------------------------------
Sub test()
Dim Début As Variant, Fin As Variant
Dim Dest As Range, Rg As Range, Nb As Long
Dim AdrFiltre As String

On Error Resume Next

Application.ScreenUpdating = False
Application.EnableEvents = False

Début = Application.InputBox(prompt:="Le numéro de départ?", Type:=1)
If Début = False Then MsgBox "Opération annulée": Exit Sub

Fin = Application.InputBox(prompt:="Le numéro de la fin?", Type:=1)
If Fin = False Then MsgBox "Opération annulée": Exit Sub

With Worksheets("Feuil1")
With .Range("A1:D" & .Range("A65536").End(xlUp).Row)
.AutoFilter field:=1, Criteria1:=">=" & Début, _
Operator:=xlAnd, Criteria2:="<=" & Fin
AdrFiltre = .Resize(.Rows.Count - 1).Offset(1) _
.SpecialCells(xlCellTypeVisible).Address

If Err.Number <> 0 Then
Err.Clear
.AutoFilter
Application.ScreenUpdating = True
Application.EnableEvents = True
Exit Sub
End If

Nb = Application.CountA(.Columns(1).SpecialCells(xlCellTypeVisible)) - 1

With Worksheets("Date mailing")
Set Dest = .Range("A" & .Range("A65536").End(xlUp).Row + 1)
End With
Dest.Resize(Nb).EntireRow = .Range(AdrFiltre).Value
.AutoFilter
End With
End With
Application.ScreenUpdating = True
Application.EnableEvents = True

End Sub
'--------------------------------------------------------
Avatar
Manu
Je n'ais pas le temps de tester ce soir Mich, je m'en occupe demain et te
tiens au courant ! Encore merci pour ton soutien !

manu

"MichD" a écrit dans le message de groupe de discussion :
m0hlik$71g$

Quelques petites retouches :

'--------------------------------------------------------
Sub test()
Dim Début As Variant, Fin As Variant
Dim Dest As Range, Rg As Range, Nb As Long
Dim AdrFiltre As String

On Error Resume Next

Application.ScreenUpdating = False
Application.EnableEvents = False

Début = Application.InputBox(prompt:="Le numéro de départ?", Type:=1)
If Début = False Then MsgBox "Opération annulée": Exit Sub

Fin = Application.InputBox(prompt:="Le numéro de la fin?", Type:=1)
If Fin = False Then MsgBox "Opération annulée": Exit Sub

With Worksheets("Feuil1")
With .Range("A1:D" & .Range("A65536").End(xlUp).Row)
.AutoFilter field:=1, Criteria1:=">=" & Début, _
Operator:=xlAnd, Criteria2:="<=" & Fin
AdrFiltre = .Resize(.Rows.Count - 1).Offset(1) _
.SpecialCells(xlCellTypeVisible).Address

If Err.Number <> 0 Then
Err.Clear
.AutoFilter
Application.ScreenUpdating = True
Application.EnableEvents = True
Exit Sub
End If

Nb =
Application.CountA(.Columns(1).SpecialCells(xlCellTypeVisible)) - 1

With Worksheets("Date mailing")
Set Dest = .Range("A" & .Range("A65536").End(xlUp).Row + 1)
End With
Dest.Resize(Nb).EntireRow = .Range(AdrFiltre).Value
.AutoFilter
End With
End With
Application.ScreenUpdating = True
Application.EnableEvents = True

End Sub
'--------------------------------------------------------


---
Ce courrier électronique ne contient aucun virus ou logiciel malveillant parce que la protection avast! Antivirus est active.
http://www.avast.com
Avatar
MichD
À cette ligne de code dans la procédure :
Dest.Resize(Nb).EntireRow = .Range(AdrFiltre).Value

Il en manque un petit bout ! Corrige cette ligne de code comme ceci :
Dest.Resize(Nb, .CurrentRegion.Columns.Count).Value = .Range(AdrFiltre).Value
Avatar
Manu
Bonjour,

Je n'arrive pas à adapter à mon tableau, pour les filtres, pas de soucis,
c'est le collage qui pose un problème... j'explique mon tableau :

J'ai des colonnes remplies de A à AA avec environ 3000 lignes pour
l'instant. Mes titres sont bien sur en ligne 1 (aussi bien dans la feuil
source "fbb" que la feuil "Archive mailing". En colonne B j'ai mes chiffres
à la suite 1, 2, 3 etc c'est sur cette colonne que le filtre s'effectue, et
ca fonctionne.
En revanche le collage va mal, ca colle dans la feuil "archive" les
résultats de la colonne C à la colonne G. en colonne A et B il y a rien, et
après la colonne G il n'y a que des #N/A

Ce que je souhaiterais, c'est que ca colle tous les résultats du filtre de
la la colonne A à AA.

Le code que j'ai tenté adapté sans résultat :

Sub testmich()
Dim Début As Variant, Fin As Variant
Dim Dest As Range, Rg As Range, Nb As Long
Dim AdrFiltre As String

On Error Resume Next

Application.ScreenUpdating = False
Application.EnableEvents = False

Début = Application.InputBox(prompt:="Le numéro de départ?", Type:=1)
If Début = False Then MsgBox "Opération annulée": Exit Sub

Fin = Application.InputBox(prompt:="Le numéro de la fin?", Type:=1)
If Fin = False Then MsgBox "Opération annulée": Exit Sub

With Worksheets("fbb")
With .Range("b1:aa" & .Range("b65536").End(xlUp).Row)
.AutoFilter field:=1, Criteria1:=">=" & Début, _
Operator:=xlAnd, Criteria2:="<=" & Fin
AdrFiltre = .Resize(.Rows.Count - 1).Offset(1) _
.SpecialCells(xlCellTypeVisible).Address

If Err.Number <> 0 Then
Err.Clear
.AutoFilter
Application.ScreenUpdating = True
Application.EnableEvents = True
Exit Sub
End If

Nb =
Application.CountA(.Columns(1).SpecialCells(xlCellTypeVisible)) - 1

With Worksheets("Archive mailing")
Set Dest = .Range("c" & .Range("c65536").End(xlUp).Row + 1)
End With
Dest.Resize(Nb, .CurrentRegion.Columns.Count).Value =
.Range(AdrFiltre).Value
.AutoFilter
End With
End With
Application.ScreenUpdating = True
Application.EnableEvents = True

End Sub


Dans un 2ème temps, je souhaiterais inserer une colonne Vide en A pour y
mettre la date du jour où j'ai lancé la macro, mais je ne sais pas si je
dois le prévoir en amont dans ma feuil "archive" en mettant tout de suite en
col A "Date mailing" puis coller les donner de la feuil "fbb" de B à AB...

Merci

Manu


"MichD" a écrit dans le message de groupe de discussion :
m0j5jq$f7b$

À cette ligne de code dans la procédure :
Dest.Resize(Nb).EntireRow = .Range(AdrFiltre).Value

Il en manque un petit bout ! Corrige cette ligne de code comme ceci :
Dest.Resize(Nb, .CurrentRegion.Columns.Count).Value =
.Range(AdrFiltre).Value


---
Ce courrier électronique ne contient aucun virus ou logiciel malveillant parce que la protection avast! Antivirus est active.
http://www.avast.com
Avatar
MichD
Exécute la macro dans le classeur : http://cjoint.com/?DJcrPP94tKY
1 2