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 !
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.