XL 2019 texte en filigrane dans une textbox

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

pascal21

XLDnaute Barbatruc
bonjour à tous
dans un userform j'aimerais ne pas utiliser les labels pour indiquer le sujet de la textbox qui va avec (hum!!! déja pas tres clair)
donc, j'aimerais savoir si il est possible d'indiquer "NOM" par exemple dans un textbox pour que je sache ce qu'il faut y mettre?
merci
 
allez j'en rajoute une couche (punaise on va se faire chopper là)
je réitère ma proposition de début avec les events qui fonctionne bien aussi
j'en ai même enlevé un
et là il n'y a pas de control sup
mettre les titres dans les textboxs à la conception dans le VBE
J'ai testé ton code, autant mettre les libellés directement dans les Tags ( y aura pas à les charger à l'initialize).
Les réactions du textbox sont encore à affiner .
Ce que je crains si on travaille sans textbox supplémentaire, c'est de ne pas réussir à discerner le réel changement de valeur exploitable .
pat.gif
 
oui aussi
moi je l'ai remis sinon c'est tout blanc sur W10
J'ai testé ton code, autant mettre les libellés directement dans les Tags ( y aura pas à les charger à l'initialize).
Les réactions du textbox sont encore à affiner .
Ce que je crains si on travaille sans textbox supplémentaire, c'est de ne pas réussir à discerner le réel changement de valeur exploitable .
a bon
if .value <>.tag ca suffit pas ??????
 
re
@fanch55 perso le titre j'ajoute toujours les ":"
1°si on travail en texte "Nom" peut être interprété comme "nom" et donc tout les mots qui commence par "nom"
je vois dans ta capture que tu arrive a supprimer une partie normalement ce n'est pas possible car si le textbox=tag alors le keycode est mis à zer0 (touche annulé)
et finalement ça fonctionne aussi bien
j'ai rajouter le forecolor=vbblack des le first char
même si tu positionne le curseur au mileu du titre il l'efface
quand tu reviens a vide d'une manière ou d'une autre le tritre se remet en place (grisé)
le tout avec deux sub génériques pour touts les TextBoxs qui auront été tagués a l'initialise
VB:
Private Sub UserForm_Initialize()
  TextBox1.Tag = TextBox1.Value
  TextBox2.Tag = TextBox2.Value
End Sub


Private Sub TextBox1_Change(): TBX_Change TextBox1: End Sub
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer): TBX_keydown TextBox1, KeyCode: End Sub

Private Sub TextBox2_Change(): TBX_Change TextBox2: End Sub
Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer): TBX_keydown TextBox2, KeyCode: End Sub

'*****************************************************************
'events génériques
Private Sub TBX_Change(TBX)
    With TBX
        .ForeColor = vbBlack
        If Left(.Value, Len(.Tag)) = .Tag Then If Len(.Value) > Len(.Tag) Then .Value = Mid(.Value, Len(.Tag) + 1): .ForeColor = RGB(210, 210, 210)
        If .Value = "" Then .Value = .Tag: .ForeColor = RGB(220, 220, 220)
     If .Value <> .Tag Then .ForeColor = vbBlack
     End With
End Sub

Private Sub TBX_keydown(ByRef TBX As Object, ByVal KeyCode As MSForms.ReturnInteger)
    With TBX
        .ForeColor = vbBlack
        If .Value = .Tag Then .SelStart = Len(.Tag)
        Select Case KeyCode
            Case 8, 46: If .Value = .Tag Then KeyCode = 0: .ForeColor = RGB(210, 210, 210)
        End Select
    End With
End Sub
'******************************************************************

testé dans tout les sens
ne pas oublier les deux points pour éviter des expressions interdites
et quoi que on peut interdir une partie du titre ou l'integral si on veut
une ligne en plus c'est tout
 
Bonsoir,
On peut s'en sortit uniquement avec Enter() et Exit() et si on veut être perfectionniste on peut ajouter le Change() mais ce n'est pas très utile en saisie réelle et allonge le code.

Mais ça reste moins cool que la version initial de @fanch55.
 

Pièces jointes

Dernière édition:
Bonsoir @Dudu2
oui l'enter efface et l'exit remet si vide
mais je vais un peu plus loin avec mon modèle essaie le tu verra
après il n'est pas question de kool mais de la philosophie du développeur qui va ajouter cette option dans son applicatif
soit on ajoute des textbox mask en jouant avec la transparence de l'original dynamiquement
soit on se sert des originaux sans ajout de controls dynamiques et on se sert des events
il serait bien que l'on fasse une compile pour faire une petite ressource
 
En fait la gestion du Change() est un peu plus complexe que ce que j'ai codé précédemment.
Mais au final juste avec Enter() et Exit() et en ajoutant Chr(160) (espace insécable) au bout du titre pour ne pas le confondre avec une saisie équivalente en texte ça suffit.

Les solutions essayées dans ce sujet
:
- Transparence (méthode @fanch55)
- Avec Classe
- Avec WithEvents intégré
- Enter() / Exit()
- Change() / KeyDown()

Je sais pas si ça vaut le coup de tout garder.
J'ai créé une ressource en attente de publication avec la méthode @fanch55 qui a ma préférence car elle ne mobilise que l'évènement Change() de manière très simple (2 instructions) sans intervenir sur le contenu du Control.
 

Pièces jointes

Dernière édition:
Bonjour @Dudu2
perso quand je fait une source
je ne dit pas aux utilisateur regarder mon userform et faite pareil
je leur donne un module voir(Module classe) à intégrer dans leur projet
et sans faire de l'usine a gaz
sinon ce n'est pas une source c'est au mieux un tutoriel
je ne critique pas j'attire seulement ton attention sur le fait que certains utilisateurs ne pourraient pas comprendre ce que tu fait

sans prise de tête tu leur donne un module à intégrer en leur expliquant comment initialiser la chose

deux ébauches de module classe avec les deux méthodes
en tout cas perso c'est comme ça que je vois la chose
comme tu peux le voir je n'en fait pas plus (je classe et les events c'est tout)
 

Pièces jointes

Bonjour @patricktoulon,
je ne dit pas aux utilisateur regarder mon userform et faite pareil
je leur donne un module voir(Module classe) à intégrer dans leur projet
Sur toutes mes ressources c'est un Module à intégrer avec 1 fonction du Module à appeler, mais en l'occurrence ce n'est pas gênant car code en exemple dans le UserForm est suffisamment explicite pour que ce soit reproduit par un utilisateur lambda.
Ceci dit, ta méthode avec une classe est pas mal et je vais sans doute m'en inspirer pour la ressource.

D'ailleurs comment sais-tu que j'ai procédé par l'exemple alors que la ressource n'est pas encore publiée ? T'as accès aux ressources non publiées ?
 
Bonjour @patricktoulon,

Sur toutes mes ressources c'est un Module à intégrer avec 1 fonction du Module à appeler, mais en l'occurrence ce n'est pas gênant car code en exemple dans le UserForm est suffisamment explicite pour que ce soit reproduit par un utilisateur lambda.
Ceci dit, ta méthode avec une classe est pas mal et je vais sans doute m'en inspirer pour la ressource.

D'ailleurs comment sais-tu que j'ai procédé par l'exemple alors que la ressource n'est pas encore publiée ? T'as accès aux ressources non publiées ?
Non je n'ai pas accès au ressources non validées, je ne sais pas de quel exemple tu parles
moi je parle du #post 100 qui entre nous fait un peu usine a gaz pour si peu
d'ailleurs si tu observe bien le process avec un controls mask tu n'a pas besoin du enter/ exit
et j'insiste sur ce point observe bien le comportement "change" qui se suffit a lui même à partir du moment ou les titres sont bien inscrits en mode VBE ou dans l'initialisation
et comme effectivement c'est un comportement supplémentaire il va de soit que ça doit se passer dans un module classe et non dans le userform ou module
En effet pour peu qu'il y ai une 20 aines de controls a initialiser autant faire l'event change unique dans une classe et laisser l'event change original dans le userform pour pouvoir l'utiliser (ou pas) pour faire ce qu'il est sensé faire
je t'ai donné 2 exemple avec classe une avec les textbox mask et l'autre avec change et keydown
c'est simple propre et sans chichi on peu même transférer les codes dans une classe existante qui gère les activX de différentes manière
c'est tellement rien comme code que ça peut aller partout
je me suis même permis d'ajouter le highlighting sous deux formes différentes
la seule chose qui serait a revoir "éventuellement" c'est le mode d'initialisation
en effet la j'envoie les control dans un paramarray
mais il ce pourrait que la classification doive se faire sous certaine condition le tag le nom du control , etc...
mais ça changerait pas grand chose au schmilblick

après tu fait comme tu veux 😉
comme je l'ai dit dans la première page de ce post 2 controls textbox OK pour plus classe systematique
sinon ca n'a pas de sens
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
179
Retour