Filtre élaboré "contient" sur colonne nommée

sandra95

XLDnaute Nouveau
Bonjour,

J'ai besoin d'aide pour arranger mon filtre élaboré réalisé en VBA.
Je lance un userform forme.
Ma combobox1 me permet de choisir la colonne a filtrer (retranscrite en cellule G2):
Sheets("BASE CLIENTSV2").Range("G2").Value = ComboBox1
Mon textbox1 me permet de choisir ce que je cherche dans la colonne en question (retranscrit en cellule G3).
Sheets("BASE CLIENTSV2").Range("G3").Value = TextBox1

Le résultat de mon filtre fonctionne selon les critères choisis mais uniquement interprété en "est égal" ou "commence par".
Je cherche à lancer ce même filtre en "contient".
Pouvez-vous m'aider?
Je vous transmets le fichier pour comprendre.

Merci d'avance.
 

Pièces jointes

  • contrat.xlsm
    22.7 KB · Affichages: 37

job75

XLDnaute Barbatruc
Bonjour sandra95, chris, le forum,

Il n'y a vraiment pas besoin d'UserForm :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [H1,J1]) Is Nothing Then Exit Sub
Application.ScreenUpdating = False
If Me.FilterMode Then Me.ShowAllData 'RAZ
If [H1] = "" Or [J1] = "" Then Exit Sub
With [A1].CurrentRegion 'à adapter éventuellement
  [K2] = "=SEARCH(J$1," & .Rows(1).Find([H1], , xlValues, xlWhole)(2).Address(0, 0) & ")"
  .AdvancedFilter xlFilterInPlace, [K1:K2]
End With
[K2] = ""
End Sub
Fichier joint.

Mais apparemment les réponses qu'on vous donne sur XLD ne vous intéressent guère :

https://www.excel-downloads.com/thr...une-cellule-contenant-deja-une-donnee.232575/

Bonne journée.
 

Pièces jointes

  • contrat(1).xlsm
    26 KB · Affichages: 27

job75

XLDnaute Barbatruc
Re,

On peut filtrer une colonne de dates en utilisant cette fonction personnalisée :
Code:
Function TXT$(c As Range, form$)
TXT = Format(c, form)
End Function
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [I1,K1]) Is Nothing Then Exit Sub
Application.ScreenUpdating = False
If Me.FilterMode Then Me.ShowAllData 'RAZ
If [I1] = "" Or [K1] = "" Then Exit Sub
With [A1].CurrentRegion 'à adapter éventuellement
  With .Rows(1).Find([I1], , xlValues, xlWhole)(2)
    [L2] = "=SEARCH(K$1,TXT(" & .Address(0, 0) & ",""" & .NumberFormat & """))"
  End With
  .AdvancedFilter xlFilterInPlace, [L1:L2]
End With
[L2] = ""
End Sub
Les colonnes de nombres doivent être formatées : ID au format "0", CP au format "00000".

Fichier (2).

A+
 

Pièces jointes

  • contrat(2).xlsm
    27.6 KB · Affichages: 21

sandra95

XLDnaute Nouveau
Bonsoir,

J'ai un peu remanié mon fichier avec une sélection multicritères.
textbox1=*Nom*
textbox2=*rue*
textbox3=code postal
textbox4=*ville*

Job75, je n'arrive pas à comprendre et à réintégrer, dans mon Userform, tes conseils concernant le format (un userform m'est indispensable pour le projet final).
Dans mes critères actuels, il ne me reste plus qu'à pouvoir avoir , au niveau du code postal (texbox3), la possibilité d'indiquer soit le code postal entier, soit le département (donc les 2 premiers chiffres).

Merci de votre aide.
 

Pièces jointes

  • contratV2.xlsm
    25.6 KB · Affichages: 37

job75

XLDnaute Barbatruc
Bonjour sandra95, le forum,

Mon code précédent utilise le critère "contient".

Si l'on veut utiliser le critère "commence par" faire suivre le texte en K1 d'un astérisque :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [I1,K1]) Is Nothing Then Exit Sub
Application.ScreenUpdating = False
If Me.FilterMode Then Me.ShowAllData 'RAZ
If [I1] = "" Or [K1] = "" Then Exit Sub
With [A1].CurrentRegion 'à adapter éventuellement
  With .Rows(1).Find([I1], , xlValues, xlWhole)(2)
    If Right([K1], 1) = "*" Then
      [L2] = "=K$1=LEFT(TXT(" & .Address(0, 0) & ",""" & .NumberFormat & """),LEN(K$1)-1)&""*"""
    Else
      [L2] = "=SEARCH(K$1,TXT(" & .Address(0, 0) & ",""" & .NumberFormat & """))"
    End If
  End With
  .AdvancedFilter xlFilterInPlace, [L1:L2]
End With
[L2] = ""
End Sub
La cellule K1 est bien sûr au format Texte.

Fichier (3).

Bonne journée.
 

Pièces jointes

  • contrat(3).xlsm
    28.1 KB · Affichages: 25

job75

XLDnaute Barbatruc
Re,

Pendant qu'on y est introduisons le critère "égal à" :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [I1,K1]) Is Nothing Then Exit Sub
Application.ScreenUpdating = False
If Me.FilterMode Then Me.ShowAllData 'RAZ
If [I1] = "" Or [K1] = "" Then Exit Sub
With [A1].CurrentRegion 'à adapter éventuellement
  With .Rows(1).Find([I1], , xlValues, xlWhole)(2)
    If Right([K1], 1) = "=" Then
      [L2] = "=K$1=TXT(" & .Address(0, 0) & ",""" & .NumberFormat & """)&""="""
    ElseIf Right([K1], 1) = "*" Then
      [L2] = "=K$1=LEFT(TXT(" & .Address(0, 0) & ",""" & .NumberFormat & """),LEN(K$1)-1)&""*"""
    Else
      [L2] = "=SEARCH(K$1,TXT(" & .Address(0, 0) & ",""" & .NumberFormat & """))"
    End If
  End With
  .AdvancedFilter xlFilterInPlace, [L1:L2]
End With
[L2] = ""
End Sub
Edit : j'ai modifié la fonction TXT, la colonne ID peut maintenant être au format "Standard" :
Code:
Function TXT$(c As Range, form$)
If form = "General" Then TXT = c Else TXT = Format(c, form)
End Function
Fichier (4).

A+
 

Pièces jointes

  • contrat(4).xlsm
    28.5 KB · Affichages: 30
Dernière édition:

sandra95

XLDnaute Nouveau
Bonjour,

Je suis désolée job75, je ne comprends pas... :(
Je ne suis pas une super crack en langage macro...
Pouvez vous me traduire vos lignes pour que je puisse retranscrire dans mon fichier.
Le problème actuel, dans mon fichier est la recherche par département d'après la colonne code postal.
Merci d'avance
 

job75

XLDnaute Barbatruc
Re,

J'ai pourtant été clair : pour faire une recherche par département entrer "CP" en I1 et en K1 entrer les 2 chiffres suivis d'un astérisque.

Relisez tous mes posts et les explications dans les fichiers, il faut que vous les compreniez tous.

A+
 

job75

XLDnaute Barbatruc
Re,

Concernant votre UserForm je m'y intéresserai quand vous nous aurez montré ce qu'il peut faire d'utile.

Pour l'instant, sur vos exemples, il ne peut servir qu'à filtrer et comme je l'ai dit il n'a alors aucun intérêt.

Je crains que vous ne fassiez comme les toutous : quand ils ont un os à ronger, pas moyen de leur retirer.

Bonne fin de soirée.
 

Discussions similaires

Statistiques des forums

Discussions
312 489
Messages
2 088 857
Membres
103 979
dernier inscrit
bderradji