Forcer le rafraichissement d'une picturebox

Signaler
Messages postés
78
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
3 décembre 2011
-
jmfmarques
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
-
Bonjour,
Alors voila, dans un jeux que je créé avec VBA sous excel, il y a des picturebox, et quand je click dessus, je change l'image de cette picturebox. Seulement voila, je constate que la picturebox ne  se redessine pas, sauf si je reduit la fenetre excel et que je la réaffiche. J'aimerai donc savoir s'il y a une commande permettant soit de rafraichir la page, soit la picture box, sachant que j'ai essayé sans succés :
    - ThisWorkbook.RefreshAll     'sa ne fait rien
    - Image1.Update                     'La méthode update de la classe OLEObject a échoué

Turok

9 réponses

Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
Bonjour,

Ce n'est apparemment pas une pictureBox (VBA n'en a pas) mais une image ...
Reste à savoir s'il s'agit d'une contrôle image sur une Userform, d'une image placée dans une cellule de ta feuille ou d'un objet OLE inséré sur ta feuille...
Messages postés
78
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
3 décembre 2011

Oui, il s'agit bien d'une image.
Je l'ai placé à la volée dans la feuille, donc je pense que c'est un objet OLE, d'ailleur l'erreur d'execution suivante le prouve : "La méthode update de la classe OLEObject a échoué"

Turok
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
Essaye de voir si cet objet à une méthode Repaint (je n'ai pas VBA, mais je pense que peut-être bien que oui)
Messages postés
78
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
3 décembre 2011

Non cette méthode n'existe pas, mais je les ai toutes essayées et j'ai fini par réussir, la méthode à utiliser est "BringToFront", c'est vraiment pas évident à deviner lol.

Turok
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
Si c'est un pbjet OLE, il devrait pâr aolleurs être assorti d'une méthode Update. Si oui, il faut l'utiliser.


ton_objet.Update
Messages postés
78
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
3 décembre 2011

Quand j'ulise update sa me renvoi l'erreur "La méthode update de la classe OLEObject a échoué"

Turok
Messages postés
78
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
3 décembre 2011

C'est bizarre, dans le code ci dessous, je veux afficher une image, puis au bout de 2 secondes en afficher une autre. Mais quand j'execute le prog, l'image qui doit s'afficher avant le "sleep(2000)" ne s'affiche pas, même si je force son affichage avec "BringToFront" :

    chemin = (ThisWorkbook.Path + "" + CStr(TableauCartes(Carte)) + ".bmp")
    TabImages(Carte).Picture = LoadPicture(chemin)
    TabImages(Carte).BringToFront ' force le rafraichissement de l'image
    Sleep (2000)
    chemin = (ThisWorkbook.Path + "" + CStr(17) + ".bmp")
    TabImages(DerniereCarte).Picture = LoadPicture(chemin)
    TabImages(Carte).Picture = LoadPicture(chemin)
    TabImages(Carte).BringToFront ' force le rafraichissement de l'image
    DerniereCarte = 0

Turok
Messages postés
78
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
3 décembre 2011

Problème résolu grace a un ancien post.

J'ai remplacé le Sleep par :

For j = 1To40
Sleep (100)
DoEvents
Next
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
Ton sleep vient peut-être un peu tôt (et un sleep fige tout)

Existe-t-il doevents sous VBA ?
Si oui, il faudrait en placer un avant le sleep, voire utiliser (je dirais même que ce serait préférable) la fonction Timer pour attendre que la nouvelle image soit chargée avant de continuer.