Excel VBA – Macro pour filtrer sans formulaire

Nicolas Lepauvre

XLDnaute Junior
Bonjour à tous!
Comment réaliser un filtre sur la feuille sans utiliser un formulaire?
Merci
 

Pièces jointes

  • Filtre.xlsm
    30.2 KB · Affichages: 44

Nicolas Lepauvre

XLDnaute Junior
Bonjour Nicolas,

voir fichier joint

à+
Philippe

Merci.
Ce n’est pas ce que je recherche. J’aimerais utiliser les « combobox » sans le formulaire. Comme il se présente sur le fichier « Filtre ». Il y a code VBA dans ce fichier qui fonctionne bien avec le formulaire. Quelqu’un maitrisant bien le VBA pourrait y apporter une petite modification.
Je débute en VBA.
Merci pour toute éventuelle Aide.
 

Pièces jointes

  • Filtre.xlsm
    30.2 KB · Affichages: 24

phlaurent55

Nous a quittés en 2020
Repose en paix
Re,

Ce n’est pas ce que je recherche. J’aimerais utiliser les « combobox » sans le formulaire. Comme il se présente sur le fichier « Filtre ». Il y a code VBA dans ce fichier qui fonctionne bien avec le formulaire.

......... qui fonctionne bien avec le formulaire ????????????????
Petit problème, lorsque je clique sur le premier combobox, j'ai déjà une erreur et un blocage

le même fichier en retour avec un code épuré et des "barrières" pour ne pas déclencher la procédure lorsqu'on clique où il ne faudrait pas
Concernant la demande avec l'utilisation des combo, je ne le ferai pas car ma solution est la plus courte et la moins compliquée que l'on puisse faire

à+
Philippe
 

Pièces jointes

  • 111.xlsm
    19.4 KB · Affichages: 40

Nicolas Lepauvre

XLDnaute Junior
Je prie un expert en VBA de me venir en aide.

J’aimerais utiliser les « combobox » sans le formulaire. Comme il se présente sur le fichier « Filtre ». Il y a code VBA dans ce fichier qui fonctionne bien avec le formulaire. Quelqu’un maitrisant bien le VBA pourrait y apporter une petite modification.
Je débute en VBA.
Merci pour toute éventuelle Aide.
 

Pièces jointes

  • Filtre.xlsm
    32.4 KB · Affichages: 24

Nicolas Lepauvre

XLDnaute Junior
Mon problème est toujours actuel.

Je prie un expert en VBA de me venir en aide.
J’aimerais utiliser les « combobox » sans le formulaire. Comme il se présente sur le fichier « Filtre ». Il y a code VBA dans ce fichier qui fonctionne bien avec le formulaire. Quelqu’un maitrisant bien le VBA pourrait y apporter une petite modification.
Je débute en VBA.
Merci pour toute éventuelle Aide.
 

Pièces jointes

  • Filtre.xlsm
    32.4 KB · Affichages: 29

phlaurent55

Nous a quittés en 2020
Repose en paix
Re,

QUELLE TEMPÊTE DANS UN VERRE D'EAU !!!!!!!!!!!!!!!!!!!!!!!!!!!!!


Je prie un expert en VBA de me venir en aide

Pour info, j'ai débuté la programmation en 1974, avec différents langages tels que Basic, Pascal, Cobol, Fortran, RPG et également la programmation de machine-outils à commande numérique.

Avec plus de 9000 réponses apportées sur ce forum (dont + de 90% en VB), je pense que j'en connais un brin

Si la question avait été bien posée, j'aurais depuis longtemps apporté la réponse.
Ton problème que tu n'as pas su exprimer, c'est l'alimentation de combobox en cascade

GOOOOOOOGLE pourra t'aider, moi j'ai d'autres occupations plus sérieuses à terminer

à+
Philippe
 

job75

XLDnaute Barbatruc
Bonsoir Nicolas Lepauvre, Philippe, Nicole,

Voyez le fichier joint et le code de la feuille :
Code:
Private Sub ComboBox1_GotFocus(): Charge ComboBox1: End Sub
Private Sub ComboBox2_GotFocus(): Charge ComboBox2: End Sub
Private Sub ComboBox3_GotFocus(): Charge ComboBox3: End Sub
Private Sub ComboBox4_GotFocus(): Charge ComboBox4: End Sub
Private Sub ComboBox5_GotFocus(): Charge ComboBox5: End Sub
Private Sub ComboBox6_GotFocus(): Charge ComboBox6: End Sub
Private Sub ComboBox7_GotFocus(): Charge ComboBox7: End Sub

Private Sub ComboBox1_Change(): Filtre: End Sub
Private Sub ComboBox2_Change(): Filtre: End Sub
Private Sub ComboBox3_Change(): Filtre: End Sub
Private Sub ComboBox4_Change(): Filtre: End Sub
Private Sub ComboBox5_Change(): Filtre: End Sub
Private Sub ComboBox6_Change(): Filtre: End Sub
Private Sub ComboBox7_Change(): Filtre: End Sub

Sub Charge(cb As ComboBox)
Dim d As Object, c As Range, a
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
For Each c In [A2].CurrentRegion.Columns(cb.TopLeftCell.Column).Offset(1).Cells
  If c.Text <> "" Then d(c.Text) = ""
Next
If d.Count = 0 Then cb.Clear: Exit Sub
a = d.keys
tri a, 0, UBound(a) 'tri alphabétique
cb.List = a
End Sub

Sub Filtre()
Application.ScreenUpdating = False
[J2] = ComboBox1: [K2] = ComboBox2: [L2] = ComboBox3: [M2] = ComboBox4: [N2] = ComboBox5: [O2] = ComboBox6: [P2] = ComboBox7
[I3] = "=SUMPRODUCT(--ISNUMBER(SEARCH(J$2:P$2,A3:G3&"" "")))=7" 'critère
[A2].CurrentRegion.AdvancedFilter xlFilterInPlace, [I2:I3]
End Sub

Sub RAZ()
ComboBox1 = "": ComboBox2 = "": ComboBox3 = "": ComboBox4 = "": ComboBox5 = "": ComboBox6 = "": ComboBox7 = ""
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
Le filtre avancé est utilisé.

Par ailleurs la Workbook_Open positionne et dimensionne les 7 ComboBox.

Bonne nuit.
 

Pièces jointes

  • Filtre(1).xlsm
    47.9 KB · Affichages: 31
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour Nicolas, le forum,

S'il y a des dates à filtrer il faut les convertir en textes au format utilisé, fonction VBA dans Module1 :
Code:
Function TDate(r As Range)
Dim f$, a(), i%
f = "yyyy-mm-dd" 'format à adapter
ReDim a(1 To r.Count)
For i = 1 To UBound(a)
  If IsDate(r(i)) Then a(i) = Format(r(i), f) Else a(i) = r(i)
Next
TDate = a 'vecteur ligne
End Function
Elle est utilisée dans le critère du filtre :
Code:
[I3] = "=SUMPRODUCT(--ISNUMBER(SEARCH(J$2:P$2,TDate(A3:G3)&"" "")))=7" 'critère
Fichier joint.

Bon dimanche.
 

Pièces jointes

  • Filtre avec dates(1).xlsm
    51.2 KB · Affichages: 33

job75

XLDnaute Barbatruc
Re,

Voici une solution plus générale avec filtrage de toute colonne numérique.

Dans le fichier joint c'est le cas des colonnes A (format Date) et G (format "V"0).

Cette fonction VBA les convertit en textes par la propriété .Text :
Code:
Function TNum(r As Range)
Dim a(), i%
ReDim a(1 To r.Count)
For i = 1 To UBound(a)
  If IsNumeric(r(i).Value2) Then a(i) = r(i).Text Else a(i) = r(i)
Next
TNum = a 'vecteur ligne
End Function
Mais dans ce cas le filtre avancé ne va pas, il faut une autre méthode :
Code:
Sub Filtre()
Application.ScreenUpdating = False
If FilterMode Then ShowAllData 'si un filtre est actif
[J3] = ComboBox1: [K3] = ComboBox2: [L3] = ComboBox3: [M3] = ComboBox4: [N3] = ComboBox5: [O3] = ComboBox6: [P3] = ComboBox7
With [A2].CurrentRegion.Columns(9).Offset(1) 'colonne I
  .EntireRow.Hidden = False
  .Formula = "=LN(SUMPRODUCT(--ISNUMBER(SEARCH(J$3:P$3,TNum(A3:G3)&"" "")))=7)"
  On Error Resume Next
  .SpecialCells(xlCellTypeFormulas, 16).EntireRow.Hidden = True
  Union(.Cells, [J3:P3]) = ""
End With
End Sub
A+
 

Pièces jointes

  • Filtre avec nombres(1).xlsm
    52.7 KB · Affichages: 28

Discussions similaires

Statistiques des forums

Discussions
312 172
Messages
2 085 936
Membres
103 051
dernier inscrit
briyan75