IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Appliquer un type de filtrage selon une case d'option [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    apt
    apt est déconnecté
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Par défaut Appliquer un type de filtrage selon une case d'option
    Bonsoir à tous,

    Sur une même base de données, j'aimerais appliquer déférents type de filtrage et cela selon la valeur choisie d'une case d'option.


    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
    Sub FiltreOption()
        Dim Crit As Range
        With Sheets("feuil2")
            .[H3] = .[H9] & .[H11]    '1er Critère Arrêt
            .[I3] = .[I9] & .[I11]    '2ème Critère "Arrêt
            .[J3] = .[J9] & .[J11]    '3ème Critère Dn"
            Set Crit = .Range("H2:J3")
            Crit(2, 3).Value = Replace(Crit(2, 3).Value, ",", ".")
     
            Select Case Sheets("Feuil").[E2]
            Case 1    'FIltre sur place
                ActionFiltre = xlFiltreInPlace
            Case 2    'Filtre sur une nouvelle feuille
                ActionFiltre = xlFiltreCopy
            Case 3    'Filtre dans une nouvelle feuille plus impression
                ActionFiltre = xlFiltreCopy
            End Select
     
            .Range("A2:E63").AdvancedFilter _
                    Action:=ActionFiltre, _
                    CriteriaRange:=[Crit], _
                    CopyToRange:=.Range("J2:L2"), _
                    Unique:=False
        End With
    End Sub
    Merci d’avance.
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    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
    Sub FiltreOption()
    Dim Crit As Range
    Dim ActionFiltre As Byte
    Dim Prnt As Boolean
     
    With Sheets("BD")
        .[H3] = .[H9] & .[H11]                         '1er Critère Arrêt
        .[I3] = .[I9] & .[I11]                         '2ème Critère "Arrêt
        .[J3] = .[J9] & .[J11]                         '3ème Critère Dn"
        Set Crit = .Range("H2:J3")
        Crit(2, 3).Value = Replace(Crit(2, 3).Value, ",", ".")
     
        '--Type de filtrage selon la valeur de la case d'option sur la feuille
        Select Case Sheets("Acceuil").[E2]
            Case 1                                     'FIltre sur place
                ActionFiltre = 1
            Case 2                                     'Filtre dans une nouvelle feuille
                ActionFiltre = 2
            Case 3                                     'Filtre dans une nouvelle feuille plus impression
                ActionFiltre = 2
                Prnt = True
        End Select
     
        .Range("A2:E63").AdvancedFilter Action:=ActionFiltre, CriteriaRange:=[Crit], CopyToRange:=.Range("M1:Q1"), Unique:=False
        If Prnt Then .Range("M1").CurrentRegion.PrintOut
        Set Crit = Nothing
    End With
    End Sub

  3. #3
    apt
    apt est déconnecté
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Par défaut
    Bonsoir mercatog,

    Comme je devrais avant chaque filtrage savoir quelle case d'option a été sélectionner, j'ai codé une nouvelle procédure qui me rend le type de filtrage voulu, et j'ai déclaré les variables concernées comme public.

    Mais voila, ces variables restent toujours vides après l'exécution de la procédure TypeFiltrage et le filtre déclenche une erreur (ActionFiltre=0) !


    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
    Option Explicit
    Dim ActionFiltre As Byte
    Dim Prnt As Boolean
    Dim nOng As String
    Sub TypeFiltrage()
    '--Type de filtrage selon la valeur de la case d'option sur la feuille
        Select Case Sheets("Acceuil").[E2]
        Case 1                                     'FIltre sur place
            ActionFiltre = 1
            nOng = "BD"
        Case 2                                     'Filtre dans une nouvelle feuille
            ActionFiltre = 2
            nOng = "Feuil3"
        Case 3                                     'Filtre dans une nouvelle feuille plus impression
            ActionFiltre = 2
            Prnt = True
            nOng = "Feuil3"
        End Select
    End Sub
    Sub FiltreOption()
        Dim Crit As Range
     
        With Sheets("BD")
            'ActiveSheet.ShowAllData
            On Error Resume Next
            .ShowAllData
            '[M1].CurrentRegion.ClearContents
            Sheets("Feuil3").Range("A3:D100").ClearContents
            On Error GoTo 0
            .[H3] = .[H9] & .[H11]                         '1er Critère Arrêt
            .[I3] = .[I9] & .[I11]                         '2ème Critère "Arrêt
            .[J3] = .[J9] & .[J11]                         '3ème Critère Dn"
            Set Crit = .Range("H2:J3")
            Crit(2, 3).Value = Replace(Crit(2, 3).Value, ",", ".")
     
     
            .Range("A2:E63").AdvancedFilter Action:=ActionFiltre, CriteriaRange:=[Crit], CopyToRange:=Sheets("Feuil3").Range("A2:D2"), Unique:=False
            'If Prnt Then .Range("M1").CurrentRegion.PrintOut
            Sheets(nOng).Activate
        End With
     
        Set Crit = Nothing
    End Sub

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Il faudra appeler la procédure TypeFiltrage au sein de FiltreOption


    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
    Option Explicit
    Dim ActionFiltre As Byte
    Dim Prnt As Boolean
    Dim nOng As String
    Sub TypeFiltrage()
     
    '--Type de filtrage selon la valeur de la case d'option sur la feuille
    Prnt = False
    Select Case Sheets("Acceuil").[E2]
        Case 1                                         'FIltre sur place
            ActionFiltre = 1
            nOng = "BD"
        Case 2                                         'Filtre dans une nouvelle feuille
            ActionFiltre = 2
            nOng = "Feuil3"
        Case 3                                         'Filtre dans une nouvelle feuille plus impression
            ActionFiltre = 2
            Prnt = True
            nOng = "Feuil3"
    End Select
    End Sub
    Sub FiltreOption()
    Dim Crit As Range
     
    With Sheets("BD")
        'ActiveSheet.ShowAllData
        On Error Resume Next
        .ShowAllData
        On Error GoTo 0
     
        .[H3] = .[H9] & .[H11]                         '1er Critère Arrêt
        .[I3] = .[I9] & .[I11]                         '2ème Critère "Arrêt
        .[J3] = .[J9] & .[J11]                         '3ème Critère Dn"
        Set Crit = .Range("H2:J3")
        Crit(2, 3).Value = Replace(Crit(2, 3).Value, ",", ".")
     
        TypeFiltrage ' ICI
     
        .Range("A2:E63").AdvancedFilter Action:=ActionFiltre, CriteriaRange:=[Crit], CopyToRange:=Sheets(nOng).Range("A2:E2"), Unique:=False
        If Prnt Then Sheets(nOng).Range("A2").CurrentRegion.PrintOut
        Sheets(nOng).Activate
    End With
     
    Set Crit = Nothing
    End Sub

  5. #5
    apt
    apt est déconnecté
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Par défaut
    Bonjour mercatog,

    Il faudra appeler la procédure TypeFiltrage au sein de FiltreOption
    C'est ce que j'ai fait dans un autre code adapté.

    Seulement, l'erreur était que j'ai redéfinis à nouveau les valeurs publiques en privées dans la procédure FIltreOption

    C'est pout cela, que les variables issues de la procédure TypeFiltrage s'effacent quand on retourne dans la procédure FiltreOption.

    Merci mercatog.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Rendre champ obligatoire ou non selon une case à cocher
    Par m6riil dans le forum IHM
    Réponses: 2
    Dernier message: 25/04/2013, 15h07
  2. changer le type de composant avec une case a cocher
    Par Txiki dans le forum Composants VCL
    Réponses: 3
    Dernier message: 18/03/2009, 19h29
  3. [A-07] Afficher Image selon une case à cocher
    Par vinze60 dans le forum IHM
    Réponses: 10
    Dernier message: 21/10/2008, 10h11
  4. recuperer une variable selon une case a cocher
    Par Jerez62 dans le forum VBA Access
    Réponses: 8
    Dernier message: 31/05/2008, 06h02
  5. Réponses: 5
    Dernier message: 15/08/2006, 16h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo