Filtre sur plusieurs colonnes en OU

Le
Steph
Bonjour,

Je souhaiterais réaliser une macro me permettant d'afficher les données=
de ma feuille Excel en fonction d'un critère de recherche (en recherchan=
t ce critère dans plusieurs colonnes).

Ma feuille Excel est composée de 13 colonnes avec des Désignations, Des=
criptions, Références, etc

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:=7, Criteria1:="=*" & (TextBox1.Value) & "=
*"


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

Selection.AutoFilter Field:=7, Criteria1:="=*" & (TextBox1.Value) & "=
*"
Selection.AutoFilter Field:=8, Criteria1:="=*" & (TextBox1.Value) & "=
*"

Cela me prends tous les éléments avec le texte "TEST" dans la colonne 7=
puis me reprends les éléments 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=
éléments de la colonne 7 et de la colonne 8 qui comprends l'un ou l'au=
tre le texte "TEST".
J'espère avoir été claire.
Y a t'il une solution ?

Et enfin avec cela je souhaiterais pouvoir afficher toutes les lignes de mo=
n tableau où est présent dans n'importe qu'elle colonne le critère du=
TextBox1.

D'avance merci pour vos idées.

Steph
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichD
Le #26347086
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
'-------------------------------------------
Steph
Le #26347090
.Range("Z2").Formula = "=Search(""" & Expr & """,G2&H2)>0"



Je ne comprends pas le "G2&H2", saurais-tu m'expliquer la formule stp.
MichD
Le #26347119
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à!
Jacquouille
Le #26347133
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
GL
Le #26347142
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.
Jacquouille
Le #26347141
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
Jacquouille
Le #26347144
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
GL
Le #26347171
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.
Steph
Le #26347220
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
Steph
Le #26347255
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
Publicité
Poster une réponse
Anonyme