XL 2019 Remplacer l'affichage d'un msgbox par celui d'un userform

pat66

XLDnaute Impliqué
Bonjour le forum,

Mes connaissances étant très limitées, je fais appel à ce forum car je souhaiterai remplacer l'affichage d'un msgbox par celui d'un Userform, ou autre.
Le but étant d'avoir un affichage personnalisable (police, taille, couleur, etc..)

Pour plus de compréhension, je joints un exemple qui contient la macro du msgbox opérationnelle de Vgendron , ainsi que le type d'Userform souhaité

Pourriez vous m'aider à adapter la condition d'affichage ainsi que le résultat du Msgbox à celui de L'Userform

merci d'avance pour votre aide

bonne journée

Pat66
 

Pièces jointes

  • Message avec Calcul-Web.xlsm
    79.1 KB · Affichages: 17
Dernière édition:

Dudu2

XLDnaute Barbatruc
C'est peut-être plus commode avec une TextBox.
C'est le même principe que la Shape mais la TextBox est en AutoSize donc tu n'as pas à définir la Width et la Height, ce qui est un avantage.
Par contre évidemment, tu ne peux plus choisir le type de Shape, rectangle par défaut, mais pouvant être tout autre.
 

Pièces jointes

  • MsgBoxPerso via TextBox.xlsm
    34.9 KB · Affichages: 3

pat66

XLDnaute Impliqué
Bonjour à tous,

Dudu2,
je dois dire que toutes solutions sont intéressantes, mais ne correspondent pas à mes attentes, car je ne saurai les adapter pour résoudre mon problème

Ce dont j'ai besoin, c'est de pouvoir afficher un texbox ou une info Bulle au survol d'une cellule qui doit se positionner à côté de la dite cellule, et afficher le résultat d'une autre cellule avec une condition

D'après ce que tu as eu la gentillesse de partager, je pense que cela doit être possible, non ?

merci
 

Dudu2

XLDnaute Barbatruc
Bonjour,
D'après ce que tu as eu la gentillesse de partager, je pense que cela doit être possible, non ?
Les fonctions fournies gèrent l'affichage, mais ton premier problème c'est "le survol" d'une cellule.

Il n'y a pas d'évènement capable de gérer cela pour une cellule, il faut passer par un Control ActiveX (Label ou TextBox) avec un BackStyle = fmBackStyleTransparent et gérer son évènement MouseMove() pour provoquer l'affichage de ton message dont tu auras préalablement construit le texte avec tes calculs et conditions.

Ton deuxième problème est l'effacement de ce message. Car si on peut le déclencher avec l'artifice indiqué ci-dessus, il faut pouvoir l'effacer. Il faut donc un autre évènement pour ce faire et je ne sais pas comment tu comptes t'y prendre pour ça. Une solution est d'utiliser une temporisation présente dans les solutions que j'ai données avec Shape et TextBox.

J'ajouterai qui si tu n'es pas en mesure d'exploiter les fichiers que je t'ai envoyés par manque de connaissances / expérience, tu ne seras pas non plus en mesure de mettre en place ce système car c'est encore un peu plus complexe.

et afficher le résultat d'une autre cellule avec une condition
peut t'on réduire la taille du msgbox drastiquement et lui demander de réaliser un calcul ?
Il n'y a pas de magie dans l'affichage d'un message. Aucune fonction d'affichage ne gèrera les calculs et les conditions qui en déterminent le contenu et que tu es le seul à connaître.
Cette seule remarque montre, et je suis désolé de te le dire, que tu es très loin du compte et que pour faire ce que tu demandes il faut que tu le soustraites complètement à quelqu'un de plus expérimenté. Ce qui implique des discussions / échanges approfondis sur le développement à réaliser.
 
Dernière édition:

pat66

XLDnaute Impliqué
ok merci quand même,

mais au cas où, voici un exemple de ce dont j'ai besoin mais que je n'arrive pas à rendre opérationnel

et si le survol est un problème, au pire peut on envisager avec un clic sur la cellule colonne F de chaque ligne pour l'apparition du textBox ou de l'infobulle ?

bonne journée à tous
 

Pièces jointes

  • TextBox survol.xlsm
    21.2 KB · Affichages: 1
Dernière édition:

Dudu2

XLDnaute Barbatruc
Un autre solution simplissime est d'utiliser un commentaire masqué en cellule. Il s'affiche en survol de souris et s'efface quand le survol prend fin. C'est fait pour ça
1668753473356.gif
et @pat66 est en mesure de s'en servir facilement. Quitte à adapter le contenu du commentaire par du code VBA pour afficher les "calculs et conditions" de @pat66.

Edit: quand je pense tout ce qui a été mis en œuvre dans ce sujet pour en arriver à cette conclusion !
Comme quoi il ne faut pas se fier aveuglément à la question telle que rédigée.
Mais bon, je ne suis pas mécontent d'avoir eu l'occasion de mette au carré des trucs de mon backlog.

Trace.gif
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
A destination exclusives des spécialistes intéressés...

Le positionnement d'un UserForm avec les fonctions ci-dessous tient compte des marges invisibles détectées grâce à une fonction API du Desktop Window Manager (DWM) pour "coller" au plus près de la cible.

Une récente découverte montre que ces marges ne sont pas applicables lorsqu'on retire le Caption/Menu système du UserForm. Il a donc fallu détecter cette situation et corriger le positionnement du UserForm en conséquence.

D'où le re-post de ces fichiers:
  1. MsgBoxPersoBasic -> pour plutôt appeler le postionnement du UserForm APRÈS son .Show (à l'Activate) car c'est à ce moment qu'on peut savoir si oui ou non son Caption est présent (il est retiré si le paramètre Titre est de longueur nulle).
  2. VBA Positionnement UserForm sur Objet d'une feuille -> détecte maintenant la présence ou pas du Caption pour tenir compte ou pas des marges DWM.
  3. Exemple utilisant les 2.

Et avec ça, plus les positionnements Shape et TextBox des posts #29 et #32 je crois que j'ai donné tout ce qui est en mon pouvoir. Et pour un MsgBoxPerso complet il y a aussi cette ressource.
1668756462675.gif
 

Pièces jointes

  • VBA Positionnement UserForm sur Objet d'une feuille.xlsm
    43.1 KB · Affichages: 2
  • MsgBoxPersoBasic.xlsm
    46.9 KB · Affichages: 2
  • Exemple MsgBoxPersoBasic et Position UserForm sur Objet de Feuille.xlsm
    50.3 KB · Affichages: 2
Dernière édition:

Dudu2

XLDnaute Barbatruc
A la recherche de l'inutile...

En cas de UserForm déjà affiché, pour provoquer le UserForm_Activate() où se concentrent la suppression éventuelle du menu système et l'appel au repositionnement utilisateur, j'ai, dans un premier temps, fait un Me.Hide. Mais visuellement cela provoque une petite saute d'affichage du UserForm.

Alors en cherchant un peu, pour régler ce détail si important
1668773497716.gif
, j'ai plutôt lancé le UserForm_Activate() en testant Me.Visible et en replaçant le UserForm en ForeGround Window. La transition est maintenant sans saute d'affichage, aussi douce qu'une caresse de plume d'ange
1668773541722.gif
.

A la foule intéressée, faut encore reprendre ces 2 fichiers si vous voulez vraiment en finir avec cette histoire
1668773596725.gif
 

Discussions similaires

M
Réponses
6
Affichages
1 K
Mathou
M

Statistiques des forums

Discussions
315 105
Messages
2 116 257
Membres
112 704
dernier inscrit
zanda19