Se débarasser d'un clignotement - macro

Le temps de comprendre ton code (qui est bien au-dessus de mon niveau d'expertise sur Excel ) et de l'essayer, et je te redis si ça fonctionne !
Merci beaucoup !

Re,

Mon code n'a rien de sorcier, je vous rassure

Juste l'instruction SPLIT() peut-être qui permet de créer 2 tableaux
https://www.excel-pratique.com/fr/fonctions-vba/split

A+

re,

ou si on le veux sans "dingueries" en direct

mais ce qui me surprends, c'est qu'il y a encore un tout petit clignotement que je ne sais pas éliminer, même sans bouton, quand on se trouve dans la feuille "CTRL" quand on regarde ces boutons.

8exemple-10.xlsm (51.80 Ko)
Sub Insérer()
     Dim i     As Integer
     Application.ScreenUpdating = False
     For i = 1 To 6
          With Sheets("Feuil" & i)
               .Unprotect
               .ListObjects("Tabl" & i).ListRows.Add.Range.Cells(1).Value = "Test " & i & " à " & Format(Now, "hh:mm:ss")
               .Protect
          End With
     Next
     Application.ScreenUpdating = True
End Sub

Sub RAZ()
     Dim i     As Integer
     Application.ScreenUpdating = False
     For i = 1 To 6
          With Sheets("Feuil" & i)
               .Unprotect
               With .ListObjects("Tabl" & i)
                    If .ListRows.Count Then .DataBodyRange.Delete
               End With
               .Protect
          End With
     Next
     Application.ScreenUpdating = True
End Sub

Re …

Oups, j’ai zappé des Tableaux répartis dans des Feuilles Protégées !

Si la ligne

Application.ScreenUpdating = 0

est oubliée, il y aura des clignotements sur les lignes contenant des formules remises à jour à l’ajout ou la suppression d’une ligne (programmées ou pas pour les Tableaux Structurés dans le options de bases).

Voici un autre exemple, plus complet, non pas avec la fonction Split, très utile dans certains cas, mais avec la fonction Array couvrant un éventail plus étendu dont celui permettant de gérer, comme ici, des Tableaux Structurés de Feuilles par des Tableaux VBA (Array).

Nota : pour éviter d’autres clignotements j’utilise ici, les appels de macros par leur Option définies (Ctrl + une touche).

Les codes tiennent compte des cellules sous le tableau pour ne pas les couvrir comme prévu par ce type de Tableau !

J’y ai ajouté 3 macros utiles pour faciliter le travail lors de la conception de ce projet simplifié.

Maintenant, ce sera une autre histoire qui sera d’autant plus corsée dans un contexte avec de nombreuses cellules protégées ou pas, dispersées ici ou là, de multiples mots de protection …

Salut,

Je n'avais pas ouvert le classeur par flemme...

Dans ton code remplace simplement les appels de Unprotect qui sont la source du clignotement en appelant les feuilles par leur CodeName et vois ce que cela donne chez toi, tu ne passeras plus par Excel donc normalement cela devrais être bon.

'...
'...
Feuil1.Unprotect
Feuil2.Unprotect
Feuil3.Unprotect
Feuil4.Unprotect
Feuil5.Unprotect
Feuil6.Unprotect

'...
'...
Feuil1.Protect
Feuil2.Protect
Feuil3.Protect
Feuil4.Protect
Feuil5.Protect
Feuil6.Protect

Si ce n'est pas le cas tu dois peut-être avoir des appels dans ta fonction qui génère ce clignotement

'...
'...
Call Appel_a_une_autre_fonction

'...
'...
Appel_a_une_autre_fonction
'...
'...

@Jean-Paul, j'étais surpris par votre remarque qu"on sait sursauter la protection d'une feuille en utilisant son "codename". Don je l'ai essayé directement, mais il n'y a pas de différence. Y-a-t-il quelque chose que j'ai mal compris

Re,

j'étais surpris par votre remarque qu'on sait sursauter la protection d'une feuille en utilisant son "codename"

Je ne comprends pas bien le "sursauter"...

Quand on accède à une feuille par son CodeName on ne passe pas par Excel, donc normalement pas de clignotement.

Chez moi cela fonctionne.

re,

d'accord, cela ne clignotte plus, donc sheet("Feuil1") et Feuil1 sont 2 objets différents, apparament Feuil1.listobjects(1) ne fonctionne pas, mais sheets("Feuil1").listobjects(1) est okay. Bizar.

Re,

sheet("Feuil1") et Feuil1 sont 2 objets différents, apparament Feuil1.listobjects(1)

Ce n'est pas pareil tu dois faire attention au nom.

capture d ecran 2023 04 18 214417

Donc dans l'exemple ci-dessus, si la feuille comporte bien un TS les deux lignes ci-dessous sont valables

ceci : Feuil4.ListObjects(1).Range.Select ou cela est valable Worksheets("Ma Feuille").listObjects(1).Range.Select

re,

je connais et utilise les 2, mais je préfère avec "sheets", et j'ai fait une erreur quelque part, ca fonctionne.

Rechercher des sujets similaires à "debarasser clignotement macro"