Récupérer le nom du textbox : passer par un module de classe ?

lodam

XLDnaute Occasionnel
Bonsoir à toutes et à tous

J'ai un userform avec de nombreux textbox qui sont tous nommés.
Cet userform se charge avec les textbox bloqués : 'locked=true' car il s'agit d'une consultation des données

Comment faire pour que lorsqu'on clique sur l'un deux, on puisse
- récupérer le nom
- et donc passer la propriété à locked=false

J'ai vu ce fil mais je n'ai pas pu l'adapter à mon cas:
https://www.excel-downloads.com/threads/ref-wiki-page-8-de-michelxld.92376/
(tout en bas)
Merci pour votre aide.
Ci-joint un classeur de démo
bonne soirée
lodam
 

Pièces jointes

  • nomtextbox.xls
    33 KB · Affichages: 129
Dernière édition:

Catrice

XLDnaute Barbatruc
Re : Récupérer le nom du textbox : passer par un module de classe ?

Bonjour,

Par exemple pour la TextBox Genre :
Private Sub genre_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
genre.Locked = False
End Sub

Pourquoi les Locker si on peut les "déLocker" ?...
 

lodam

XLDnaute Occasionnel
Re : Récupérer le nom du textbox : passer par un module de classe ?

Merci pour ta réponse.
En fait, il s'agit d'un userform de visualisation des données, donc je veux être certain que la modification soit bien gérée :" un clic"="je modifie" et puis "j'enregistre"

Et l'idée ensuite est d'aller chercher dans la feuille dans laquelle toutes les informations sont stockées, la cellule où est stockée cette valeur à modifier.

Dans ta réponse, il faut donc que je reproduise ton code pour chaque textbox ? il n'y a pas de code qui pourrait gérer tous ces textbox

merci encore
lodam
 

lodam

XLDnaute Occasionnel
Re : Récupérer le nom du textbox : passer par un module de classe ?

Au final, cela pourrait donner cela pour chaque textbox : et comme j'en ai 25 ... je cherchais à gagner un peu de temps ...mais aussi à apprendre une nouvelle astuce bien sûr...

Private Sub genre_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
genre.Locked = False
End Sub

Private Sub genre_Exit(ByVal Cancel As MSForms.ReturnBoolean)
With Sheets("feuil1").Range("A2:A" & Sheets("feuil1").Range("A65536").End(xlUp).Row)
Set cell = .Find(usf1.num_client)
End With
If cell.Value = usf1.num_client Then
cell.Offset(0, 2) = genre.Value
End If
genre.Locked = True
End Sub
 

myDearFriend!

XLDnaute Barbatruc
Re : Récupérer le nom du textbox : passer par un module de classe ?

Bonsoir lodam, Catrice, le Forum,

Une info, juste en passant lodam et pour t'éviter une perte de temps inutile..

Le traitement des TextBox par module de classe est bien sûr possible. Cela dit, tu te confronterais à un autre problème : l'évènement Exit() des TextBox n'est pas gérable dans un module de classe.

Cordialement,
 

Lii

XLDnaute Impliqué
Re : Récupérer le nom du textbox : passer par un module de classe ?

Bonjour Tous,

une idée en passant : un bouton (bascule) de plus permettrait de ne pas tout chambouler.
 

Pièces jointes

  • ToggleButton.zip
    8.2 KB · Affichages: 45
  • ToggleButton.zip
    8.2 KB · Affichages: 53
  • ToggleButton.zip
    8.2 KB · Affichages: 54

Bebere

XLDnaute Barbatruc
Re : Récupérer le nom du textbox : passer par un module de classe ?

bonjour à tous
une autre idée,tu passes sur le contrôle un usf est appelé(sauf num_client)
évènement mouseup
à bientôt
 

Pièces jointes

  • nomtextboxLodam.zip
    19.7 KB · Affichages: 73

MichelXld

XLDnaute Barbatruc
Re : Récupérer le nom du textbox : passer par un module de classe ?

bonjour


Pourquoi les Locker si on peut les "déLocker" ?...
Je suis du même avis que Catrice ... ;o)



Sinon, un exemple qui identifie la prise de focus et la perte de focus sur les contrôles TextBox :

Code:
'---- dans un module de classe nommé Classe1
Option Explicit
 
Public Event GetFocus()
Public Event LostFocus(ByVal Txtbx As String)
Public nomObjActif As String
 
Public Sub cibleFocus(USF As MSForms.UserForm)
With USF
        If TypeName(.ActiveControl) = "TextBox" Then
            nomObjActif = .ActiveControl.Name
            On Error GoTo errorHandler
            Do
                DoEvents
                If .ActiveControl.Name <> nomObjActif Then
                    If TypeName(.ActiveControl) = "TextBox" Then
                        RaiseEvent LostFocus(nomObjActif)
                        nomObjActif = .ActiveControl.Name
                        RaiseEvent GetFocus
                    End If
                End If
            Loop
            End If
End With
 
errorHandler:
Exit Sub
End Sub


Code:
'---  dans l'UserForm  ---
Option Explicit
Private WithEvents USF As Classe1
 
Private Sub UserForm_Activate()
    Set USF = New Classe1
 
    TextBox1.SetFocus
    Me.Controls(Me.ActiveControl.Name). _
        Object.BackColor = RGB(200, 200, 200)
 
    USF.cibleFocus Me
End Sub
 
Private Sub USF_GetFocus()
    Me.Controls(Me.ActiveControl.Name). _
        Object.BackColor = RGB(200, 200, 200)
End Sub
 
Private Sub USF_LostFocus(ByVal Txtbx As String)
    Me.Controls(Txtbx).BackColor = RGB(255, 255, 255)
End Sub
 
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Set USF = Nothing
End Sub


source :
Controling colors of controls in userform - MrExcel Message Board



bonne soirée
michel
Microsoft Excel MVP
 

myDearFriend!

XLDnaute Barbatruc
Re : Récupérer le nom du textbox : passer par un module de classe ?

Bonsoir MichelXLD, le fil , le Forum,

Superbe exemple que tu nous présentes là mon cher Michel ! ;).

Ce post du grand Colo que tu as déniché chez MrExcel, c'est du bonheur ! Je garde au chaud pour mes archives et pour le mettre en application dès que possible, c'est certain.

Merci une nouvelle fois pour tout ce que tu apportes aux passionnés que nous sommes.

Bien amicalement,
 

lodam

XLDnaute Occasionnel
Re : Récupérer le nom du textbox : passer par un module de classe ?

Bonsoir
Je ne sais quoi dire sinon merci car j'ai les réponses de très grands spécialistes.
Je vais m'inspirer de la solution de MichelXld

Bonne soirée à tous et bonne semaine
lodam
 

Discussions similaires

Statistiques des forums

Discussions
312 488
Messages
2 088 840
Membres
103 972
dernier inscrit
steeter