comment inhiber TextBox1_Exit[RESOLU]

cp4

XLDnaute Barbatruc
Bonjour,
J’ajoute, modifie et supprime des données via une userform, en effectuant mon choix via 3 checkboxs.
Pour l’ajout et la suppression tout fonctionne bien.
Mais la modification me pose problème. Pour l’ajout, j’ai utilisé TextBox1_Exit pour vérifier que la textbox1 (numéro de référence) n’est pas vide et n’existe pas dans la BD. Donc pour les modifications, je sélectionne une ligne dans la listbox qui a pour effet des remplir des textboxs. La textbox1 étant la référence, elle ne doit pas être modifiée mais dès que je clique dans une autre textbox à modifier, la procédure Private Sub TextBox1_Exit est exécutée et par conséquent ne peux rien modifier.
VB:
Private Sub TextBox1_Exit(ByVal cancel As MSForms.ReturnBoolean)
    ligne = WS.Range("A" & Rows.Count).End(xlUp).Row
    Set Rng = WS.Range("A2:G" & ligne)
    Set X = Rng.Columns(1).Find(What:=Val(TextBox1), LookAt:=xlWhole)

    If Len(TextBox1) < 13 Then
        MsgBox ("Vous devez saisir un numéro de code valide." & Chr(10) & Chr(10) & "Pour cela, saisissez 13 chiffres.")
        Me.TextBox1 = "": Me.TextBox1.SetFocus
    End If

    If Not X Is Nothing Then
        MsgBox code & " existe déjà!"
        cancel = True
    End If
End Sub

Private Sub OptModifier_Click() 
   Me.CmdValider.Caption = "MODIFIER"
   Me.CmdValider.BackColor = vbCyan
End Sub
Comment puis-je contourner ce problème ?

Merci.
ps: cancel=true est utiliser pour le bouton Quitter userform (unload me)
 

youky(BJ)

XLDnaute Barbatruc
Salut bien cp4,
Je ferais comme ceci
Bruno
VB:
Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If Len(TextBox1) = 13 Then
'cherche le code
   ligne = WS.Range("A" & Rows.Count).End(xlUp).Row
    Set Rng = WS.Range("A2:G" & ligne)
    Set X = Rng.Columns(1).Find(What:=Val(TextBox1), LookAt:=xlWhole)
If Not X Is Nothing Then
        MsgBox code & " existe d?j?!"
Else
'n'existe pas..... traitement
End If
End If
End Sub
 

Lolote83

XLDnaute Barbatruc
Salut CP4,
Si tu utilise une variable qui correspond à ton choix de modifier ton UserForm, cela devrait le faire.
Par exemple :
Private Sub OptModifier_Click()
xOnModifie=true
Me.CmdValider.Caption = "MODIFIER"
Me.CmdValider.BackColor = vbCyan
End Sub

Et mettre cette le résultat de cette variable dans ton Text1.exit
Private Sub TextBox1_Exit(ByVal cancel As MSForms.ReturnBoolean)
if xOnModifie=true then exit sub


la suite de ton code

End Sub
Tout ça si j'ai bien compris la consigne.
@+ Lolote83
 

cp4

XLDnaute Barbatruc
Bonjour @youky(BJ) :), @Lolote83 :),

Je vous remercie pour votre aide.
La proposition de youky est exploitable mais je voudrais compléter mon code.
Donc c'est la proposition de Lolote qui me convient.
Il y a des jours où je me noie dans un verre d'eau. C'était si simple.

Encore merci à vous deux.;)

Bonne journée.:D
 

Discussions similaires

Réponses
2
Affichages
195
Réponses
12
Affichages
437
Réponses
5
Affichages
397

Statistiques des forums

Discussions
312 078
Messages
2 085 112
Membres
102 783
dernier inscrit
Basoje