Code VBA : Filtre + Test = "Codage dinosaure"?

Bonjour,

Je suis en train de faire une userform qui regroupe plusieurs fonctions et notamment une fonction de tri.

J'ai enregistré la fonction de tri, je l'ai adapté dans mon code, etc, le code fonctionne, je commence à l'adapter à chaque possibilité, mais là je commence à me rendre compte que cela va prendre pas mal de place :

J'ai 4 filtres, si l'utilisateur en veux 1, 4 possibilités. (0,7 ou 0,8 ou 0,9 ou 1)

si l'utilisateur en veux 2, 6 possibilités (0,7/0,8 ou 0,7/0,9 ou 0,7/1 ou 0,8/0,9 ou 0,8/1 ou 0,9/1)

si l'utilisateur en veux 3, 4 possibilités (0,7/,0,8/0,9 ou 0,7/0,8/1 ou 0,7/0,9/1 ou 0,8/0,9/1)

si l'utilisateur en veux 4, 1 possibilité (0,7/0,8/0,9/1)

filtre

Je sais, je me complique la vie pour rien, placer un filtre sur une colonne mais j'ai des "Vieux de la vieille" qui ont leurs habitudes et pas évident de leur en faire démordre.

Du coup je voulais savoir si niveau code il y a moyen d'alléger ou est-ce que je reste sur du codage dinosaure ? De ce genre :

Macro

Sub Capacity1()
'
' Macro filtre capacité 1V
    Range("C4").Select
    Selection.AutoFilter
    ActiveSheet.Range("$A$4:$R$64").AutoFilter Field:=3, Criteria1:= _
        "capacity at 1V"
End Sub
Sub CapacityAll()
'
' Macro filtre capacité, toute tension confondue
    ActiveSheet.Range("$A$4:$R$64").AutoFilter Field:=3, Criteria1:=Array( _
        "capacity at 0,7V", "capacity at 0,8V", "capacity at 0,9V", "capacity at 1V"), Operator:= _
        xlFilterValues
End Sub

+ Test (au début j'avais fait une liste déroulante pour tester)

Private Sub cmdCapa_Click()
    If cboCapa = "0,7V" Then
        Capacity7
    ElseIf cboCapa = "0,8V" Then
        Capacity8
    ElseIf cboCapa = "0,9V" Then
        Capacity9
    ElseIf cboCapa = "1V" Then
        Capacity1
    ElseIf cboCapa = "Toutes" Then
        CapacityAll
    End If
End Sub

Merci de vos conseils.

Bonjour Timothe, bonjour le forum,

Pas sûr d'avoir bien compris... Un code (non testé) pour n'avoir qu'une seule procédure de filtre :

Private TT() As String 'déclare la variable TT (en haut du module)

Private Sub CommandButton1_Click() 'sur le commandButton "Filtrer les capacités"
For I = 1 To 4
    If Me.Controls("CheckBox" & I).Value = True Then
    ReDim Preserve TT(1 To I)
    TT(I) = "capacity at " & Me.Controls("CheckBox" & I).Caption
End If
End Sub

Sub Capacity()
Range("C4").Select
Selection.AutoFilter
    ActiveSheet.Range("$A$4:$R$64").AutoFilter Field:=3, Criteria1:=TT
End Sub

Salut TauThème,

En gros je veux appliquer un filtre en fonction des "CheckBox" cochées.

En enregistrant le filtre (équivalent à 4 filtres actif), Excel m'a sorti ça :

Sub CapacityAll()
'
' Macro filtre capacité, toute tension confondue
    ActiveSheet.Range("$A$4:$R$64").AutoFilter Field:=3, Criteria1:=Array( _
        "capacity at 0,7V", "capacity at 0,8V", "capacity at 0,9V", "capacity at 1V"), Operator:= _
        xlFilterValues
End Sub

Dans le cas où seul une "CheckBox" est cochée :

    Selection.AutoFilter
    ActiveSheet.Range("$A$4:$R$64").AutoFilter Field:=3, Criteria1:= _
        "capacity at 1V"

Donc c'est juste histoire de ne pas faire 15 lignes de codes, pour ne pas alourdir le fichier pour chaque cas, si possible.

Bonjour Timothe, bonjour le forum,

As-tu testé le code que je t'ai proposé ? Le tableau TT se remplit en fonction des cases cochées. Puis le filtre utilise ce tableau TT comme critère. Pour le tester moi-même je serais obligé de recréer ton environnement complet et je n'ai pas eu le courage. Sinon envoie ton fichier en pièce jointe...

Je l'ai essayé, on a pas de message d'erreur mais il ne se passe rien, j'ai commencé à regarder à quel endroit cela plante.

Je joins le fichier (c'est un peu le basard, y a des macros de partout, je vais m'éclater à tout remettre en ordre quand le programme sera fonctionnel. La majorité des macros qui concernent le tri sont dans le module 4.)

Pour lancer la userform qui nous intéresse, c'est feuille "Carton", bouton "Mise en Forme".

J'ai laissé sur les deux autres feuilles des bouts de fichiers en exemple (y a tout, sauf les infos sensibles ^^) . Ils sont ajoutés par le bouton "Insérer" (Ouverture fichier, copier/coller, etc ...)

6sytelv2.xlsm (68.50 Ko)

Bonjour Timothe, bonjour le forum,

Avec ton fichier j'ai pu tester et maintenant ça marche...

p.s. Tu parles d'un bazar ! J'ai trouvé, au contraire, tout bien propre et ordonné...

21timothe-v01.zip (54.87 Ko)

Bonjour ThauThème,

Du coup ça marche et sa fait beaucoup plus soft parmis les macros, merci du coup de main.

Disons qu'il faudrait que je trie pour avoir les macros d'une même fonction relativement proche. Comme ça si quelqu'un passe derrière moi, il ne passera pas trop de temps à retrouver qui fait quoi (d'où la profusion de commentaires sur la plupart des macros).

Je ferais ça quand le fichier sera vraiment complet.

Rechercher des sujets similaires à "code vba filtre test codage dinosaure"