XL 2016 Shape qui ne s'affiche pas

ya_v_ka

XLDnaute Impliqué
Bonjour le monde,

Mon souci du jour :

J'ai créé une macro qui met un certain temps. Afin de faire savoir que tout va bien, au début de l'exécution j'affiche un shape (.visible = true), existant mais masqué sur la feuille au départ, et le re-masque juste à la fin du traitement.
En pas par pas tout fonctionne à merveille, mais lorsque la macro tourne normalement ça ne marche pas !
J'ai rajouté un .screenupdating = true pour être sûr, j'ai essayé avec un wait, un sleep, des beep, rien n'y fait !

Si quelqu'un a une idée ?

Merci d'avance

Ya'v
 

jmfmarques

XLDnaute Accro
Bonjour à tous
J'ai lu et relu et re-relu tous les messages
ce que j'y lis mets pour moi en exergue la nécessité de laisser le système exécuter ses messages en temps opportun. Utiliser donc la fonction Doevents.
Attention toutefois l'utiliser impérativement dans l'ordre logique. exemple
VB:
shapes(....).visible = true
doevents 

shapes(....).visible = false
doevents

shapes(....).visible = true
doevents 

shapes(....).visible = false
doevents

ces doevents doivent venir immédiatement après le changement d'état souhaité. Et donc également avant vos msgboxes éventuels

Ce n'est par ailleurs pas par hasard que je repasse à false. Je n'écarte en effet pas l'éventualité de la présence de shapes empilés, Le 1er cachant le suivant , etc ...
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re tout le monde,
Jmfmarques, si vous prenez ma maquette du post #13, mais pour cela il faut ouvrir la PJ ;)
et que vous insérez un DoEvents comme cela :
VB:
Sub Montre()
    ActiveSheet.Shapes("Image 2").Visible = True
    DoEvents
    MsgBox "Normalement l'image devrait être présente"
End Sub
Eh bien ça ne marche pas.
Lorsque le Msgbox s'exécute, il est bien visible mais la Shape est toujours invisible, jusqu'à la fermeture du msgbox.
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir à tous et re à ya-v-ka !

Sylvanu j'ai repris ton classeur, avec Calculate seulement ca ne montre pas l'image si il y a exécution d'un gros loop...


Dacodac avec toi jmfmarques pour DoEvents comme je disais plus haut (c'est aussi souvent nécessaire sur les USF en association de "Repaint"... mais c'est une autre histoire)

Bon j'ai refait un fichier de simulation sur ta base Sylvanou, tu enlèveras la ligne en commentaire pour voir que même les deux DoEvents associé au Calculate ne suffisent pas !

J'ai mis aussi une Statusbar en place pendant le loop...

Donc selon ce file il faudrait "démanteler" le code en différentes routines (Sub) avec des Wait .... C'est plus que lourdingue....
.
@+Thierry
 

Pièces jointes

  • XLD_Shape_Visibke_YavKa_Sylanu_Thierry.xlsm
    36.9 KB · Affichages: 9

jmfmarques

XLDnaute Accro
Bonjour sylvanu. Vraiment désolé, mais il est hors de question que je déroge à la discipline que j'observe. je n'ouvre donc pas ce classeur.
J'ai par contre créé un classeur dans lequel j'ai utilisé le code dont j'ai montré le principe -->> aucun problème.

Je me suis ensuite amusé à "empiler" les shapes (l' un au dessus de l'autre), comme le scénario dont j'ai fait plus haut allusion à l'existence. Et là, bien évidemment, impossible d'afficher le second shape après le 1er, sauf, par exemple, à rendre d'abord invisible le 1er.

J'ai des difficultés à imaginer une autre gêne que celle-là ;)

EDIT : mais (histoire d'en avoir le coeur net), invitons donc ya_v_ka à nous faire savoir clairement si les shapes dont il s'agit sont oui ou non empilés (l'un au-dessus de l'autre). J'en suis personnellement intimement persuadé.
 
Dernière édition:

ya_v_ka

XLDnaute Impliqué
Bonjour sylvanu. Vraiment désolé, mais il est hors de question que je déroge à la discipline que j'observe. je n'ouvre donc pas ce classeur.
J'ai par contre créé un classeur dans lequel j'ai utilisé le code dont j'ai montré le principe -->> aucun problème.

Je me suis ensuite amusé à "empiler" les shapes (l' un au dessus de l'autre), comme le scénario dont j'ai fait plus haut allusion à l'existence. Et là, bien évidemment, impossible d'afficher le second shape après le 1er, sauf, par exemple, à rendre d'abord invisible le 1er.

J'ai des difficultés à imaginer une autre gêne que celle-là ;)

EDIT : mais (histoire d'en avoir le coeur net), invitons donc ya_v_ka à nous faire savoir clairement si les shapes dont il s'agit sont oui ou non empilés (l'un au-dessus de l'autre). J'en suis personnellement intimement persuadé.

Oui, il y a 4 shapes empilés et masqués, et 1 seul est appelé en .visible = true et remis en false avant qu'un autre puisse être appelé...
Par contre je peux les rendre visible à loisir dans le workbookopen.
Et si j'en laisse 1 affiché, il se masque comme voulu.

J'essaye de ne laisser qu'1 shape et je reviens...
 

eriiic

XLDnaute Barbatruc
Bonjour à tous,

Quelle version d'excel ? >= 2013 ?
VB:
'        Dim win As Window
'        ...
        Worksheets("000").Shapes("Forme_2").Visible = True
       
        Set win = Application.ActiveWindow
        win.Visible = False
        win.Visible = True
        Application.Wait DateAdd("s", 1, Now())
testé ok sur ton fichier.
Le tempo n'est là que pour avoir le temps de voir la forme.
eric

Edit : plus précisément ces lignes devraient être mise après chaque Worksheet.Activate
 
Dernière édition:

ya_v_ka

XLDnaute Impliqué
Bonjour à tous,

Quelle version d'excel ? >= 2013 ?
VB:
'        Dim win As Window
'        ...
        Worksheets("000").Shapes("Forme_2").Visible = True
       
        Set win = Application.ActiveWindow
        win.Visible = False
        win.Visible = True
        Application.Wait DateAdd("s", 1, Now())
testé ok sur ton fichier.
Le tempo n'est là que pour avoir le temps de voir la forme.
eric

Excel 2016

Effectivement ça marche ! Merci
 

ya_v_ka

XLDnaute Impliqué
Je n'avais pas vu… et je note. Merci.

Je vais encore tester avec un label, toujours visible mais en en changeant les options et la caption...

Par contre, si qq1 sait expliquer pourquoi il ne s'affiche pas normalement et simplement avec un .visible = true ? ……………………..
 

Discussions similaires

Statistiques des forums

Discussions
312 329
Messages
2 087 324
Membres
103 516
dernier inscrit
René Rivoli Monin