Image de page fantôme suite à changement d'onglet

Bonjour,

actuellement sur le "développement" d'une application de gestion de réservation de chambre d'hôtel, je suis confronté à un problème d'ordre "graphique", ou plutôt d'affichage.

Voici le fichier :

En fait, suite aux différents cours et astuce de Waard, je suis parti sur l'idée de faire une barre de menu, identique sur trois feuilles, qui est composé d'une série d'image représentant des icônes (j'ai essayé avec une seule image, le problème persiste) et un contrôle ActiveX Label1 transparent posé par dessus. Avec les événements Mouse Over et clic, j'arrive à afficher un texte d'explication de chaque icône et à déclencher un code VBA au clic de souris.

Jusque là pas de soucis, si ce n'est pour les code de changement de page (les icônes 2, 3 et 4 en partant de la droite) respectivement : la feuille du planning de réservation, la feuille de la base de données des réservations et la feuille Système.

Lors du clic, pas de soucis, la feuille "demandée" est affichée, mais lors d'un scroll sur cette feuille, il y a une image "fantôme" de la feuille précédente qui s'affiche... J'ai eu beau rajouter des ScreenUpdating à True ou à False un peu partout, mais rien y fait, ainsi que des On Error resume Next....

On dirait que l'activation des feuille par VBA, en passant par le contrôle fait "buguer" l'affichage...

Mais connaissant mon niveau de programmation (il n'y a qu'à regarder le reste du code de l'application ! ) je me dis que j'ai du passé à coté de quelque chose...

En espérant trouver une solution à ce désagrément visuel.

@ bientôt

LouReeD

Hello, Hello,

Apparement entre les versions 2010 et 2013 Microsoft à fait une MàJ quelque part et un bug aléatoire non réglé à ce jour arrive de manière aléatoire.

En utilisant doevents en fin de procédure, on arrive à dégager ce bug d'affichage.

Code (j'ai dégagé des lignes histoire de voir s'il y'avait un pb de déroulement de code, c'est juste histoire de montrer où est doevents dans la procédure) :

Private Sub Label1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    'Call Barre_Menu_Clic(X, Y, ActiveSheet.Name)
    On Error Resume Next
    Dim Wsht As Object
    Set Wsht = ThisWorkbook.Worksheets(ActiveSheet.Name)
    If X > 5 And X < 50 Then

    ElseIf X > 55 And X < 100 Then

    ElseIf X > 105 And X < 150 Then

    ElseIf X > 155 And X < 200 Then

    ElseIf X > 205 And X < 250 Then

    ElseIf X > 255 And X < 300 Then

    ElseIf X > 305 And X < 350 Then

    ElseIf X > 350 And X < 400 Then

    ElseIf X > 405 And X < 450 Then

    ElseIf X > 455 And X < 500 Then

    ElseIf X > 505 And X < 550 Then

    ElseIf X > 555 And X < 600 Then

    ElseIf X > 605 And X < 650 Then

    ElseIf X > 655 And X < 700 Then
        If Wsht.Name <> "Système" Then ThisWorkbook.Worksheets("Système").Select
    ElseIf X > 705 And X < 750 Then
        If Wsht.Name <> "BD_Résa" Then ThisWorkbook.Worksheets("BD_Résa").Select
    ElseIf X > 755 And X < 800 Then
        If Wsht.Name <> "Résa" Then ThisWorkbook.Worksheets("Résa").Select
    ElseIf X > 805 And X < 850 Then
        Call Ouvre_Help
    End If
DoEvents '<<<<<<<<<<<<<<<<<<<<<<<<<<< Correction du bug d'affihage
End Sub

Bonjour waard,

j'avoue, j'espérais une réponse de votre part !

Le DoEvents j'avais essayé, mais pas en fin de procédure, plutôt au début !

Je cours de ce pas essayer ceci et je reviens aux nouvelles !

merci par avance !

@ bientôt

LouReeD

Il faut peut-être le mettre ailleurs le DoEvents, non ?

je travail sur Excel 2010 et 2007, le problème est le même...

Là le DoEvents je viens de le tester sur 2010 et voici le résultat en allant sur "Système" et en revenant sur "Résa" :

test

Je sèche...

@ bientôt

LouReeD

Re:

Moi je n'ai plus le bug, peut être quand forçant un 2e rafraichissement à chaque activation de la feuille, cela supprimera le bug.

Private Sub Worksheet_Activate()
DoEvents
End Sub

Sinon tester la fermeture du fichier modifié et le rouvrir et voir s'il y'a le bug, quelque fois y'a ce genre de pb.

Après il faudra quelqu'un qui soit sur une version antérieur à 2010, moi je suis sur 2016 et c'est ok chez moi.

fichier en PJ avec les correction

Merci comme même...

La version jointe ne fonctionne pas, toujours le bug...

En fait le label transparent était là pour afficher les "infos bulles" car je n'arrive pas à les mettre sur les images "icônes".

Je pensais avec vos trucs et astuces avoir trouvé une bonne solution, qui ma foie fonctionne bien, mais ce désagrément visuel me fait renoncé.

Ou bien alors faire un label par icône...

J'ai même essayé en ne mettant une seule image du groupe d'icône, "de peur" qu'il y est trop d'éléments sur la feuille... sans résultat.

j'ai vu sur le net que l'on pouvait mettre une info bulle sur une image en lui attribuant un lien hypertexte... mais du coup cela ne déclenche plus la macro... On ne peut pas lier un lien à une macro ? Ce serait trop simple...

merci @ vous et je clôture le sujet.

@ bientôt pour d'autre cours et astuces !

LouReeD

Si c'est une histoire d'info bulle, j'ai vu le cas, il y'a 2/3 an, le temps retrouvé le sujet et le principe d'orga du bouton et j'envoi une propo.

Y'a apparemment aussi au vu de l'organisation du fichier, peut être aussi une 2e solution bien plus simple, je ferai une démo aussi.

Un grand merci @ vous !

C'est avec une de nos conversations, je crois, que je me lance dans une application "serrieuse", je veux dire par là que CHAMOT j'en ai déjà fait un... Mais celui-ci j'essaie de regrouper tout ce que j'ai appris...

Attention, ne regardez pas tout le code, car pour beaucoup il reprend "un vieux" fichier, en fait c'était pour montrer au futur utilisateur ce que pouvait donner un menu de ce type. Autant il est sous 2016 et il n'a pas de soucis d'affichage !

Mais bon, moi j'en ai un et j'aime pas !

à bientôt

LouReeD

Alors 6 solutions, voir le fichier (6 pas dedans)

Solution 1 Utiliser 2 Labels

A l'aide de 2 labels, on utilise un label en arrière plan pour essayer de capter quand le curseur sort du label bouton

Et avec un label bouton avec image de bouton on capte avec mousemove l'entrée du curseur et sur cet event on inscrit le commentaire dans une cellule ou ailleurs

Voir aussi aussi solution 4, quasi pareil

Solution 2 Changer l'organisation des 3 boutons de changement de feuille

De base le label 1 se trouve au-dessus de toutes les formes boutons

On garde le principe pour tous les boutons sauf pour les 3 boutons de changement de feuilles, qu'on va utiliser comme des images avec lien hypertexte

Solution 3 Tester le suivi hypertexte à l'aide d'autre type de code

Au lieu d'utiliser worksheets.select et worksheets.activate, essayer les différentes méthodes de suivi Hyperlink, pour voir si le bug s'atténue avec doevents.

J'ai fait une modif du code hyperlink avec les doevents pour les onglets bd résa et système, à voir si ok

Et suite à la solution 5, il y'a aussi application.goto où on peut même gérer le sroll de mémoire, à voir si bug affichage

Solution 4 Utiliser un label de captage de mouvement en arriére plan de chaque bouton + commentaire

Au départ j'avais pensé, à placer un bouton par cellule ou groupe de cellule et d'y coller un commentaire, mais en fonction de la feuille la taille des colonnes est trop différente

1 Alors variante, on place un commentaire quelque part

2 A l'aide d'1 activex en arrière plan et en changeant l'effet d'inclinaison du bouton, on va capter l'entré du curseur dans la zone du bouton pour afficher le commentaire, éventuellement modifié suivant le bouton

Option 3 On peut encore ajouter un 2 label en arrière plan pour capter la sortie du curseur de la barre pour forcer le désaffichage du commentaire s'il reste affiché

Solution 5 Au lieu d'utiliser des objets forme avec image, utiliser des labels avec images

Utiliser un label en arrière plan pour capter la sortie des boutons, dans le label on y indiquera le commentaire d'icone comme déjà le cas

Au lieu de mettre les icones en arrière plan on les avancent toutes en 1er plan, avec macro spécifique

Solution 6 Faire un doevent dans chaque fenêtre

Voir le lien déjà indiqué, si sur 2007, l'affichage se met à jour en faisant un doevents dans chaque fenêtre après chaque suivi de lien (au lieu de le faire en fin de procédure)

Bonsoir loureed

bonsoir Waard

bonsoir le forum

avec le dernier fichier mis a dispo par Waar, le problème persiste sur un MSO 2007...

et c'est la première fois que je rencontre ce genre de dysfonctionnement

Bon courage

Fred

Bonjour à tous !

En fait hier j'ai essayé la dernière version fournie sur Excel 2007 : même problème.

Aujourd'hui sur Excel 2010 : même problème.

Je vais bien relire les 6 propositions de "contournement" du problème, d'ailleurs une fois de plus merci waard pour ce travail.

Je vais également faire comme le préconise parfois MFerrand, re créer un fichier en partant d'une base vierge, sans faire de copier coller, ni de glisser déplacer, au niveau des feuilles et autres éléments du classeur faisant "défaut".

Il se peut qu'un bug "interne" ne puisse pas être réglé par des version inférieur à 2016 (ou 2013).

Ici sur ce fil, je vous tiendrais au courant, mais en ce moment j'ai "du pain sur la planche"...

Merci encore à vous tous, je crois avoir toutes les cartes en main pour réussir à faire un joli menu... En plus je suis rassuré sur le nombre d'éléments possible sur une feuille.

@ bientôt

LouReeD

Bonsoir. Je viens vers vous pour vous annoncer que j'ai (peut-être) trouvé la solution...

Réflexion : ça bug car Excel est toujours actif sur l'objet ActiveX de la feuille précédente...

Réflexion suivante : il faut sortir de l'ActiveX concerné avant de changer de feuille...

Réflexion gagnante : il suffit de sélectionner la feuille voulue au "lâché" du bouton de la souris, donc utiliser : Private Sub Image1_MouseUp en lieu et place de : Private Sub Image1_MouseDown

Voici le fichier modifié :

61chamhotel-v0-01.xlsm (510.44 Ko)

Si vous pouviez faire des "test" chez vous, merci par avance. Du coup au niveau du code j'ai pu supprimer tous les DoEvents et autre "contournement" proposés et essayés. De plus j'ai simplifié la création des barres de menu en "fabriquant" une seule image de tous les boutons que j'ai mis dans un ActiveX image. Il ne reste plus que deux objets par feuille : un d'Image avec les icône et un Label avec le descriptif.

vbMBHB

BOnsoir

sous office 2007 cela semble OK d'après les tests que j'ai fait.....

Loureed va être content...

bonne soirée

Fred

Et bien on verra bien.

vbMBHB

Bonsoir @ tous !

vbMBHB... je n'ai qu'un mot : merci !

Pour le moment les tests sur le fichier fourni ne provoque plus les erreurs d'image fantôme !

Le pire ? C'est que je n'en ai pas eu l'idée plus tôt !!!

Merci à waard pour les conseils et propositions données, merci à fred2406 pour les différents tests effectués.

Donc ce soir sur Excel 2007 cela fonctionne, j'attends demain pour tester sur Excel 2010.

ChamHôtel va continuer à avancer !

@ bientôt

LouReeD

LouReeD,

merci,

vbMBHB

Bonsoir !

Merci @ vous, et bon voyage...

@ bientôt

LouReeD

Bonsoir,

suite à une réponse sur le forum VBA ce soir, je me suis replongé sur celui-ci et je viens de me rendre compte que je n'ai pas fais ce que j'avais dit que je ferais... Alors à l'époque sous Excel 2007 cela fonctionnait, et aujourd'hui je peux dire que sous Excel 2013 ce la fonctionne et à l'époque mes essais sous 2010 également !

Encore merci à vbMsgBoxHelpButton , en espérant que de son long voyage il reçoit, avec un peu de retard mon résultat !

@ bientôt

LouReeD

Bonjour,

d'où je suis j'ai bien reçu votre message !

vbMBHB

Bonjour !

Et bien à ce rythme votre compteur de message ne va pas s'affoler ! Une visite tous les deux ans !

Encore merci, et comme vous pouvez voir (ou pas) j'ai pris énormément de retard sur cette application !

@ bientôt

LouReeD

Rechercher des sujets similaires à "image page fantome suite changement onglet"