bonsoir,
je voudrais activer un contrôle dans un userform, après avoir vérifié
certaines choses
j'ai beau mettre une ligne
txt_machin.setfocus
rien ne se passe
y a t il moyen de forcer l'activation du contrôle txt_machin ?
merci
claude
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
claude
bonsoir michdenis un peu plus de précision j'ai un userform avec 15 séries de txtbox je veux vérifier une série et j'ai créé une fonction (controle_num_facture) qui fait une boucle sur le contrôle à vérifier (déclenchement sur after_update, donc à la perte du focus) ici je contrôle la première txtbox (txt_numfact1)
Private Sub txt_numfact1_AfterUpdate() ControleMontant Frame2.ActiveControl If controle_num_facture = False Then Exit Sub ... End sub
Sub ControleMontant ' vérification du format numérique : fonctionne OK End sub
Function controle_num_facture() 'c'est elle que je travaille maintenant For i = 1 To 15 If frm2_remise_banque.Controls("txt_numfact" & i) <> "" And _ frm2_remise_banque.Controls("txt_numfact" & i) - Int(frm2_remise_banque.Controls("txt_numfact" & i)) <> 0 Then MsgBox "Attention ! le numéro de facture ne semple pas valide", vbExclamation, frm2_remise_banque.Controls("txt_numfact" & i) = "" frm2_remise_banque.Controls("txt_numfact" & i).SetFocus 'c'est là que la commande ' marche pas controle_num_facture = False Exit For End If Next
End Function merci :-) claude
bonsoir michdenis
un peu plus de précision
j'ai un userform avec 15 séries de txtbox
je veux vérifier une série et j'ai créé une fonction (controle_num_facture)
qui fait une boucle sur le contrôle à vérifier (déclenchement sur
after_update, donc à la perte du focus)
ici je contrôle la première txtbox (txt_numfact1)
Private Sub txt_numfact1_AfterUpdate()
ControleMontant Frame2.ActiveControl
If controle_num_facture = False Then Exit Sub
...
End sub
Sub ControleMontant
' vérification du format numérique : fonctionne OK
End sub
Function controle_num_facture() 'c'est elle que je travaille maintenant
For i = 1 To 15
If frm2_remise_banque.Controls("txt_numfact" & i) <> "" And _
frm2_remise_banque.Controls("txt_numfact" & i) -
Int(frm2_remise_banque.Controls("txt_numfact" & i)) <> 0 Then
MsgBox "Attention ! le numéro de facture ne semple pas
valide", vbExclamation,
frm2_remise_banque.Controls("txt_numfact" & i) = ""
frm2_remise_banque.Controls("txt_numfact" & i).SetFocus
'c'est là que la commande
' marche pas
controle_num_facture = False
Exit For
End If
Next
bonsoir michdenis un peu plus de précision j'ai un userform avec 15 séries de txtbox je veux vérifier une série et j'ai créé une fonction (controle_num_facture) qui fait une boucle sur le contrôle à vérifier (déclenchement sur after_update, donc à la perte du focus) ici je contrôle la première txtbox (txt_numfact1)
Private Sub txt_numfact1_AfterUpdate() ControleMontant Frame2.ActiveControl If controle_num_facture = False Then Exit Sub ... End sub
Sub ControleMontant ' vérification du format numérique : fonctionne OK End sub
Function controle_num_facture() 'c'est elle que je travaille maintenant For i = 1 To 15 If frm2_remise_banque.Controls("txt_numfact" & i) <> "" And _ frm2_remise_banque.Controls("txt_numfact" & i) - Int(frm2_remise_banque.Controls("txt_numfact" & i)) <> 0 Then MsgBox "Attention ! le numéro de facture ne semple pas valide", vbExclamation, frm2_remise_banque.Controls("txt_numfact" & i) = "" frm2_remise_banque.Controls("txt_numfact" & i).SetFocus 'c'est là que la commande ' marche pas controle_num_facture = False Exit For End If Next
End Function merci :-) claude
michdenis
Bonjour,
Pour ceux que le fil intéresse, pour une procédure plus complète pour la validation des textbox de l'userform, on devrait utiliser ceci :
'----------------------------- Private Sub frm2_remise_banque_Click()
Dim Nom_Control As String, A As Integer Nom_Control = controle_num_facture If Nom_Control <> "" Then With Controls(Nom_Control) .SetFocus If .Value <> "" Then A = Application.Find(",", .Value) - 1 .SelStart = A .SelLength = Len(.Name) - A End If End With Else 'Si tout est ok dans tes textbox 'écrit la suite des opérations ici. End If
End Sub '----------------------------- Function controle_num_facture() As String Dim Message As String, LeTxtBox As MSForms.Textbox
For A = 1 To 4 Set LeTxtBox = Controls("txt_numfact" & A) If LeTxtBox = "" Then MsgBox "Le numéro est absent.", vbInformation _ + vbOKOnly, "Validation refusée" controle_num_facture = LeTxtBox.Name Exit For ElseIf CDbl(LeTxtBox) - Int(CDbl(LeTxtBox)) <> 0 Then MsgBox "Attention ! le numéro de facture" & _ "ne semple pas valide. Corriger. ", _ vbInformation + vbOKOnly, "Validation refusée" controle_num_facture = LeTxtBox.Name Exit For End If Next
End Function '-----------------------------
Salutations!
"michdenis" a écrit dans le message de news: Bonjour Claude,
Voici, je t'ai créé une fonction en essayant de respecter le plus possible ce que tu avais commencé .
A ) Dans un formulaire, tu dois gérer dans tes textbox , le séparateur décimal. Voici ce que je te propose: Pour chacun de tes texbox qui doivent recevoir des données numériques, définis leur une procédure comme suit en adaptant le nom du textbox approprié dans la procédure. La validation se fait par une fonction (voir en bas du message) '------------------------- Private Sub txt_numfact1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
KeyAscii = CheckLaSaisie(txt_numfact1, KeyAscii)
End Sub '------------------------
B ) Le type de procédure que tu avais enclenché ne peut s'exécuter après chacune des saisies de chacun des textbox. Mais tu peux utiliser le bouton de commande "Validation" pour exécuter la vérification avant de passer à autre chose. Si un textbox ne répond pas au critère, il sera sélectionné et l'usager ne pourra passer à l'opération suivante .
Voici les 2 procédures :
'en prenant pour acquis que "frm2_remise_banque" est un bouton de commande sur ton formulaire. '---------------------------------- Private Sub frm2_remise_banque_Click()
Dim Nom_Control As String Nom_Control = controle_num_facture If Nom_Control <> "" Then With Controls(Nom_Control) .SetFocus .SelStart = 0 .SelLength = Len(.Name) End With End If
End Sub '----------------------------------
'---------------------------------- Function controle_num_facture() As String
Dim LeTxtBox As MSForms.TextBox For a = 1 To 12 Set LeTxtBox = Controls("txt_numfact" & a) If LeTxtBox <> "" And _ Val(LeTxtBox) - Int(Val(LeTxtBox)) <> 0 Then MsgBox "Attention ! le numéro de facture" & _ "ne semple pas valide ", , "Validation refusée" controle_num_facture = LeTxtBox.Name Exit For End If Next End Function '----------------------------------
Dans un module standard : copie la fonction suivante :
'------------------------------------------------ Public Function CheckLaSaisie(Textbox As MSForms.Textbox, ByVal Char As Integer) Dim SepDec As String SepDec = Application.International(xlDecimalSeparator) If Char = 44 Or Char = 46 Then If InStr(1, Textbox, SepDec, vbTextCompare) > 0 Then CheckLaSaisie = 0 Else CheckLaSaisie = Asc(SepDec) End If Else If Char < 48 Or Char > 58 Then CheckLaSaisie = 0 Else CheckLaSaisie = Char End If End If
End Function
'------------------------------------------------
Voilà !
Salutations!
"claude" a écrit dans le message de news:3f05efe8$0$5415$ bonsoir michdenis un peu plus de précision j'ai un userform avec 15 séries de txtbox je veux vérifier une série et j'ai créé une fonction (controle_num_facture) qui fait une boucle sur le contrôle à vérifier (déclenchement sur after_update, donc à la perte du focus) ici je contrôle la première txtbox (txt_numfact1)
Private Sub txt_numfact1_AfterUpdate() ControleMontant Frame2.ActiveControl If controle_num_facture = False Then Exit Sub ... End sub
Sub ControleMontant ' vérification du format numérique : fonctionne OK End sub
Function controle_num_facture() 'c'est elle que je travaille maintenant For i = 1 To 15 If frm2_remise_banque.Controls("txt_numfact" & i) <> "" And _ frm2_remise_banque.Controls("txt_numfact" & i) - Int(frm2_remise_banque.Controls("txt_numfact" & i)) <> 0 Then MsgBox "Attention ! le numéro de facture ne semple pas valide", vbExclamation, frm2_remise_banque.Controls("txt_numfact" & i) = "" frm2_remise_banque.Controls("txt_numfact" & i).SetFocus 'c'est là que la commande ' marche pas controle_num_facture = False Exit For End If Next
End Function merci :-) claude
Bonjour,
Pour ceux que le fil intéresse, pour une procédure plus complète pour la validation des textbox de l'userform, on devrait
utiliser ceci :
'-----------------------------
Private Sub frm2_remise_banque_Click()
Dim Nom_Control As String, A As Integer
Nom_Control = controle_num_facture
If Nom_Control <> "" Then
With Controls(Nom_Control)
.SetFocus
If .Value <> "" Then
A = Application.Find(",", .Value) - 1
.SelStart = A
.SelLength = Len(.Name) - A
End If
End With
Else
'Si tout est ok dans tes textbox
'écrit la suite des opérations ici.
End If
End Sub
'-----------------------------
Function controle_num_facture() As String
Dim Message As String, LeTxtBox As MSForms.Textbox
For A = 1 To 4
Set LeTxtBox = Controls("txt_numfact" & A)
If LeTxtBox = "" Then
MsgBox "Le numéro est absent.", vbInformation _
+ vbOKOnly, "Validation refusée"
controle_num_facture = LeTxtBox.Name
Exit For
ElseIf CDbl(LeTxtBox) - Int(CDbl(LeTxtBox)) <> 0 Then
MsgBox "Attention ! le numéro de facture" & _
"ne semple pas valide. Corriger. ", _
vbInformation + vbOKOnly, "Validation refusée"
controle_num_facture = LeTxtBox.Name
Exit For
End If
Next
End Function
'-----------------------------
Salutations!
"michdenis" <michdenis@hotmail.com> a écrit dans le message de news:uE7c9toQDHA.2480@tk2msftngp13.phx.gbl...
Bonjour Claude,
Voici, je t'ai créé une fonction en essayant de respecter le plus possible ce que tu avais commencé .
A ) Dans un formulaire, tu dois gérer dans tes textbox , le séparateur décimal. Voici ce que je te propose:
Pour chacun de tes texbox qui doivent recevoir des données numériques, définis leur une procédure comme suit en adaptant
le nom du textbox approprié dans la procédure. La validation se fait par une fonction (voir en bas du message)
'-------------------------
Private Sub txt_numfact1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
KeyAscii = CheckLaSaisie(txt_numfact1, KeyAscii)
End Sub
'------------------------
B ) Le type de procédure que tu avais enclenché ne peut s'exécuter après chacune des saisies de chacun des textbox. Mais tu
peux utiliser le bouton de commande "Validation" pour exécuter la vérification avant de passer à autre chose. Si un textbox
ne répond pas au critère, il sera sélectionné et l'usager ne pourra passer à l'opération suivante .
Voici les 2 procédures :
'en prenant pour acquis que "frm2_remise_banque" est un bouton de commande sur ton formulaire.
'----------------------------------
Private Sub frm2_remise_banque_Click()
Dim Nom_Control As String
Nom_Control = controle_num_facture
If Nom_Control <> "" Then
With Controls(Nom_Control)
.SetFocus
.SelStart = 0
.SelLength = Len(.Name)
End With
End If
End Sub
'----------------------------------
'----------------------------------
Function controle_num_facture() As String
Dim LeTxtBox As MSForms.TextBox
For a = 1 To 12
Set LeTxtBox = Controls("txt_numfact" & a)
If LeTxtBox <> "" And _
Val(LeTxtBox) - Int(Val(LeTxtBox)) <> 0 Then
MsgBox "Attention ! le numéro de facture" & _
"ne semple pas valide ", , "Validation refusée"
controle_num_facture = LeTxtBox.Name
Exit For
End If
Next
End Function
'----------------------------------
Dans un module standard : copie la fonction suivante :
'------------------------------------------------
Public Function CheckLaSaisie(Textbox As MSForms.Textbox, ByVal Char As Integer)
Dim SepDec As String
SepDec = Application.International(xlDecimalSeparator)
If Char = 44 Or Char = 46 Then
If InStr(1, Textbox, SepDec, vbTextCompare) > 0 Then
CheckLaSaisie = 0
Else
CheckLaSaisie = Asc(SepDec)
End If
Else
If Char < 48 Or Char > 58 Then
CheckLaSaisie = 0
Else
CheckLaSaisie = Char
End If
End If
End Function
'------------------------------------------------
Voilà !
Salutations!
"claude" <doclaude@free.fr> a écrit dans le message de news:3f05efe8$0$5415$626a54ce@news.free.fr...
bonsoir michdenis
un peu plus de précision
j'ai un userform avec 15 séries de txtbox
je veux vérifier une série et j'ai créé une fonction (controle_num_facture)
qui fait une boucle sur le contrôle à vérifier (déclenchement sur
after_update, donc à la perte du focus)
ici je contrôle la première txtbox (txt_numfact1)
Private Sub txt_numfact1_AfterUpdate()
ControleMontant Frame2.ActiveControl
If controle_num_facture = False Then Exit Sub
...
End sub
Sub ControleMontant
' vérification du format numérique : fonctionne OK
End sub
Function controle_num_facture() 'c'est elle que je travaille maintenant
For i = 1 To 15
If frm2_remise_banque.Controls("txt_numfact" & i) <> "" And _
frm2_remise_banque.Controls("txt_numfact" & i) -
Int(frm2_remise_banque.Controls("txt_numfact" & i)) <> 0 Then
MsgBox "Attention ! le numéro de facture ne semple pas
valide", vbExclamation,
frm2_remise_banque.Controls("txt_numfact" & i) = ""
frm2_remise_banque.Controls("txt_numfact" & i).SetFocus
'c'est là que la commande
' marche pas
controle_num_facture = False
Exit For
End If
Next
Pour ceux que le fil intéresse, pour une procédure plus complète pour la validation des textbox de l'userform, on devrait utiliser ceci :
'----------------------------- Private Sub frm2_remise_banque_Click()
Dim Nom_Control As String, A As Integer Nom_Control = controle_num_facture If Nom_Control <> "" Then With Controls(Nom_Control) .SetFocus If .Value <> "" Then A = Application.Find(",", .Value) - 1 .SelStart = A .SelLength = Len(.Name) - A End If End With Else 'Si tout est ok dans tes textbox 'écrit la suite des opérations ici. End If
End Sub '----------------------------- Function controle_num_facture() As String Dim Message As String, LeTxtBox As MSForms.Textbox
For A = 1 To 4 Set LeTxtBox = Controls("txt_numfact" & A) If LeTxtBox = "" Then MsgBox "Le numéro est absent.", vbInformation _ + vbOKOnly, "Validation refusée" controle_num_facture = LeTxtBox.Name Exit For ElseIf CDbl(LeTxtBox) - Int(CDbl(LeTxtBox)) <> 0 Then MsgBox "Attention ! le numéro de facture" & _ "ne semple pas valide. Corriger. ", _ vbInformation + vbOKOnly, "Validation refusée" controle_num_facture = LeTxtBox.Name Exit For End If Next
End Function '-----------------------------
Salutations!
"michdenis" a écrit dans le message de news: Bonjour Claude,
Voici, je t'ai créé une fonction en essayant de respecter le plus possible ce que tu avais commencé .
A ) Dans un formulaire, tu dois gérer dans tes textbox , le séparateur décimal. Voici ce que je te propose: Pour chacun de tes texbox qui doivent recevoir des données numériques, définis leur une procédure comme suit en adaptant le nom du textbox approprié dans la procédure. La validation se fait par une fonction (voir en bas du message) '------------------------- Private Sub txt_numfact1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
KeyAscii = CheckLaSaisie(txt_numfact1, KeyAscii)
End Sub '------------------------
B ) Le type de procédure que tu avais enclenché ne peut s'exécuter après chacune des saisies de chacun des textbox. Mais tu peux utiliser le bouton de commande "Validation" pour exécuter la vérification avant de passer à autre chose. Si un textbox ne répond pas au critère, il sera sélectionné et l'usager ne pourra passer à l'opération suivante .
Voici les 2 procédures :
'en prenant pour acquis que "frm2_remise_banque" est un bouton de commande sur ton formulaire. '---------------------------------- Private Sub frm2_remise_banque_Click()
Dim Nom_Control As String Nom_Control = controle_num_facture If Nom_Control <> "" Then With Controls(Nom_Control) .SetFocus .SelStart = 0 .SelLength = Len(.Name) End With End If
End Sub '----------------------------------
'---------------------------------- Function controle_num_facture() As String
Dim LeTxtBox As MSForms.TextBox For a = 1 To 12 Set LeTxtBox = Controls("txt_numfact" & a) If LeTxtBox <> "" And _ Val(LeTxtBox) - Int(Val(LeTxtBox)) <> 0 Then MsgBox "Attention ! le numéro de facture" & _ "ne semple pas valide ", , "Validation refusée" controle_num_facture = LeTxtBox.Name Exit For End If Next End Function '----------------------------------
Dans un module standard : copie la fonction suivante :
'------------------------------------------------ Public Function CheckLaSaisie(Textbox As MSForms.Textbox, ByVal Char As Integer) Dim SepDec As String SepDec = Application.International(xlDecimalSeparator) If Char = 44 Or Char = 46 Then If InStr(1, Textbox, SepDec, vbTextCompare) > 0 Then CheckLaSaisie = 0 Else CheckLaSaisie = Asc(SepDec) End If Else If Char < 48 Or Char > 58 Then CheckLaSaisie = 0 Else CheckLaSaisie = Char End If End If
End Function
'------------------------------------------------
Voilà !
Salutations!
"claude" a écrit dans le message de news:3f05efe8$0$5415$ bonsoir michdenis un peu plus de précision j'ai un userform avec 15 séries de txtbox je veux vérifier une série et j'ai créé une fonction (controle_num_facture) qui fait une boucle sur le contrôle à vérifier (déclenchement sur after_update, donc à la perte du focus) ici je contrôle la première txtbox (txt_numfact1)
Private Sub txt_numfact1_AfterUpdate() ControleMontant Frame2.ActiveControl If controle_num_facture = False Then Exit Sub ... End sub
Sub ControleMontant ' vérification du format numérique : fonctionne OK End sub
Function controle_num_facture() 'c'est elle que je travaille maintenant For i = 1 To 15 If frm2_remise_banque.Controls("txt_numfact" & i) <> "" And _ frm2_remise_banque.Controls("txt_numfact" & i) - Int(frm2_remise_banque.Controls("txt_numfact" & i)) <> 0 Then MsgBox "Attention ! le numéro de facture ne semple pas valide", vbExclamation, frm2_remise_banque.Controls("txt_numfact" & i) = "" frm2_remise_banque.Controls("txt_numfact" & i).SetFocus 'c'est là que la commande ' marche pas controle_num_facture = False Exit For End If Next
End Function merci :-) claude
claude
bonjour et merci à tous, surtout michel et misange pour leurs réponses, excellentes (bien sûr), documentéest et pertinentes grâce à vous je finirais un jour par savoir me servir d'excel ... million de merci(s) claude
bonjour
et merci à tous, surtout michel et misange pour leurs réponses, excellentes
(bien sûr), documentéest et pertinentes
grâce à vous je finirais un jour par savoir me servir d'excel ...
million de merci(s)
claude
bonjour et merci à tous, surtout michel et misange pour leurs réponses, excellentes (bien sûr), documentéest et pertinentes grâce à vous je finirais un jour par savoir me servir d'excel ... million de merci(s) claude