Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

comment inhiber TextBox1_Exit[RESOLU]

  • Initiateur de la discussion Initiateur de la discussion cp4
  • Date de début Date de début

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 !

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)
 
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
 
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
 
Réactions: cp4
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.😀
 
- 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
10
Affichages
642
Réponses
13
Affichages
700
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…