VBA - Filtre issu d'une Macro empêchant le défilement molett

Bonjour à tous,

Je me permets de vous écrire car je fais face à un problème de taille et très étrange, je vous explique.

J'ai sur une première feuille l'onglet "Accueil", depuis cet onglet, un bouton me permet d'appeler un Userform dans lequel se trouve une ListBox dans laquelle l'utilisateur peut un critère de tri qui va, lors de l'appuie sur le bouton "Rechercher" de l'Userform, filtrer sur l'onglet "Listing" la valeur sélectionnée dans le Userform et afficher l'onglet "Listing".

Jusque là, pas de problème, cependant, après ce tri et l'affichage de l'onglet, il m'est impossible d'utiliser la molette pour descendre vers le bas et voir d'éventuelles lignes plus bas. Après quelques recherches, il s'avère que si j'utilise la molette après avoir utiliser mon UserForm, celle-ci fonctionne sur l'onglet "Accueil" et non pas sur l'onglet "Listing" alors que c'est bien cet onglet qui est affiché.

J'ai déjà vérifié si c'était une histoire de "Figer les volets" ou non.

Je vous donne ci-dessous le code de mon problème. Peut être trouverez-vous une erreur dans celui-ci qui me permettrait de résoudre mon problème :

Dim Mag As String
Private Sub CommandButton1_Click()

'Si aucun critère n'est sélectionné dans la ListBox
'Alors le message "Selectionnez un critère" s'affiche
    If ListBox1.ListIndex = -1 Then
        MsgBox "Selectionnez un critère"

'Si un critère est selectionné alors
'La variable "Mag" prend la valeur selectionnée dans la ListBox
'Sur l'onglet "Listing", la colonne n°9 est filtré selon la variable Mag
'Sur l'onglet "Listing", la colonne n°4 est filtré selon "Magasin"
'Sur l'onglet "Listing", la colonne n°2 est filtré selon "Logistique"
'La feuille "Listing" s'affiche"
'La cellule A7 est slectionnée
    Else
        Mag = ListBox1.Value
        Worksheets("Listing").Range("$A$6:$I$6").AutoFilter Field:=9, Criteria1:=Mag
        Worksheets("Listing").Range("$A$6:$I$6").AutoFilter Field:=4, Criteria1:="Magasin"
        Worksheets("Listing").Range("$A$6:$I$6").AutoFilter Field:=2, Criteria1:="Logistique"
        Worksheets("Listing").Activate
        Range("A7").Select
        Unload Recherche_Magasin

    End If
End Sub

Bonjour,

Le bouton est sur ton onglet Accueil.

Si tu déplaçais la ligne

       Worksheets("Listing").Activate

Après le END IF ?

Bonjour,

Pour s'éviter des écritures inutiles :

Private Sub CommandButton1_Click()
    Dim Mag As String
    If ListBox1.ListIndex > -1 Then
        Mag = ListBox1.Value
        Application.ScreenUpdating = False
        With Worksheets("Listing")
            If .FilterMode Then .ShowAllData
            With .Range("$A$6:$I$6")
                .AutoFilter 2, "Logistique"
                .AutoFilter 4, "Magasin"
                .AutoFilter 9, Mag
            End With
            .Activate
        End With
        Unload Recherche_Magasin
    Else
        MsgBox "Selectionnez un critère"
    End If
End Sub

Mais rien qui ait une incidence sur ta molette ! Faut chercher ailleurs.

ouisansdoute a écrit :

Bonjour,

Le bouton est sur ton onglet Accueil.

Si tu déplaçais la ligne

Code: Tout sélectionner Worksheets("Listing").Activate

Après le END IF ?

Bonjour, j'ai essayé, rien de bien concluant...

MFerrand a écrit :

Bonjour,

Pour s'éviter des écritures inutiles :

Code

Mais rien qui ait une incidence sur ta molette ! Faut chercher ailleurs.

Bonjour, wow, impressionnant, merci pour cette réduction de code, n'étant pas encore très familier avec les différentes fonctions VBA, j'ai fait avec les moyens du bord. Merci en tout cas, même si je ne connais pas toute la syntaxe que tu as utilisé (en tout cas, ça fonctionne très bien).

Serait-il possible d'avoir quelques explications quant au .Filtermode .ShowAllData (Peut être une description du code si tu as un peu de temps devant toi?)

Cependant mon bug reste d'actualité il semblerait.. Rien ne semble vous choquer dans mon code il semblerait donc ?

Quand tu filtres, il est bon de s'assurer qu'un filtre n'est pas actif (sur un autre champ, ce qui fausserait le filtrage), donc en cas de filtre actif on réaffiche tout pour refiltrer à partir de 0, de façon sûre.

Mais ton histoire de molette ne vient pas du code de toute façon !

MFerrand a écrit :

Quand tu filtres, il est bon de s'assurer qu'un filtre n'est pas actif (sur un autre champ, ce qui fausserait le filtrage), donc en cas de filtre actif on réaffiche tout pour refiltrer à partir de 0, de façon sûre.

Mais ton histoire de molette ne vient pas du code de toute façon !

Merci pour l'information, je note ça, du coup j'avais déjà des boutons me permettant de reset la plupart des filtres, mais c'est plutôt pratique en cas d'oublie ou pour faciliter le travail, je garde ça sur un coin de table et je vais probablement l'utiliser sur les autres modules de mon programme.

Merci encore.

Du coup, je me suis dis qu'il fallait peut être rajouter quelque chose au code pour palier au problème ? En forçant l'utilisation de la molette sur la feuille souhaité ?

Ce qui m'intrigue c'est que si j'utilise la molette après avoir utilité l'UserForm, le défilement se fait sur l'onglet 1 et pas l'onglet 2.

Le défilement devrait se faire sur la feuille active ! Ou j'ai loupé quelque chose ?

Oui, il devrait techniquement se faire sur la feuille active (Celle où sont les filtres), ce qui n'est pas le cas pour une raison inconnue. Le défilement se faire sur la première feuille sur laquelle je lance mon programme qui filtre.

Bonsoir, petit up pour apporter un morceau de solution trouvé par mes soins. On est sur du système D, mais ça fonctionne.

Du coup, pour palier au problème énoncé précédemment, j'ai ajouté une ligne de code sur celui me permettant d'appeler mon UserForm à savoir

Sub Recherche_Expé()

'Ouvre l'UserForm Recherche_Expé

Worksheets("Listing").Select

Recherche_Expédition.Show

End Sub

La solution est ici d'ouvrir la feuille 2 où se fait le filtre avant d'effectuer le filtre à l'aide de l'UserForm.

Voilà, si ca peut aider certaines personnes avec un problème similaire. Au plaisir.

Rechercher des sujets similaires à "vba filtre issu macro empechant defilement molett"