filtre elaboré

marleauc

XLDnaute Occasionnel
bonjour

J'ai n filtre elaboré qui fonctionne tyres bien , mais j'aimerais avoir un filtre qui pourrait chercher un mot dans la base pis je ne sais pas vraiment


Private Sub Worksheet_Change(ByVal Target As Range)
Sheets("Base").[A1:I1000].AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=[A4:A5], CopyToRange:=[A8:I8]
End Sub

merci de me guider bonne journée
 

Marc L

XLDnaute Occasionnel
Re : filtre elaboré


Bonjour,

juste mettre à jour le critère dans les cellules correspondantes A4:A5
comme indiqué dans l'aide VBA intégrée …

_______________________________________________________________________________
Je suis Charlie, Bardo, Sousse
 

marleauc

XLDnaute Occasionnel
Re : filtre elaboré

salut

un gros merci MARC L mais mon problème c'est qu'en A4(correspond a une colonne(NOM) de la feuille base mais 'aimerais que A4 corresponde a pas juste une colonne mais bien (A1:H1000) soit toute la base
merci
 

job75

XLDnaute Barbatruc
Re : filtre elaboré

Bonjour marleauc, Marc L,

Il suffit d'entrer la formule de recherche du critère en A5 :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'entrez le texte ou le nombre recherché en A2
If Intersect(Target, [A2]) Is Nothing Then Exit Sub
[A2].Name = "Critere" 'cellule nommée
[A4] = ""
[A5] = "=COUNTIF(Base!A2:I2,Critere)"
Sheets("Base").[A1:I1000].AdvancedFilter xlFilterCopy, [A4:A5], [A8:I8]
End Sub
A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : filtre elaboré

Re,

On peut ne pas nommer la cellule A2, dans ce cas dans la formule il faut indiquer le nom de la feuille.

Et par précaution mettre ce nom entre guillemets anglais :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'entrez le texte ou le nombre recherché en A2
If Intersect(Target, [A2]) Is Nothing Then Exit Sub
[A4] = ""
[A5] = "=COUNTIF(Base!A2:I2,'" & Me.Name & "'!A$2)"
Sheets("Base").[A1:I1000].AdvancedFilter xlFilterCopy, [A4:A5], [A8:I8]
End Sub
A+
 

job75

XLDnaute Barbatruc
Re : filtre elaboré

Re,

Je n'avais pas vu votre post #5.

Pour une recherche partielle utiliser le caractère générique "*" de part et d'autre :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'entrez le texte recherché en A2
If Intersect(Target, [A2]) Is Nothing Then Exit Sub
[A4] = ""
[A5] = "=COUNTIF(Base!A2:I2,""*""&'" & Me.Name & "'!A$2&""*"")"
Sheets("Base").[A1:I1000].AdvancedFilter xlFilterCopy, [A4:A5], [A8:I8]
End Sub
A+
 

job75

XLDnaute Barbatruc
Re : filtre elaboré

Bonjour marleauc, JB,

Comme le propose JB mais avec une ComboBox :

Code:
Private Sub Combobox1_Change()
[A4] = ""
[A5] = "=COUNTIF(Base!A2:I2,""*" & ComboBox1 & "*"")"
Sheets("Base").[A1:I1000].AdvancedFilter xlFilterCopy, [A4:A5], [A8:I8]
End Sub

Private Sub Combobox1_GotFocus()
Dim d As Object, c As Range, s, i%
Set d = CreateObject("Scripting.Dictionary")
For Each c In Sheets("Base").[A2:I1000]
  s = Split(Replace(c, ",", " "))
  For i = 0 To UBound(s)
    If Len(s(i)) > 2 Then d(s(i)) = ""
Next i, c
ComboBox1.Clear
If d.Count = 0 Then Exit Sub
s = d.keys
tri s, 0, UBound(s)
ComboBox1.List = s
End Sub

Sub tri(a, gauc, droi)       ' Quick sort
Dim ref, g, d, temp
ref = a((gauc + droi) \ 2)
g = gauc: d = droi
Do
    Do While a(g) < ref: g = g + 1: Loop
    Do While ref < a(d): d = d - 1: Loop
    If g <= d Then
      temp = a(g): a(g) = a(d): a(d) = temp
      g = g + 1: d = d - 1
    End If
Loop While g <= d
If g < droi Then Call tri(a, g, droi)
If gauc < d Then Call tri(a, gauc, d)
End Sub
Fichier joint.

A+
 

Pièces jointes

  • Filtre élaboré(1).xls
    35.5 KB · Affichages: 39
  • Filtre élaboré(1).xls
    35.5 KB · Affichages: 39

Discussions similaires

Statistiques des forums

Discussions
312 249
Messages
2 086 601
Membres
103 258
dernier inscrit
kalis03