Autres saisie obligatoire dans plusieurs textbox d'un userform

JOELJBJ

XLDnaute Nouveau
Bonjour à tous et mille bisous à celui qui va m'aider!!! Cela fait plusieurs heures que je galère avec un truc certainement trop facile... De plus (si possible ce serait parfait si cela fonctionne avec Excel 2007 et 2019)

J'ai un UserForm avec 8 TextBox et un Conbo

je voudrais bloquer le Btn enregistrer si les champs ne sont pas remplis

pas de format à respecter (c'est tout du texte)

J'y suis arrivé avec text1

Pprivate Sub txt1_change()
If txt1 <>"" Then
btn enregistrer .Enable=True
Else
btn enregistrer.Enable=False
End if
End Sub

Super ça marche

ça se complique quand je veux ajouter les autres, je cherche de l'aide!!!
au secourt...
Merci d'avance
JBJ
 
Solution
En fait pas besoin de code dans l'UserForm.

Il suffit de compléter la macro d'ouverture, voyez ce fichier (2) :
VB:
Sub OuvreFrm()
Application.OnTime 1, "Boutons_Enabled" 'lance le processus
frmSaisie.Show
End Sub

JOELJBJ

XLDnaute Nouveau
Désolé, je ne voudrais pas abuser, mais j'ai fait un excès de confiance et j'ai un peu de mal à intégrer vos solutions dans mon code. Je joins mon Userform pour plus de compréhension. Pour les affectations des résultats dans mon tableur pas de soucis, ça marche. Pour le moment, lol… PS fichier sans code. Un simple .Show pour frm et listes pour les Combo. Merci
 

Pièces jointes

  • test.xlsm
    215.8 KB · Affichages: 5

patricktoulon

XLDnaute Barbatruc
re
eric
kado

comme ca tu a le keypress et keydown en un
VB:
Function keycode_to_keyascii(KeyCode)
'converti le keycode en keyascii pour les touche de a à z et 0 à 9  by patricktoulon
    Select Case KeyCode
    Case 65 To 90: KeyCode = KeyCode + 32
    Case 96 To 105: KeyCode = KeyCode - 48
    End Select
    keycode_to_keyascii = KeyCode
End Function

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Dim touches
    touches = keycode_to_keyascii(KeyCode)
    Select Case touches


    Case 97 To 122:    'les lettres
        'msgbox c'est la lettre(" & chr(touches) &")"

    Case 48 To 57:    'le pavé numerique
        MsgBox "c'est le nummero(" & Chr(touches) & ")"




        'le reste on les a pas touché le keycode reste le keycode
        'donc

    Case 9:    'la touche TAB


    Case 13    'la touche ENTER

        'les touchee fleches
    Case 37:    'fleche gauche
    Case 38:    'fleche heut
    Case 39:    'fleche droite
    Case 40:    'fleche basse

    Case 48     'la touche suppr
    Case 8      'la touche retour en arrier (back)
    Case 17     'touche CTRL
    Case 18     'touche ALT ou ALTGR

    Case 16     'touche majuscule


    Case 32    'touche espace
    Case 27    'touche ESCAPE
        'etc..etc...
    End Select
    MsgBox touches
End Sub
 
Dernière édition:

JOELJBJ

XLDnaute Nouveau
re
j'ai joint un fichier avec l'Userform pour le visualiser et le comprendre. Il y a un nombre conséquent de Textboxs et de combo. je voudrais simplement bloquer mon bouton valider quand certaines de mes textboxs et combo ne sont pas remplis. Style si txt1 et txt3 et txt6 et cbo1 et cbo5 sont vides = Btn Valider est false.
 

job75

XLDnaute Barbatruc
Bonsoir JOELJBJ, le fil,

Une solution très simple dans le fichier joint avec :

- dans l'UserForm, pour lancer le processus :
VB:
Private Sub UserForm_Initialize()
'ici les codes pour les ComBoBoxes
Application.OnTime 1, "Boutons_Enabled" 'lance le processus
End Sub
- dans le module standard Module1 :
Code:
Sub Boutons_Enabled()
While UserForms.Count
    With frmSaisie
        .BtnValider.Enabled = .CboContact <> "" And .CboModCasq <> "" And .TxtCasque <> "" And .CboEcheance <> "" And .TxtDateLivraison <> "" And .CboModePaiement <> ""
        .BtnEnregistrer.Enabled = .TxtSociete <> "" And .TxtAdresse <> "" And .TxtCodePost <> "" And .TxtVille <> "" And .TxtNomResponsable <> "" And .TxtEmail <> "" And .TxtTel <> ""
    End With
    DoEvents
Wend
End Sub
On aura compris que la macro tourne en arrière-plan...

A+
 

Pièces jointes

  • test(1).xlsm
    278.7 KB · Affichages: 5

job75

XLDnaute Barbatruc
En fait pas besoin de code dans l'UserForm.

Il suffit de compléter la macro d'ouverture, voyez ce fichier (2) :
VB:
Sub OuvreFrm()
Application.OnTime 1, "Boutons_Enabled" 'lance le processus
frmSaisie.Show
End Sub
 

Pièces jointes

  • test(2).xlsm
    278.5 KB · Affichages: 9

Eric C

XLDnaute Barbatruc
Re le fil
Bonsoir job75

Je n'ai pas repris le fichier de JOELJBJ car j'ai poursuivi (durant le film du soir ... pas évident pour un jeunot du Vba comme moi) sur le fichier presque similaire à celui de notre ami Robert que je voulais mettre en ligne hier soir. Avec la participation de notre ami Patrick, je suis parvenu à ce que je voulais, à savoir l'inefficacité du code si l'on effaçait le TextBox via sa sélection et l'utilisation de la touche "Espace".
Sur ce bonne nuit (quoique le second film n'est pas terminé) à toutes & à tous
@+ Eric c
 

Pièces jointes

  • Vérifier que certains TxtBox ou Cbo sont bien remplis - Touche Espace indispo -.xlsm
    27.5 KB · Affichages: 6

JOELJBJ

XLDnaute Nouveau
Bonsoir JOELJBJ, le fil,

Une solution très simple dans le fichier joint avec :

- dans l'UserForm, pour lancer le processus :
VB:
Private Sub UserForm_Initialize()
'ici les codes pour les ComBoBoxes
Application.OnTime 1, "Boutons_Enabled" 'lance le processus
End Sub
- dans le module standard Module1 :
Code:
Sub Boutons_Enabled()
While UserForms.Count
    With frmSaisie
        .BtnValider.Enabled = .CboContact <> "" And .CboModCasq <> "" And .TxtCasque <> "" And .CboEcheance <> "" And .TxtDateLivraison <> "" And .CboModePaiement <> ""
        .BtnEnregistrer.Enabled = .TxtSociete <> "" And .TxtAdresse <> "" And .TxtCodePost <> "" And .TxtVille <> "" And .TxtNomResponsable <> "" And .TxtEmail <> "" And .TxtTel <> ""
    End With
    DoEvents
Wend
End Sub
On aura compris que la macro tourne en arrière-plan...

A+
Bonjour job75, bonjour à tous. Cette solution est parfaite pour mon projet ! Ça marche très bien, je peux modifier les valeurs une fois le Btn Valider valide. C'est parfait pour moi!!! Les autres solutions proposées sont excellentes aussi et je les garde précieusement (ça peut toujours servir dans d'autres cas ...). Merci à tous pour votre aide, je vous aime... Bisous
 

job75

XLDnaute Barbatruc
Bonjour JOELJBJ, le forum,

Juste une remarque.

Les macros qui tournent en arrière-plan sont rarement utilisées sur XLD.

Pourtant, comme celle proposée, elles sont en général très simples et consomment assez peu de ressources.

Si vous allez dans le Gestionnaire des tâches vous verrez que beaucoup d'applications fonctionnent en arrière-plan, c'est donc une chose courante.

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 103
Messages
2 085 312
Membres
102 860
dernier inscrit
fredo67