supprimer l'effet de tressautement / scintillement des contrôles ou shapes sur une feuille
bonjour à tous,
Par avance, merci à celles et ceux qui prendront le temps de lire ce post.
après plusieurs heures de recherches vaines ici et ailleurs, je me résous à poster cette question :
Peut-on éviter ces effets de scintillement / tressautement des contrôles ou shapes (présents sur une feuille) à la fin de l'exécution d'une macro ?
Sur un code simple comme la suppression des filtres d'un tableau de données structurées (macro écrite dans un module et lancée via un CB)
Code:
1 2 3 4 5 6 7 8 9
|
Sub supfiltre()
Dim i As Integer
Application.ScreenUpdating = False
For i = 1 To 15
ActiveSheet.ListObjects("T_TAB_1").Range.AutoFilter Field:=i
Next
Application.ScreenUpdating = True
End Sub |
symptôme : les contrôles et/ou shapes présents sur la feuille XLS "sautent" (je sais pas comment l'exprimer autrement).
ça dure un 1/10è de seconde, c'est pas grand chose mais l'expérience utilisateur n'est pas top.
et bien sûr c'est pire avec un code événementiel sur un worksheet_change comme celui-ci (mise en forme de la ligne entière d'un tableau si cellule sélectionnée)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = False
With ListObjects("T_TAB_1").DataBodyRange
.Interior.Color = RGB(255, 255, 255)
.Font.Color = RGB(0, 0, 0)
.Font.Bold = False
End With
If Not Intersect(ListObjects("T_TAB_1").DataBodyRange, Target) Is Nothing And Target.Count = 1 Then
b = Target.Row
With ListObjects("T_TAB_1").ListRows(b - 11).Range
.Interior.Color = RGB(149, 170, 184)
.Font.Color = RGB(255, 255, 255)
.Font.Bold = True
End With
Else:
Application.ScreenUpdating = True
Exit Sub
End If
Application.ScreenUpdating = True
End Sub |
Dans ce cas bien entendu, à chaque sélection de cellule, les contrôles "sautent" et là, c'est franchement désagréable.
Je ne comprend pas d'où ça vient et je ne parviens pas à empêcher cet effet.
"Application.ScreenUpdating = True / False" ne change rien (ou alors, je l'utilise mal)
Vous l'aurez sans doutes compris, je ne suis pas un pro en VBA (les experts auront certainement des boutons en lisant ces quelques lignes de code :mrgreen:), donc j'ai bêtement tenté les "application.calculation", "application.EnableEvents",... etc sans succès....:(
Je ne pense pas que ça viennent du fait que les contrôles soient directement sur une feuille vu que d'autres macros ,telles que l'alimentation des combo ou les recherches "intuitives" sur des combo (en procédures événementielles), ne provoquent pas cet effet de scintillement.
Est-ce que ça vient du code ?
Est-ce que ça vient de la version d'Excel ?
y-a-t-il un paramètre qui m'échappe dans VBE ?
bref, je sèche.
:arf:
Quelqu’un aurait-il un début d'explication pour le béotien que je suis ? ou un correctif à apporter ?
Si nécessaire, je peux fournir un petit fichier d'exemple avec des données fictives.
Précision (si besoin), je ne veux pas passer par un formulaire. Les choix / filtres / interactions et actions de l’utilisateur doivent se faire via une feuille xls.
Encore une fois merci pour votre lecture.