XL 2016 Équivalent à Filtre sous Excel 2016 ?

telemarrk

XLDnaute Occasionnel
Bonsoir,

J'ai dernièrement solliciter les membres du forum pour une aide sur la fonction filtre, aide qui m'a été donnée par Mapomme et Hasco.

J'ai appliqué les consignes sur un fichier au travail, mais il s'avère qu'il y a des PC qui tournent sur Excel 2016 et je ne peux appliquer la fonction Filtre.

Quelqu'un peut-il m'aider pour avoir une fonction alternative sur la version 2016 d'Excel.

Je vous joins le fichier d'exemple. J’aimerais avoir la fonction en L19


Merci
 

Pièces jointes

  • test-filtre.xlsx
    13.6 KB · Affichages: 22

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir @telemarrk :), @riton00 :),

Une autre formule matricielle en L3 puis :
  • recopier L3 sur la droite jusqu'à Q3
  • formater les cellules de cette plage L3:Q3
  • recopier la plage L3:Q3 vers le bas jusqu'à obtenir des cellules vides
La formule matricielle en L3 :
=SIERREUR(INDEX(C:C;PETITE.VALEUR(SI($C$3:$C$999=$L$1;LIGNE($C$3:$C$999);"");LIGNES($1:1)));"")

nota : il faut recopier la plage L3:Q3 suffisamment vers le bas pour pouvoir afficher toutes les lignes filtrées mais aussi en prévision de l'augmentation de taille du tableau source. C'est pour cela que les cellules avec les formules ont une ligne pointillée en bordure basse pour visualiser les cellules avec formules.

rem : si besoin, augmentez la valeur 999 dans la formule.


1677708846467.png
 

Pièces jointes

  • telemarrk- test-filtre- v1.xlsx
    13.2 KB · Affichages: 22

job75

XLDnaute Barbatruc
Bonsoir telemarrk, riton00, mapomme,

Voyez le fichier joint et cette fonction VBA :
VB:
Function FiltreVBA(plage As Range, critere(), defaut)
Dim ub1&, ub2%, resu(), i&, n&, j%
ub1 = Application.Caller.Rows.Count
ub2 = Application.Caller.Columns.Count
ReDim resu(1 To ub1, 1 To ub2)
For i = 1 To plage.Rows.Count
    If critere(i, 1) Then
        If n = ub1 Then Exit For
        n = n + 1
        For j = 1 To ub2
            resu(n, j) = plage(i, j)
        Next j
    End If
Next i
For i = n + 1 To ub1
    For j = 1 To ub2
        resu(i, j) = defaut
Next j, i
FiltreVBA = resu 'matrice
End Function
Le code doit être placé impérativement dans un module standard.

Dans la feuille de calcul la fonction est entrée matriciellement en bloc sur la plage L19:Q22.

Les arguments sont les mêmes que ceux de la fonction FILTRE, donc il suffira de remplacer le nom "FILTRE" par "FiltreVBA".

A+
 

Pièces jointes

  • FiltreVBA(1).xlsm
    21.5 KB · Affichages: 47

telemarrk

XLDnaute Occasionnel
Bonjour,

Merci à vous tous.

Riton00 : C'est parfait, c'est ce que je cherche à faire.
Mapomme : Idem et merci pour les explications
Job75 : Idem, as-tu un site pour débutant en VBA ?

Il ne me reste plus qu'a tester cela sur les PC ayant Excel 2016.

Je vous tiens au courant dans la journée.
 

job75

XLDnaute Barbatruc
Bonjour le fil, le forum,

Repassant par ici j'en profite pour simplifier ma fonction FiltreVBA :
VB:
Function FiltreVBA(tableau, critere(), defaut)
Dim ub1&, ub2%, i&, n&, j%
tableau = tableau
ub1 = UBound(tableau, 1)
ub2 = UBound(tableau, 2)
For i = 1 To ub1
    If critere(i, 1) Then
        n = n + 1
        For j = 1 To ub2
            tableau(n, j) = tableau(i, j)
        Next j
    End If
Next i
For i = n + 1 To ub1
    For j = 1 To ub2
        tableau(i, j) = defaut
Next j, i
FiltreVBA = tableau 'matrice
End Function
Application.Caller et la variable resu() étaient inutiles.

A+
 

Pièces jointes

  • FiltreVBA(2).xlsm
    20.6 KB · Affichages: 59

obii

XLDnaute Nouveau
J'ai testé en recopiant le tableau C3:H10 sur 100 000 lignes.

Chez moi la fonction FiltreVBA se recalcule en 0,51 seconde.

C'est légèrement plus rapide que l'application du filtre automatique 0,58 s.
Bonjour pour ma part j'ai copié ta fonction vba sur un module et j'essaie de l'utiliser sur sur une cellule excel mais elle ne fonctionne pas :/
y'a quelque chose de particulier à faire ?
 

Discussions similaires

Statistiques des forums

Discussions
315 093
Messages
2 116 130
Membres
112 667
dernier inscrit
foyoman