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?
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)
...
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
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).
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) "?
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
'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).