Bonjour,

Je dispose d'un tableau L(300)xC(100) dont mes données d'entrées sont mes colonnes et mes critères sont en ligne : d'après ce que j'ai lu sur internet, pour ce genre de configuration, la fonction "filtrer par ..." n'est plus adaptée car elle permet uniquement de filtrer par ligne (? corriger si nécessaire).

Je me lance donc donc des subroutines dans lesquelles je souhaite afficher ou ne pas afficher mes colonnes suivants mes critères de recherches:

1. CRITERE 1: Valeurs de la ligne 10 = entre 190 et 200 (exemple: si L10xC12 = 198, j'affiche la colonne C12 en entier, sinon je masque les autres colonnes ne répondant pas au critère1).
2. CRITERE 2: Texte de la ligne 1 = "High" / "Low" / ou "Average" (exemple: si L1xC5 = "Low", j'affiche la colonne C5 en entier, sinon je masque les autres colonnes ne répondant pas au critère2).

Ces routines doivent être indépendantes : je veux pouvoir chercher avec le critère 1 ou le critère 2 (séparément).
Mais également avec les critère 1 ET 2 simultanément!! (autrement dit si une colonne est déjà masquée par mon premier critère, elle devra le rester en appliquant mon second critère: ce qui me permettra d'affiner ma recherche ...)

J'ai donc commencé ceci (appelé dans un UserForm):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Sub Lancement1()
Dim FBP1 As Single
Dim FBP2 As Single
Dim i As Integer
Application.ScreenUpdating = False
On Error GoTo fin
 
FBP1 = InputBox("Trier les data entre FBP1 et FBP2", "valeur FBP1")
FBP2 = InputBox("Trier les data entre FBP1 et FBP2" ", "valeur FBP2")
 
For i = 2 To 1000
    If Columns(i).EntireColumn.Hidden = True Then
    GoTo suivant
    End If
    ' Je souhaite ici prendre en compte la possibilité qu'une colonne soit déjà masquée par un autre critère et la garder masquée
    ' ici cela ne semble pas marcher lorsque je cumule mes critères ... 
        If Cells(10, i).Value < FBP1 Or Cells(10, i).Value > FBP2 Then
        Columns(i).EntireColumn.Hidden = True
        Else
        Columns(i).EntireColumn.Hidden = False
        End If
 
suivant:
Next
 
Application.ScreenUpdating = True
Exit Sub
fin:
MsgBox "Vous devez saisir une donnée valide"
End Sub   
 
--------------------------------------------------------------------
Sub Lancement2()
Dim CASE As String
Dim z As String
Dim i As Integer
Application.ScreenUpdating = False
On Error GoTo fin
 
CASE = InputBox("CASE=?")
For i = 2 To 1000
    z = Cells(1, i).Value
 
    If Columns(i).EntireColumn.Hidden = True Then
    GoTo suivant
    End If
    ' Je souhaite ici prendre en compte la possibilité qu'une colonne soit déjà masquée par un autre critère et la garder masquée
    ' ici cela ne semble pas marcher lorsque je cumule mes critères ...  
 
        If CASE Like z Then
        Columns(i).EntireColumn.Hidden = False
        Else
        Columns(i).EntireColumn.Hidden = True
        End If
 
suivant:
Next
Application.ScreenUpdating = True
 
Exit Sub
fin:
MsgBox "Vous devez saisir une donnée valide"
End Sub
PROBLEME:
Je ne parviens pas à sévériser mes recherches lorsque j'applique la subroutine1 PUIS la subroutine2: la macro compile mais n'applique pas ce que je souhaite ? En effet, elle me garder des colonnes qui devraient être masquées (car hors de mes critères), ce qui montre que mes boucles de calcul sont mal agencées ... Je ne parvient donc pas à garder uniquement les colonnes avec LOW en ligne L1 ET 190-200 en ligne L10.

Qqun pourrait-il me déboguer SVP ? Merci par avance.