Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 affichage curieux pendant l'exécution d'une macro

Usine à gaz

XLDnaute Barbatruc
Bonjour à toutes et à tous

Je reviens pour un p'tit souci d'affichage à l'exécution d'une macro.
Ce souci n'est pas gênant quant au fonctionnent du fichier mais c'est plutôt désagréable :
Vous le verrez avec la photo ci-dessous, l'affichage feuille est normal au départ :

Mais quand je clique sur le bouton recherche, voici ci-dessous le nouvel affichage :

J'utilise un code incluant comme vous le voyez la recherche Find.
Toutefois, dès que l'objet de la recherche est collé dans "Find", l'affichage redevient normal.
Comme je le dis plus haut, ce n'est pas gênant au niveau fonctionnel mais gênant à la vue.

Auriez-vous déjà rencontré ce souci ?
Si quelqu'un a une idée pour empêcher cet affichage intempestif, je suis preneur

Curieusement, lorsque j'exécute la macro à partir du code dans vba .... ça ne se produit pas.
Je ne sais pas si je pourrai reproduire le souci dans un fichier test mais si besoin, j'essaierai d'en faire un.
Merci déjà pour m'avoir lu.
Je vous souhaite une bonne fin de journée,
Prenez soin de vous,
lionel,
 

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Auriez-vous déjà rencontré ce souci ?
Hélas oui ! C'est même mon quotidien...
Perso, j'ai une macro qui tourne durant près d'une heure et j'ai ce problème au bout de seulement quelques secondes...
J'avais demandé des explications ici et n'avais rien obtenu de bien convainquant.

Ta macro contient-elle un Application.ScreenUpdating=False (au début en général) ?
 

Usine à gaz

XLDnaute Barbatruc
Bonjour Marcel32
Merci à toi d'être encore là pour moi
Voici le début de mon code qui est long comme un jour sans fin lol :
VB:
Public Sub BoutonRecherche()
If Cells(ActiveCell.Row, 17) <> "" Then
    ActiveSheet.Unprotect Password:=""
    Cells(ActiveCell.Row, 25) = 1
    ActiveSheet.Protect Password:="", DrawingObjects:=True, Contents:=True, Scenarios:=True
    ActiveSheet.EnableSelection = xlNoRestrictions
    Blocage
    Exit Sub
        Else
        Sheets("SuivisAppels").Select
        If ActiveRows > 6 And ActiveCell.Offset(0, 17) = "" Then
        SupprimeLignes 'si dernière ligne totalement à remplir
        Application.Calculation = xlAutomatic
        Remonte
        Trie_Ttlignes
        Application.EnableEvents = False
        Application.ScreenUpdating = False
        End If
        End If
Donc OUI : "Application.ScreenUpdating = False" en début d'exécution
lionel,
 

TooFatBoy

XLDnaute Barbatruc
Je crois qu'il faudrait en fait supprimer tous les .activate et .select qui sont peut-être bien la cause de ton problème.
Il est préférable de travailler sur les feuilles sans les sélectionner, quand c'est possible.

Certains ici t'expliqueront même qu'il est encore mieux de travailler sur des Array, mais là je crois que ça se complique un peu.


Je me suis un peu emballé : je ne suis pas certain que ScreenUpdating ait un réel rapport avec ce problème.
Il faut dire que je n'ai jamais trouvé comment s'affranchir à coup sûr de ce souci.
Je risque donc de ne pas t'être d'un très grand secours... Désolé.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour le fil, arthour973

1) D'accord avec Marcel32 (que je salue au travers de mon masque ) à propos des Select et Activate
(Mais arthour973 est déjà au courant)
2) WTF ?
If ActiveRows > 6
Mon VBA ne connait pas ActiveRows (de manière native)
VB:
Sub test()
MsgBox ActiveRows '->???
MsgBox ActiveCell.Row '-> test OK
End Sub
Et comme on ne voit pas les codes de:
Blocage
SupprimeLignes
Remonte
Trie_Ttlignes
on peut causer longtemps...
(ça tombe bien nous sommes confinés )
 

TooFatBoy

XLDnaute Barbatruc
Par exemple, au lieu de :
Sheets("Feuil1").Activate
Range("A1").select
Selection.Copy
Sheets("Feuil2").Activate
Range("A2").Select
Selection.Paste

Il vaudrait mieux faire :
Sheets("Feuil1").Range("A1").Copy Sheets("Feuil2").Range("A2")

Je ne suis pas certain de la syntaxe exacte, mais tu vois le principe.


[edit]
Je vous salue Staple.
[/edit]
 

TooFatBoy

XLDnaute Barbatruc
2) WTF ?
If ActiveRows > 6
Mon VBA ne connait pas ActiveRows (de manière native)
J'en profite, encore une fois, pour poser une question et donc pour en apprendre un peu plus : est-ce que ça pourrait être une fonction interne à ce classeur ?

Je sais bien que l'on fait ce que l'on veut, mais n'est-il pas mieux de donner des noms en français aux fonctions que l'on crée afin de diminuer la possibilité de confusion ?
 

Staple1600

XLDnaute Barbatruc
Re

•>Marcel32
C'est pour cela que j'avais bien précisé
Mon VBA ne connait pas ActiveRows (de manière native)
"L'avantage", c'est que cette erreur ne génère pas d'erreur mais renvoie n'importe nawak
La preuve
VB:
Sub test_WTF()
[S1600].Select
MsgBox ActiveRows > 6 'what the f*ck ?
MsgBox ActiveCell.Row > 6 '-> là c'est OK
End Sub
 

Staple1600

XLDnaute Barbatruc
Re,

Pour finir, il suffirait d'avoir une PJ simplifiée
(avec tout le code VBA impliqué quand l'InputBox s'affiche)
Ainsi on pourrait essayer de reproduire le phénomène sur nos PC.

EDITION: Bonjour D.D.
 

Usine à gaz

XLDnaute Barbatruc
Re- à vous 2
J'ai trouvé Marcel32 avait raison il fallait tout simplement placer :
Application.EnableEvents = False
Application.ScreenUpdating = False
en tout début de code
Merci marcel32
Et Merci à toi aussi JM, pour m'avoir montré mon erreur
Amicalement,
lionel,
 
Dernière édition:

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…