Filtre VBA

Bonjour,

Je sollicite votre aide pour un petit problème.

Je désire mettre en place des filtres permanent afin de créer un style tableau de bord, dans mon cas l'utilisation de TCD est impossible, la table doit rester comme cela, car je viens injecter des valeurs périodiquement.

Concrètement, je souhaite mettre en place des filtres par noms et par seuils, le problème est que:

Quand je filtre sur les centre 025, 15 lignes apparaissent, maintenant je veux les 5 lignes avec le plus d'évènements dans la colonne An ou Mn ou Sn.

Le problème est que le top 5 par exemple agit sur ma table tout entière et ne prends pas en compte le filtre 025.

J'ai crée des variables loupe et top qui me permette de modifier les vues, An;Mn;Sn, 5, 10,30,50

Sub Filtragetop()

Dim loupe As String

Dim colonne As Integer

Dim top As Byte

loupe = Sheets("test").Range("H1")

top = Sheets("test").Range("H2")

colonne = Sheets("test").Rows(7).Find(loupe, lookat:=xlWhole).Column

ActiveSheet.Range(Cells(7, colonne), Cells(2000, colonne)).SpecialCells(xlCellTypeVisible).AutoFilter Field:=colonne, Criteria1:=top, _

Operator:=xlTop10Items

End Sub

Sub Filtragecentre()

Dim centre As String

Dim plage As Range

centre = Sheets("test").Range("H3")

ActiveSheet.Range("$A$7:$G$31").AutoFilter Field:=1, Criteria1:=centre

End Sub

J'ai essayé de contourner le problème avec SpecialCells(xlCellTypeVisible), pour que le filtre ne s'applique que a ce qui est visible, mais sans succès.

Je me suis penché sur l'option AdvancedFilter, cela fonctionne, mais je n'arrive pas à mettre en place un système de TOP évènements. Existe t'il un test logique qui permeterait d'afficher que les 10 premières valeurs ?

Grande valeur ? Rang ?

Sub FiltrerDonner()

'déclaration des varaibles

Dim données As Range

Dim critères As Range

'affectation des varaibles

Set données = ThisWorkbook.Worksheets("test").Range("A12").CurrentRegion

Set critères = ThisWorkbook.Worksheets("test").Range("A1").CurrentRegion

'On lance l'outil filtreAvance

données.AdvancedFilter xlFilterInPlace, critères

End Sub

Sachant que je préférerai trouver une solution avec la première réflexion,

Merci d'avance pour votre temps,

Bonne fin de journée,

9test-filtrage.xlsm (22.27 Ko)

Bonjour,

Est ce que tu peux installer Power Query en addon pour Excel 2013.

Si oui, un tableau distinct par valeur est-il envisageable ?

Cordialement.

Bonjour,

Merci pour ta réponse, hélas non ce n'est pas possible, l'outil a pour but d'être utilisé en entreprise et doit fonctionner sur toutes les machines..

re,

Si tu peux installer Power Query, une proposition, à tester.

Cordialement.

6test-filtrage.xlsm (45.02 Ko)

Merci pour ton retour, j'ai pu découvrir un peu Power Query, mais cela n'apporte pas la solution que je souhaité, je n'ai pas la possibilité de l'installer en entreprise.

Pas d'autre piste ?

Bonne soirée à toi,

Re,

Une version sans PQ.

Dis moi si cela te convient.

Cordialement

5test-filtrage.xlsm (46.79 Ko)

Merci à toi pour ton temps, cela se rapproche dans l'idée, c'est vraiment pas mal. L'inconvénient c'est que ma table initiale fait plus de 2000 lignes et 40 colonnes, je vais envisager de renvoyer toutes les valeurs dans un autre onglet comme tu l'as fait, puis masquer les formules. De base j'aurai aimé filtré directement sur la même base et si possible en vba pour laisser la table in- modifiable.

Je suis un débutant sur excel, pense tu que c'est la seul solution ?

Bonne journée

Bonjour,

Au vu du volume de données, si tu ne peux pas utiliser PQ, la solution VBA me parait la plus judicieuse. N'en étant pas un spécialiste je passe la main à des contributeurs plus aguerris.

Bonne continuation.

Cordialement.

Re,

Confinement oblige, le temps ne manque pas.

Un essai à tester.

Dis moi si cela te convient.

Cordialement.

Merci à toi, ça fonctionne parfaitement ! Je vais pouvoir régler mon problème,

Grace à toi je découvre l'outil indirect, cependant, je suis en conflit avec la fonction .. je dois passer à coté de quelque chose, impossible d'obtenir les valeurs que toi, je reste bloqué en #REF

=INDIRECT("t[@"&Base!$O$2&"]")

Il doit y avoir une histoire de format ??

Est ce possible de croiser la fonction indirect avec RANG ? c'est à dire obtenir le rang de la ligne en fonction de la selection

Merci d'avance,

Bonne journée a toi

Bonsoir,

=INDIRECT("t[@"&Base!$O$2&"]")

A quelle cellule ou plage correspond "t[@"?

=INDIRECT("T_Base[@"&Base!$C$2&"]")

Correspond à T_Base[@An] ce qui renvoie la valeur de la cellule de la colonne An sur la même ligne dans le tableau T_Base

Pour que cela fonctionne il faut que la fonction INDIRECT renvoie une adresse qui existe.

Cordialement.

C'est donc ca ! tout simplement, du coup je suis partie sur une autre solution,

J'ai repris la fonction VBA de base pour filtrer,

Sub FiltrerDonnées()

'permet de filtrer les données

'déclaration des varaibles

Dim données As Range

Dim critères As Range

'affectation des varaibles

Set données = ThisWorkbook.Worksheets("Base").Range("A7").CurrentRegion

Set critères = ThisWorkbook.Worksheets("Base").Range("A1").CurrentRegion

'On lance l'outil filtreAvance

données.AdvancedFilter xlFilterInPlace, critères

Mon problème était de reussir à re-évaluer les rangs après premiers filtres pour filtrer à nouveau après, chose que j'ai pu faire en utilisant la fonction sous.prod

=SI($G$2="An";SOMMEPROD(SOUS.TOTAL(2;DECALER(D$7;LIGNE(D$8:D$33)-LIGNE(D$7);))*(D$8:D$33>D8))+1;SI($G$2="Mn";SOMMEPROD(SOUS.TOTAL(2;DECALER(E$7;LIGNE(E$8:E$33)-LIGNE(E$7);))*(E$8:E$33>E8))+1;SI($G$2="Sn";SOMMEPROD(SOUS.TOTAL(2;DECALER($F$7;LIGNE(F$8:F$33)-LIGNE(F$7);))*(F$8:F$33>F8))+1)))

un peu long mais ca fait le travail...

Encore merci à toi pour temps,

Bonne journée

Rechercher des sujets similaires à "filtre vba"