compléter un code d'userform si incomplet

kinel

XLDnaute Occasionnel
Bonsoir à tous

Je voudrais forcer le remplissage complet d'un userform avant validation et dans le cas contraire afficher un msgbox invitant l'utilisateur à compléter toutes les cases

auriez vous une petite ligne de code à ajouter sur le bouton ok ?

merci de votre aide
Kinel
 

Grand Chaman Excel

XLDnaute Impliqué
Re : compléter un code d'userform si incomplet

Bonjour,

Voici un code simple qui devrait fonctionner et qui vérifie que tous les Textbox sont remplis.

VB:
Private Sub CommandButton1_Click()
    Dim bValid As Boolean
    Dim TB As Control
    
    'Validation du formulaire
    bValid = True   'valeur par défaut
    For Each TB In Me.Controls
        If TypeName(TB) = "TextBox" Then
            If TB.Value = "" Then bValid = False
        End If
    Next TB
    
    If Not bValid Then
        MsgBox "Formulaire incomplet !", vbExclamation
        Exit Sub    'si formulaire incomplet sortie de la fonction
    End If
    
    'Suite de la validation
    'etc....

End Sub

A+
 

kinel

XLDnaute Occasionnel
Re : compléter un code d'userform si incomplet

bonjour à tous

grand Chaman, si toutefois tu lis ce message, aurai tu une idée pour cette autre condition ?

si la cellule E, située sur la ligne reprise dans le ComboBox1, contient les caractères "A commander" afficher un msgbox d'avertissement puis fermer l 'userform

voici le code entier de validation de l'userform tel qu'il est depuis la première modif

Private Sub CommandButton1_Click()
Dim dest As Range
With Sheets("Feuil2")
Set dest = IIf(.Range("A6").Value = "", .Range("A6"), .Cells(Application.Rows.Count, 1).End(xlUp).Offset(1, 0))
End With
dest.Value = Worksheets(3).Range("l1") 'le
dest.Offset(0, 1).Value = Date 'date du retrait
dest.Offset(0, 2).Value = Time 'heure du retrait
dest.Offset(0, 3).Value = Worksheets(1).Range("I1") 'identifiant du professionel '
dest.Offset(0, 4).Value = Worksheets(3).Range("l2") 'a sorti
dest.Offset(0, 5).Value = Me.TextBox2.Text 'nombre de produits
dest.Offset(0, 6).Value = Me.ComboBox1.Text 'nom du produit
dest.Offset(0, 7).Value = Worksheets(3).Range("l3") 'pour
dest.Offset(0, 8).Value = Me.TextBox1.Text 'nom du patient
Sheets("Feuil1").Cells(Me.ComboBox1.ListIndex + 6, 4) = Sheets("Feuil1").Cells(Me.ComboBox1.ListIndex + 6, 4) - Me.TextBox2.Text
Dim bValid As Boolean
Dim TB As Control

'Validation du formulaire
bValid = True 'valeur par défaut
For Each TB In Me.Controls
If TypeName(TB) = "TextBox" Then
If TB.Value = "" Then bValid = False
End If
Next TB

If Not bValid Then
MsgBox "Formulaire incomplet ! veuillez remplir toutes les cases avant de valider", vbExclamation
Exit Sub 'si formulaire incomplet sortie de la fonction
End If
Unload Me
MsgBox "Servez vous maintenant"
ThisWorkbook.Save
End Sub
 

kinel

XLDnaute Occasionnel
Re : compléter un code d'userform si incomplet

j'ai pu placer cette ligne mais en cas d'ouverture du MsgBox il faudrait que sa validation ferme l'userform
j'ai bien essayé quelques possibilités mais je dois bien admettre mes lacunes

aurai tu une solution miracle ?
 

papypog

XLDnaute Occasionnel
Re : compléter un code d'userform si incomplet

Bonjour,

Voici un code simple qui devrait fonctionner et qui vérifie que tous les Textbox sont remplis.

VB:
Private Sub CommandButton1_Click()
    Dim bValid As Boolean
    Dim TB As Control
    
    'Validation du formulaire
    bValid = True   'valeur par défaut
    For Each TB In Me.Controls
        If TypeName(TB) = "TextBox" Then
            If TB.Value = "" Then bValid = False
        End If
    Next TB
    
    If Not bValid Then
        MsgBox "Formulaire incomplet !", vbExclamation
        Exit Sub    'si formulaire incomplet sortie de la fonction
    End If
    
    'Suite de la validation
    'etc....

End Sub

A+

Bonjour,

Très intéressant ce code que j'ai adapté (en rouge) à un formulaire comportant également des Combobox.
Voir ci-dessous.
Cela fonctionne parfaitement mais est-ce la bonne formulation ou existe t-il une méthode plus "élégante" ?

Private Sub CommandButton2_Click()
Dim bValid As Boolean
Dim TB As Control
Dim CB As Control
bValid = True 'valeur par défaut
For Each TB In Me.Controls
If TypeName(TB) = "TextBox" Then
If TB.Value = "" Then bValid = False
End If
Next TB
For Each CB In Me.Controls
If TypeName(CB) = "ComboBox" Then
If Cb.Value = "" Then bValid = False
End If
Next CB

If Not bValid Then
MsgBox "Formulaire incomplet !", vbExclamation
Exit Sub
End If
 

kinel

XLDnaute Occasionnel
Re : compléter un code d'userform si incomplet

bonjour à tous

merci à papypog ça fonctionne très bien
merci aussi à pierrot, j'ai bien essayé ta proposition, le msgbox s'affiche bien quand il faut mais je n'ai toujours pas la fermeture de l'userform malgré le "unload me" à la fin

??
 

Grand Chaman Excel

XLDnaute Impliqué
Re : compléter un code d'userform si incomplet

Bonjour Papydog, le forum,

Une version raccourci pour vérifier les Textbox et les Combobox :

VB:
Private Sub CommandButton1_Click()
    Dim bValid As Boolean
    Dim ctl As Control

    bValid = True 'valeur par défaut
    For Each ctl In Me.Controls
        If TypeName(ctl) = "TextBox" Or TypeName(ctl) = "ComboBox" Then
            If ctl.Value = "" Then bValid = False
        End If
    Next ctl

    If Not bValid Then
        MsgBox "Formulaire incomplet !", vbExclamation
        Exit Sub
    Else
        MsgBox "OK! "
    End If
End Sub

A+
 

Grand Chaman Excel

XLDnaute Impliqué
Re : compléter un code d'userform si incomplet

Bonjour kinel,

Pour compléter la proposition de Pierrot :

VB:
Private Sub CommandButton1_Click()
    Dim bValid As Boolean
    Dim ctl As Control
    Dim sRep As String

    bValid = True 'valeur par défaut
    For Each ctl In Me.Controls
        If TypeName(ctl) = "TextBox" Or TypeName(ctl) = "ComboBox" Then
            If ctl.Value = "" Then bValid = False
        End If
    Next ctl

    If Not bValid Then
        MsgBox "Formulaire incomplet !", vbExclamation
        Exit Sub
    Else
        MsgBox "OK! "
    End If
    
    If InStr(1, Sheets("Feuil1").Cells(Me.ComboBox1.ListIndex + 6, 5), "A commander") > 0 Then
        If MsgBox("Avertissement !", vbYesNo) = vbYes Then Unload Me
    End If
    
End Sub

À essayer...
 

Discussions similaires

Réponses
1
Affichages
292
Compte Supprimé 979
C
  • Question
Microsoft 365 Code VBA
Réponses
2
Affichages
312

Membres actuellement en ligne

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16