• Initiateur de la discussion Initiateur de la discussion marleauc
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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
 
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:
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+
 
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+
 
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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
408
Retour