bloquer contenu textbox une fois modifiée

Jessssss

XLDnaute Nouveau
Bonjour le forum!

dans mon userform (qui s'ouvre en double cliquant sur une case), j'ai une textbox1 remplie par défaut par la valeur "Monsieur Machin". l'utilisateur peut modifier cette valeur à souhaits!
quand l'utilisateur ferme l'userform en cliquant sur le CommandButton1, la valeur de textbox1 est reportée dans le tableur. quand on rouvre le formulaire, il se charge des valeurs déjà saisies et la valeur de la textbox1 peut à nouveau etre changée.
cependant je souhaiterais que l'utilisateur du formulaire ne puisse modifier la valeur de la textbox1 qu'une seule fois, donc remplacer "Monsieur Machin" par "Monsieur Bidule". je voudrais que l'utilisateur puisse rouvrir le formulaire par la meme manip et qu'il puisse changer les autres textbox sauf la textbox1, modifiée déjà une fois.

j'ai regardé les autres fils qui parlent de "textbox1.locked" mais je n'arrive pas vraiment à l'utiliser.

voici la partie de ma macro concernant la textbox1:

Private Sub CommandButton1_Click()
ActiveSheet.Cells(LigneNOM, 3).Value = TextBox1.Text
UserForm1.Hide
Unload UserForm1
End Sub

Private Sub userform_initialize()
UserForm1.TextBox1.Text = ActiveSheet.Range("C" & ActiveCell.Row).Value
End sub



quelqu'un pourrait-il me dire comment résoudre mon problème? me suis-je exprimée clairement? :eek:

je vous remercie! bonne soirée
 

Fo_rum

XLDnaute Accro
Re : bloquer contenu textbox une fois modifiée

Salut,

Cela vient de ce que tu ne déclares pas ta variable LigneSociete.
La valeur initiale n'est pas transmise à la macro "Bouton".
Essaie :
Code:
Dim LigneSociete As Long '[COLOR="Red"]ici !!![/COLOR]
Private Sub Userform_initialize()
  LigneSociete = ActiveCell.Row
  TextBox1.Text = ActiveSheet.Range("C" & LigneSociete).Value
End Sub

Private Sub CommandButton1_Click()
  If Cells(LigneSociete, 3).Offset(, 15) < 2 Then
    Cells(LigneSociete, 3).Offset(, 15) = IIf(Cells(LigneSociete, 3).Offset(, 15) = 1, 2, 1)
...
 

jp14

XLDnaute Barbatruc
Re : bloquer contenu textbox une fois modifiée

Bonjour

Une autre approche pour régler le problème.
Remplacer dans la colonne C "Monsieur Machin", par "Monsieur" ou "Monsieur Machinµ" ( un nom qui n'existe pas)

Ci dessous un exemple de code avec verrouillage de la zone et affichage d'un message avant l'enregistrement

Code:
Option Explicit
Dim lignenom As Long
Private Sub CommandButton1_Click()

If TextBox1.Enabled = True Then ' on vérifie si le nom existe

    If TextBox1.Value = "" Then
        Select Case MsgBox("Vous devez indiquer le nom du client" _
                           & vbCrLf & "" _
                           & vbCrLf & "Pour annuler la saisie : bouton annuler" _
                           , vbOKCancel Or vbCritical Or vbDefaultButton1, Application.Name)
        
            Case vbOK
                Exit Sub
            Case vbCancel
                Unload Me
                Exit Sub
        End Select
   Else
    Select Case MsgBox("Vous aller enregistrer la fiche avec le nom" _
                       & vbCrLf & "" & TextBox1.Value _
                       & vbCrLf & "Ce nom vous ne pourrez plus le modifier" _
                       & vbCrLf & "Voulez vous continuer" _
                       & vbCrLf & "" _
                       & vbCrLf & "" _
                       , vbYesNo Or vbInformation Or vbDefaultButton1, Application.Name)
    
        Case vbYes
    
        Case vbNo
            Exit Sub
    End Select
        TextBox1.Enabled = False ' pas de focus
        TextBox1.Locked = True ' impossibilité de modifier
        Cells(lignenom, 3) = TextBox1.Value
    End If
End If

End Sub

Private Sub UserForm_Initialize()
lignenom = 2
TextBox1.Value = Cells(lignenom, 3)

If TextBox1.Value = "Monsieur Machinµ" Then
    TextBox1.Value = ""
    TextBox1.Enabled = True ' autorise le focus
    TextBox1.Locked = False ' autorise les modifications
    Else
    TextBox1.Enabled = False ' pas de focus
    TextBox1.Locked = True ' impossibilité de modifier
End If

End Sub

A tester

JP
 

job75

XLDnaute Barbatruc
Re : bloquer contenu textbox une fois modifiée

Bonjour à tous,

Si l'on veut absolument utiliser la variable LigneNom, il faut la déclarer Public tout en haut de la feuille :

Code:
Public LigneNom As Long

Mais il semble qu'elle ne serve à rien... Utiliser ActiveCell.Row partout.

A+
 

Fo_rum

XLDnaute Accro
Re : bloquer contenu textbox une fois modifiée

Salut,

Autre éclairage donc autres macros.
Job75, je pense que Dim suffit ici dans l'USF. Par contre, Public, serait à utiliser dans un module standard pour une portabilité générale (comme dans mon exemple).
 

Pièces jointes

  • SaisieUniqueTxtBox.xls
    27.5 KB · Affichages: 108

Jessssss

XLDnaute Nouveau
Re : bloquer contenu textbox une fois modifiée

Bonjour à tous mes adjuvants!

Fo rum a trouvé la solution à mon problème! c'est exactement ce que je cherchais!

Merci à tous pour vos lumières car vous m'avez tous appris des choses grâce à votre aide!

bonne journée!
 

Jessssss

XLDnaute Nouveau
Re : bloquer contenu textbox une fois modifiée

en revanche une dernière question:
si je souhaite autoriser non pas un unique changement mais 2 changements, que dois-je modifier dans la macro? (je pense que c'est dans cette partie uniquement que je dois modifier quelquechose?...je ne suis pas encore une pro!)

Code:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If Cells(Li, 3).Offset(, 12) = "" Then
    Cells(Lie, 3).Offset(, 12) = 1' 
  Else
    TextBox1 = ActiveSheet.Range("C" & Li)
    MsgBox "Changement de nom refusé !", , "Attention,"
  End If
  
End Sub

egalement, que signifie le 12 dans " If Cells(Li, 3).Offset(, 12) "?

merci bcp
 
G

Guest

Guest
Re : bloquer contenu textbox une fois modifiée

Bonsoir Jessssssss,

tu n'as pas accès à l'aide en ligne de vba?

Offset(X,Y) Décale une référence de cellule de X ligne(s) et Y colonne(s)
L'un ou l'autre est facultatif.

Dans
Code:
Cells(Lie, 3).Offset(, 12)

Retourne la cellule O (à 12 colonnes de C) de la ligne lie

A bientôt
 
Dernière modification par un modérateur:

Jessssss

XLDnaute Nouveau
Re : bloquer contenu textbox une fois modifiée

Merci Hasco! pour ton aide! mais peux tu m'aider sur ceci?
en revanche une dernière question:
si je souhaite autoriser non pas un unique changement mais 2 changements, que dois-je modifier dans la macro? (je pense que c'est dans cette partie uniquement que je dois modifier quelquechose?...je ne suis pas encore une pro!)

Code:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If Cells(Li, 3).Offset(, 12) = "" Then
    Cells(Li, 3).Offset(, 12) = 1' 
  Else
    TextBox1 = ActiveSheet.Range("C" & Li)
    MsgBox "Changement de nom refusé !", , "Attention,"
  End If
  
End Sub

merci bcp
 

Fo_rum

XLDnaute Accro
Re : bloquer contenu textbox une fois modifiée

Salut

tu avais déjà un exemple.
Code:
'test sur la cellule O...
  If Cells(Li, 3).Offset(, 12) < 2 Then
    Cells(Li, 3).Offset(, 12) = Cells(Li, 3).Offset(, 12) + 1
  Else
    TextBox1 = ActiveSheet.Range("C" & Li)
    MsgBox "Changement de nom refusé !", , "Attention,"
  End If
End Sub

Au départ, la cellule O... est vide, puis elle s'incrémente de 1 à chaque changement tant qu'elle ne dépasse pas 1 (on sort à 2).
 

Discussions similaires

Statistiques des forums

Discussions
312 497
Messages
2 088 994
Membres
104 000
dernier inscrit
dinelcia