Excel VBA – Macro pour filtrer sans formulaire

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 !

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

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

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

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

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

Dernière édition:
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

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

- 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
14
Affichages
550
Réponses
1
Affichages
84
Réponses
6
Affichages
545
Réponses
8
Affichages
225
W
Réponses
2
Affichages
121
Retour