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

Filtre sur plusieurs colonnes en OU

11 réponses
Avatar
Steph
Bonjour,

Je souhaiterais r=E9aliser une macro me permettant d'afficher les donn=E9es=
de ma feuille Excel en fonction d'un crit=E8re de recherche (en recherchan=
t ce crit=E8re dans plusieurs colonnes).

Ma feuille Excel est compos=E9e de 13 colonnes avec des D=E9signations, Des=
criptions, R=E9f=E9rences, etc...=20

Ce code si dessous me permet de filtrer la colonne 7 en fonction du texte a=
fficher dans le "TextBox1" de mon UserForm.

Selection.AutoFilter Field:=3D7, Criteria1:=3D"=3D*" & (TextBox1.Value) & "=
*"


Si je fais ceci et qu'il y a "TEST" dans mon TextBox1

Selection.AutoFilter Field:=3D7, Criteria1:=3D"=3D*" & (TextBox1.Value) & "=
*"
Selection.AutoFilter Field:=3D8, Criteria1:=3D"=3D*" & (TextBox1.Value) & "=
*"

Cela me prends tous les =E9l=E9ments avec le texte "TEST" dans la colonne 7=
puis me reprends les =E9l=E9ments de la colonne 8 ou il y a aussi le texte=
"TEST".

Ce que je souhaite c'est pouvoir faire un OU, je souhaite afficher tous les=
=E9l=E9ments de la colonne 7 et de la colonne 8 qui comprends l'un ou l'au=
tre le texte "TEST".=20
J'esp=E8re avoir =E9t=E9 claire.
Y a t'il une solution ?=20

Et enfin avec cela je souhaiterais pouvoir afficher toutes les lignes de mo=
n tableau o=F9 est pr=E9sent dans n'importe qu'elle colonne le crit=E8re du=
TextBox1.

D'avance merci pour vos id=E9es.

Steph

10 réponses

1 2
Avatar
MichD
Bonjour,

Ce que tu veux pourrait être fait par un filtre élaboré.

Voici un exemple de code où tu devras adapter les plages de cellules qui conviennent à ton
application.

'-------------------------------------------
Sub test()

Dim Expr As String, sh As Worksheet
Expr = "test"

'Nom de la feuille où sont les données
Set sh = Worksheets("Feuil1")

With Sh
'Zone de critère pour le filtre élaboré Z1:Z2
.Range("Z1") = "" 'Tu laisses totalement vide
'Utilise cette formule en Z2
.Range("Z2").Formula = "=Search(""" & Expr & """,G2&H2)>0"

'J'ai supposé que la ligne 1 était la ligne de titre
'à toi d'adapter l'adresse de la plage
With .Range("A1:P" & .Range("A65536").End(xlUp).Row)
.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=sh.Range("Z1:Z2")
End With
.Range("z1:Z2").Clear 'effacer la plage de critère
End With
End Sub
'-------------------------------------------
Avatar
Steph
.Range("Z2").Formula = "=Search(""" & Expr & """,G2&H2)>0"



Je ne comprends pas le "G2&H2", saurais-tu m'expliquer la formule stp.
Avatar
MichD
La colonne 7 et 8 d'Excel correspond à la colonne G et H si tes données débutent en colonne A.
La ligne 2 est le numéro de la ligne qui représente la première ligne de données immédiatement sous
la ligne d'étiquettes de colonne en ligne 1. L'adresse des plages de cellules est à adapter selon
ton application.

Concernant la formule, comme tu veux un "OU" visant à déterminer si l'une ou l'autre des colonnes
ont l'expression "Test", en concaténant les 2 cellules G et H, cette formule
"=CHERCHE("test";G2&H2)>0" retourne "VRAI" si "Test" apparaît au moins une fois.

Voilà!
Avatar
Jacquouille
Bonsoir Denis
En concaténant G et H, on va créer un troisième mot (1 et 2 accolés). Excel
saura-t-il trouver le mot "test" dans une partie d'un autre mot.
Exemple G=test et H=àrefaire.
Concaténé, cela donnera testarefaire.
Ma question: il ne faudrait pas un truc du genre *test*?
Bonne soirée
Jacques.

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"MichD" a écrit dans le message de groupe de discussion :
mfh738$pk$

La colonne 7 et 8 d'Excel correspond à la colonne G et H si tes données
débutent en colonne A.
La ligne 2 est le numéro de la ligne qui représente la première ligne de
données immédiatement sous
la ligne d'étiquettes de colonne en ligne 1. L'adresse des plages de
cellules est à adapter selon
ton application.

Concernant la formule, comme tu veux un "OU" visant à déterminer si l'une ou
l'autre des colonnes
ont l'expression "Test", en concaténant les 2 cellules G et H, cette formule
"=CHERCHE("test";G2&H2)>0" retourne "VRAI" si "Test" apparaît au moins une
fois.

Voilà!


---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
http://www.avast.com
Avatar
GL
Le 01/04/2015 19:29, Jacquouille a écrit :
Bonsoir Denis
En concaténant G et H, on va créer un troisième mot (1 et 2 accolés).
Excel saura-t-il trouver le mot "test" dans une partie d'un autre mot.
Exemple G=test et H=àrefaire.
Concaténé, cela donnera testarefaire.
Ma question: il ne faudrait pas un truc du genre *test*?



La réponse est oui, elle était dans la question. Et le test
are are est are faire.

Bonne soirée
Jacques.



Vous de même,
Florent.
Avatar
Jacquouille
Je me réponds: NON, pas besoin de **
La formule fonctionne, mais je ne comprends pas.
Je croyais que "Cherche" cherchait une chaîne de caractères bien
précise.....
Si tu as une minute pour expliquer, svp ?
merci et bonne fin de soirée
Jacques.


Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"Jacquouille" a écrit dans le message de groupe de discussion :
mfh9ua$8h0$

Bonsoir Denis
En concaténant G et H, on va créer un troisième mot (1 et 2 accolés). Excel
saura-t-il trouver le mot "test" dans une partie d'un autre mot.
Exemple G=test et H=àrefaire.
Concaténé, cela donnera testarefaire.
Ma question: il ne faudrait pas un truc du genre *test*?
Bonne soirée
Jacques.

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"MichD" a écrit dans le message de groupe de discussion :
mfh738$pk$

La colonne 7 et 8 d'Excel correspond à la colonne G et H si tes données
débutent en colonne A.
La ligne 2 est le numéro de la ligne qui représente la première ligne de
données immédiatement sous
la ligne d'étiquettes de colonne en ligne 1. L'adresse des plages de
cellules est à adapter selon
ton application.

Concernant la formule, comme tu veux un "OU" visant à déterminer si l'une ou
l'autre des colonnes
ont l'expression "Test", en concaténant les 2 cellules G et H, cette formule
"=CHERCHE("test";G2&H2)>0" retourne "VRAI" si "Test" apparaît au moins une
fois.

Voilà!


---
L'absence de virus dans ce courrier électronique a été vérifiée par le
logiciel antivirus Avast.
http://www.avast.com


---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
http://www.avast.com
Avatar
Jacquouille
Tout comptes faits, CHERCHE cherche bien une chaîne de caractère dans un
texte. Or, la concaténation crée une chaîne de caractères compris comme du
texte, donc .... Denis a juste (1x de+)
Et moi, je viens de comprendre; -))
Veuillez m'excuser pour cet intempestif dérangement.
Bonne soirée à tous.

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"Jacquouille" a écrit dans le message de groupe de discussion :
mfhe6j$jhf$

Je me réponds: NON, pas besoin de **
La formule fonctionne, mais je ne comprends pas.
Je croyais que "Cherche" cherchait une chaîne de caractères bien
précise.....
Si tu as une minute pour expliquer, svp ?
merci et bonne fin de soirée
Jacques.


Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"Jacquouille" a écrit dans le message de groupe de discussion :
mfh9ua$8h0$

Bonsoir Denis
En concaténant G et H, on va créer un troisième mot (1 et 2 accolés). Excel
saura-t-il trouver le mot "test" dans une partie d'un autre mot.
Exemple G=test et H=àrefaire.
Concaténé, cela donnera testarefaire.
Ma question: il ne faudrait pas un truc du genre *test*?
Bonne soirée
Jacques.

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"MichD" a écrit dans le message de groupe de discussion :
mfh738$pk$

La colonne 7 et 8 d'Excel correspond à la colonne G et H si tes données
débutent en colonne A.
La ligne 2 est le numéro de la ligne qui représente la première ligne de
données immédiatement sous
la ligne d'étiquettes de colonne en ligne 1. L'adresse des plages de
cellules est à adapter selon
ton application.

Concernant la formule, comme tu veux un "OU" visant à déterminer si l'une ou
l'autre des colonnes
ont l'expression "Test", en concaténant les 2 cellules G et H, cette formule
"=CHERCHE("test";G2&H2)>0" retourne "VRAI" si "Test" apparaît au moins une
fois.

Voilà!


---
L'absence de virus dans ce courrier électronique a été vérifiée par le
logiciel antivirus Avast.
http://www.avast.com


---
L'absence de virus dans ce courrier électronique a été vérifiée par le
logiciel antivirus Avast.
http://www.avast.com


---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
http://www.avast.com
Avatar
GL
Le 01/04/2015 20:55, Jacquouille a écrit :
Tout comptes faits, CHERCHE cherche bien une chaîne de caractère dans un
texte. Or, la concaténation crée une chaîne de caractères compris comme
du texte, donc .... Denis a juste (1x de+)
Et moi, je viens de comprendre; -))
Veuillez m'excuser pour cet intempestif dérangement.
Bonne soirée à tous.




Ca dépend si on cherchait, par extraordinaire, "stare" dans
- ou bien "test"
- ou bien "arefaire"

on trouverait "stare" dans "testarefaire"
mais ni dans "test", ni dans "arefaire".

Donc en toute généralité, chercher dans la chaine concaténée n'est
pas chercher dans l'une ou bien dans l'autre.

Espérant ne pas trop faire souffrir vos doux méninges ;-)

Bonne soirée.
Avatar
Steph
Merci super, cela fonctionne très bien.

Juste une dernière question,
Quelle serait la ligne de commande pour supprimer le filtre ?

Merci beaucoup pour ton aide.

Steph

-----------------------------------------------------------

Voici le code après adaptation des zones:
Dim Expr As String, sh As Worksheet
Expr = TextBox1.Value

'Nom de la feuille où sont les données
Set sh = Worksheets("Listing")

With sh
'Zone de critère pour le filtre élaboré Z1:Z2
.Range("Z3") = "" 'Tu laisses totalement vide
'Utilise cette formule en Z2
.Range("Z4").Formula = "=Search(""" & Expr & """,G4&H4)>0"

'J'ai supposé que la ligne 1 était la ligne de titre
'à toi d'adapter l'adresse de la plage
With .Range("A3:P" & .Range("B65536").End(xlUp).Row)
.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=sh.Rang e("Z3:Z4")
End With
.Range("z3:Z4").Clear 'effacer la plage de critère
End With
Avatar
Steph
J'ai fais ceci pour supprimer le filtre, merci

If Expr = "" Then 'Si rien dans la zone recherche alors replacer les filtres de base
Range("A3:M3").Select
Selection.AutoFilter
Range("A4").Select
GoTo Fin
End If
1 2