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
 

patricktoulon

XLDnaute Barbatruc
re
oui tu a raison si on considère que la méthode d’accès a un object est différente entre 2003 2007 et les autres
si c'est pas le cas alors non
si la méthode d’accès graphique a un object est pareille il n'y a pas de raison qu'avec 2007 et l'object pas dessiné l’accès est valide et avec les versions Sup non

je pense plutôt que c'est un encombrement mémoire
tout du moins un genre de doevents manquant dans les fonctions internes qui fait que l’accès n'est pas dispo avant la fin de l'exécution d'un code interne

mais n'ayant pas réussi a craker les dll 2016 je n'ai pas pu aller fouiller dedans pour voir comment était calculé les hexa des clisd ou même si c’était interne (sans clisd)
 

eriiic

XLDnaute Barbatruc
je ne vois pas trop, patricktoulon, en quoi ces observations exonèreraient des difficultés de dialogue auxquelles je ne m'interdis pas de penser.
Ce qui est gênant c'est que c'est un dysfonctionnement constaté que sur excel (voire autre appli de la suite ?).
Si c'était un problème de dialogue entre matériels ou de gestion des SDI par windows, on peut supposer que d'autres applis auraient le même soucis.
Ce se saurait non ?
eric
 

Dranreb

XLDnaute Barbatruc
Je crois qu'il nous faudrait du demandeur un classeur extrêmement simplifié qui reproduise juste le problème. Ça m'étonnerais quand même que je serais longtemps enquiquiné par ça si je décidais de faire comme ça au lieu d'utiliser mon joli petit UFmProg, qui oblige, certes, à être capable de déterminer d'avance un nombre total d'opération élémentaires à effectuer, mais affiche alors un barre d'activité montrant le nombre d'opé par seconde, une barre montrant le taux d'avancement, un Label donnant la valeur de celui ci, enfin l'heure prévue de fin et entre partenthèses le délai qui l'en sépare.
 

Pièces jointes

  • Progression.xlsm
    220.4 KB · Affichages: 8

GALOUGALOU

XLDnaute Accro
bonjour le fil bonjour le forum, bonsoir tout le monde
je prend le fil au passage.
A tout hasard......
j'ai rencontré le même problème que le demandeur et j'ai pu apporter une solution dans mon classeur avec la manip suivante.
dans la macro en début de procédure, avec un select de la feuille contenant le shape, juste à la ligne suivante de l'affichage du shape. et depuis plus de souci d'affichage de mon message.
cordialement
galougalou
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bosnoir @GALOUGALOU @Dranreb et le reste du fil !

Pour Galougalou j'ai mis un Select mais ca n'améliore pas les choses (sur le fichier proposé en #33)

Pour Dranreb WOW très beau fichier Progression.xlsm, impressionant ! Tu maîtrises le truc ! Bravo un vrai Maître du temps !
Et nous avons le même avis :
Moi je laisserais plutôt le UserForm visible et si possible avec une barre de progression pendant le traitement (si il y a un moyen de calculer une incrémentation numérique de ton traitement)

Bien à vous
@+Thierry
 

GALOUGALOU

XLDnaute Accro
re thierry le fil
bon je vais essayer de vous faire une petite démonstration de ce qui se passe chez moi sur excel 2010 avec le classeur de sylvanu, avec des procédures réduitent à leur plus simple expression.
le commentaire du demandeur
VB:
En pas par pas tout fonctionne à merveille, mais lorsque la macro tourne normalement ça ne marche pas
j'ai testé le classeur du #33, en modifiant le classeur en y ajoutant une macro de ma pomme (pas moi mais le contributeur de xld) qui dure environ 15 secondes à l’exécution
deux boutons
un avec select
un sans select
sans select on ne voie pas sylvanu du début à la fin
avec select sylvanu apparait au lancement de la macro et disparait à la fin
cordialement
galougalou
 

Pièces jointes

  • avec et sans select.xlsb
    35.4 KB · Affichages: 6
Dernière édition:

_Thierry

XLDnaute Barbatruc
Repose en paix
Oui c'est zarbi de chez zarbi

Et pour ma précédente réponse, sur ta recommendation en fait j'avais fait un Select mais de Range("A1"), je n'avais que Sheet Activate avant... Pas pensé à faire un Sheet Select...

Donc là oui ca fonctionne sur ton fichier "avec et sans select", mais du coup on zappe la demande de Ya-v-ka, puisque on voit la macro écrire tes series de chiffres... Lui il souhaite faire patienter avec un shape et que l'écran ne parte pas dans tous les sens car il fait plein de barbatrucs... :rolleyes:


VB:
Sub numeroter_cellule_fonction_ligne2()
Dim i&, j&
ActiveSheet.Shapes("Image 2").Visible = True
Sheets("Feuil1").Select
Application.ScreenUpdating = False '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
   For i = 1 To 100: For j = 1 To 100: Cells(i, j) = i: Next j: Next i
      MsgBox "termine"
Application.ScreenUpdating = True '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
ActiveSheet.Shapes("Image 2").Visible = False

End Sub

J'ai réduit la taille du loop mais ca suffit pour voir

Et là c'est idem .... la shape apprait quand c'est fini...
@+Thierry
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re Galougalou
Comment ca on ne voit pas ?

Admettons la possibilité que Ya-V-Ka, dans sa "colossale" macro, (j'ai bien mis 'colos' avant ;))
ait besoin d'activer des Feuilles ou je ne sais quoi.....Le Display va pas faire joli-joli ...

Shape.gif



En plus la shape n'apparait même plus du coup, je l'ai mise visible au départ pour au moins voir un peu cette petite frimousse...
Dans ce cas le : Application.ScreenUpdating = False s'avère indispensable


Voici le code "stupid" que j'ai fait dans ton exemple et sans Application.ScreenUpdating = False :

VB:
Sub numeroter_cellule_fonction_ligne2()
Dim WS As Worksheet
Dim i&, j&
ActiveSheet.Shapes("Image 2").Visible = True
Sheets("Feuil1").Select
  
   For i = 1 To 30
    For j = 1 To 10
        For Each WS In ThisWorkbook.Worksheets
            WS.Activate
            WS.Cells(i, j) = i
        Next
    Sheets("Feuil1").Activate
    Next j
   Next i
  
Sheets("Feuil1").Select
ActiveSheet.Shapes("Image 2").Visible = False
Sheets("Feuil1").Select
MsgBox "termine"
End Sub

Bien sûr tu me diras mais pourqui tu met du WS.Activate... Ben c'est pour faire ce feu d'artifice !!! LoL (mais même si on le met en commentaire .... La petite frimousse n'est pas là tout le temps ...

Enfin ca ne fait pas avancer le schimili, shiiimimili; schmilbik ! C'est grave le confininenent !
Bonne soirée ;)

@+Thierry
 

Pièces jointes

  • Shape.gif
    Shape.gif
    212.1 KB · Affichages: 6
  • Shape.gif
    Shape.gif
    150 KB · Affichages: 6

_Thierry

XLDnaute Barbatruc
Repose en paix
Meuh non mon ami ;)

Mais je crois que cet affichage de shape nous fait tourner en bourique !!!!
Je pense que ce n'est pas la meilleure solution, en plus plus on teste le même fichier, on dirait que elle apparait de moins en moins... A devenir fou !

Bon courage
@+Thierry
 

ya_v_ka

XLDnaute Impliqué
Pour l'instant, je suis parti sur une idée plus simple et à mon niveau...

Ajout d'une feuille "blanche" d'où je démarre tout, et ou j'affiche, sans problème, ce que je veux avec de simple .range(xy)="MonTexte"... jusque là, ça marche !
 

Discussions similaires

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16