Conditions II

Hello World !

Mon fichier comporte plusieurs form dont le but est d'y inserer des données dans des texbox, certaines plus importantes que d'autre importantes (comme le nom, la place de stockage, etc) et d'autres moins, comme pour s'inscrire sur un forum par exemple.

étant donné que certain textbox sont "obligatoire" j'aimerais faire des conditions (if) en "chaine", mais, manque de connaissances et d'imagination, j'ai un peu de peine...

par exemple: j'ai cinq textbox dans une form, le premier est pour le nom, le deuxième pour le prénom, le troisième pour l'adresse, le quatrième pour la ville et le cinquième pour le sexe.

Dans mon fichier je n'ai besoin que du nom, du prénom et du sexe, le reste m'importe peu mais peut etre utile.

si un utilisateur vient et ne tape que son nom et son adresse, j'aimerais qu'un message apparaisse en expliquant: "Veuillez entrer votre prénom et votre sexe svp". en cliquant sur ok, la page ou ses informations déjà inseré (donc son nom et son adresse) ré-apparaissent avec les champs obligatoire (Prénom et sexe) en rouge.

si l'utilisateur ne met rien, j'aimerais un message qui explique: "Veuillez entrer votre nom, prénom et votre sexe svp")

si l'utilisateur met juste le nom et prénom, j'aimerais un message qui explique:("Veuillez entrer votre sexe svp")

et enfin lorsque l'utilisateur a bien remplis le formulaire la fenetre se ferme et les données sont enregistré dans une feuille.

alors

Euh le fichier...? Avec l'userform et les textbox correspondant, ce serait bien !

dans l'exemple ce n'est pas quelque chose que j'ai fais mais je penses qu'avec les expliquations (déjà) fournit ca devrait etre suffisant.

12export-f.zip (117.49 Ko)

C'est bon je comprends le principe. Maintenant, dans ton fichier joint, quels sont les textbox obligatoires et lesquels ne le sont pas ?

Name, CAS Number, Suplplier, Storage place, current stock et bar-code

Mais sans trop vous embêter le but est de savoir la manoeuvre, le reste je pourrai m'en occuper seul normalement.

Vu qu'il fait pas trop chaud ce matin, je me suis pris la peine de faire un fichier.

J'ai mis 2-3 explications dans le code :

Option Explicit

Private Sub CommandButton1_Click()
Dim txtbox As Control
Dim tablo
Dim chaine As String
Dim i As Byte, cpt As Byte

ReDim tablo(1 To 10)    'la dimension maximale (10) du tableau est arbitraire. Il faut juste que la taille soit > au nombre de textbox obligatoires
If TxtBnom = "" Or TxtBprenom = "" Or TxtBsexe = "" Then    'si les champs obligatoires sont vides
For Each txtbox In Me.Controls    'ici on boucle sur les contrôles de l'userform
If TypeOf txtbox Is MSForms.TextBox Then    'si le contrôle est de type TextBox

                'dans la ligne suivante, les textbox obligatoires sont identifiés par le début de leur nom (TxtB...)
                'il est donc important de différencier les textbox obligatoires de ceux qui ne le sont pas
                'en choisissant un début de nom différent par exemple
If txtbox.Name Like "TxtB*" Then    'et si le nom du TextBox commence par "TxtB*"
                    If txtbox.Object.Value = "" Then
                        txtbox.BackColor = RGB(255, 0, 0)    'couleur rouge
                        cpt = cpt + 1    'on incrémente un compteur pour compter le nombre champs obligatoires vides
                        ReDim Preserve tablo(cpt - 1)
                        tablo(cpt - 1) = Mid(txtbox.Name, 5, Len(txtbox.Name) - 4)    'on essaie de mettre le nom du textbox dans une variable tableau
                    Else
                        txtbox.BackColor = RGB(255, 255, 255)    'couleur blanche
                    End If
                End If
            End If
        Next txtbox
    End If

    'on identifie ensuite les champs obligatoires à remplir
    If cpt > 0 Then
        For i = 1 To cpt
            chaine = chaine & vbCrLf & tablo(i - 1)
        Next i
        chaine = Mid(chaine, 3, Len(chaine) - 2)
        MsgBox "Veuillez remplir les champs suivants SVP :" & vbCrLf & chaine, vbInformation
    End If

End Sub

Salut vba-new, merci pour la partie de conde et le fichier !

par contre lorsque j'essai de l'inserer dans mon form il m'indique une erreur (1004), donc en gros, tout est possible... pourtant les changement apporté m'on l'air juste...

En Faite non j'ai rien dis, je peux plus faire aller le programme par visual b. mais sinon il fonctionne ! quel naze !

-- 09 Juil 2010, 12:23 --

bon, après quelques essais, mes textbox deviennent rouge lorsqu'il n'ont rien...par contre maintenant il n'enregistre plus les données lorsque c'est remplit...

Pourrai tu m'aider vba-new ?

je met aussi le code modifié, je penses encore avoir fais une erreur... (Surement)

Option Explicit

Private Sub BtnSave_Click()

Dim txtbox As Control
Dim tablo
Dim chaine As String
Dim i As Byte, cpt As Byte

ReDim tablo(1 To 10)    'la dimension maximale (10) du tableau est arbitraire. Il faut juste que la taille soit > au nombre de textbox obligatoires
If TxtZName = "" Or TxtZSupplier = "" Or TxtZStoPlace = "" Or TxtZBC = "" Or TxtZPName = "" Or TxtZWBS = "" Or TxtZGL = "" Or TxtZCC = "" Then 'si les champs obligatoires sont vides
    For Each txtbox In Me.Controls    'ici on boucle sur les contrôles de l'userform
        If TypeOf txtbox Is MSForms.TextBox Then    'si le contrôle est de type TextBox
                'dans la ligne suivante, les textbox obligatoires sont identifiés par le début de leur nom (TxtZ...)
                'il est donc important de différencier les textbox obligatoires de ceux qui ne le sont pas
                'en choisissant un début de nom différent par exemple
                If txtbox.Name Like "TxtZ*" Then    'et si le nom du TextBox commence par "TxtZ*"
                    If txtbox.Object.Value = "" Then
                        txtbox.BackColor = RGB(255, 0, 0)    'couleur rouge
                        cpt = cpt + 1    'on incrémente un compteur pour compter le nombre champs obligatoires vides
                        ReDim Preserve tablo(cpt - 1)
                        tablo(cpt - 1) = Mid(txtbox.Name, 5, Len(txtbox.Name) - 4)    'on essaie de mettre le nom du textbox dans une variable tableau
                    Else
                        txtbox.BackColor = RGB(255, 255, 255)    'couleur blanche

                            With Sheets("Movements")
                             Set DerCel = .Range("B65536").End(xlUp)(2)
                             .Cells(DerCel.Row, 2).Value = Date
                             .Cells(DerCel.Row, 3).Value = Time
                             .Cells(DerCel.Row, 4).Value = Me.TxtZName
                             .Cells(DerCel.Row, 5).Value = Me.TbxCAS
                             .Cells(DerCel.Row, 6).Value = Me.TxtZSupplier
                             .Cells(DerCel.Row, 7).Value = Me.TbxNSupplier
                             .Cells(DerCel.Row, 8).Value = Me.TbxStock
                             .Cells(DerCel.Row, 9).Value = Me.TxtZBC
                             .Cells(DerCel.Row, 10).Value = Me.TxtZStoPlace
                             .Cells(DerCel.Row, 11).Value = Me.TbxURL
                             .Cells(DerCel.Row, 12).Value = Me.TxtZPName
                             .Cells(DerCel.Row, 13).Value = Me.TxtZWBS
                             .Cells(DerCel.Row, 14).Value = Me.TxtZGL
                             .Cells(DerCel.Row, 15).Value = Me.TxtZCC
                            End With

                            With Sheets("sale")
                                Set Sale = Sheets("Sale").Range("B65536").End(xlUp)(2)
                                .Cells(Sale.Row, 2).Value = Date
                                .Cells(Sale.Row, 3).Value = Time
                                .Cells(Sale.Row, 4).Value = Me.TxtZName
                                .Cells(Sale.Row, 5).Value = Me.TbxCAS
                                .Cells(Sale.Row, 6).Value = Me.TxtZSupplier
                                .Cells(Sale.Row, 7).Value = Me.TbxNSupplier
                                .Cells(Sale.Row, 8).Value = Me.TbxStock
                                .Cells(Sale.Row, 9).Value = Me.TxtZBC
                                .Cells(Sale.Row, 10).Value = Me.TxtZStoPlace
                                .Cells(Sale.Row, 11).Value = Me.TbxURL
                                .Cells(Sale.Row, 12).Value = Me.TxtZName
                                .Cells(Sale.Row, 13).Value = Me.TxtZWBS
                                .Cells(Sale.Row, 14).Value = Me.TxtZGL
                                .Cells(Sale.Row, 15).Value = Me.TxtZCC
                            End With
                            Unload Me
                         End If
                End If
        End If
    Next txtbox
End If
If cpt > 0 Then
        For i = 1 To cpt
            chaine = chaine & vbCrLf & tablo(i - 1)
        Next i
        chaine = Mid(chaine, 3, Len(chaine) - 2)
        MsgBox "Veuillez remplir les champs suivants SVP :" & vbCrLf & chaine, vbInformation
    End If
End Sub

Essaie comme ça plutôt :

Private Sub BtnSave_Click()

Dim txtbox As Control
Dim tablo
Dim chaine As String
Dim i As Byte, cpt As Byte

ReDim tablo(1 To 10)    'la dimension maximale (10) du tableau est arbitraire. Il faut juste que la taille soit > au nombre de textbox obligatoires
If TxtZName = "" Or TxtZSupplier = "" Or TxtZStoPlace = "" Or TxtZBC = "" Or TxtZPName = "" Or TxtZWBS = "" Or TxtZGL = "" Or TxtZCC = "" Then    'si les champs obligatoires sont vides
For Each txtbox In Me.Controls    'ici on boucle sur les contrôles de l'userform
If TypeOf txtbox Is MSForms.TextBox Then    'si le contrôle est de type TextBox
                'dans la ligne suivante, les textbox obligatoires sont identifiés par le début de leur nom (TxtZ...)
                'il est donc important de différencier les textbox obligatoires de ceux qui ne le sont pas
                'en choisissant un début de nom différent par exemple
If txtbox.Name Like "TxtZ*" Then    'et si le nom du TextBox commence par "TxtZ*"
                    If txtbox.Object.Value = "" Then
                        txtbox.BackColor = RGB(255, 0, 0)    'couleur rouge
                        cpt = cpt + 1    'on incrémente un compteur pour compter le nombre champs obligatoires vides
                        ReDim Preserve tablo(cpt - 1)
                        tablo(cpt - 1) = Mid(txtbox.Name, 5, Len(txtbox.Name) - 4)    'on essaie de mettre le nom du textbox dans une variable tableau
                    Else
                        txtbox.BackColor = RGB(255, 255, 255)    'couleur blanche

                    End If
                End If
            End If
        Next txtbox
    End If
    If cpt > 0 Then
        For i = 1 To cpt
            chaine = chaine & vbCrLf & tablo(i - 1)
        Next i
        chaine = Mid(chaine, 3, Len(chaine) - 2)
        MsgBox "Veuillez remplir les champs suivants SVP :" & vbCrLf & chaine, vbInformation
    Else
        With Sheets("Movements")
            Set DerCel = .Range("B65536").End(xlUp)(2)
            .Cells(DerCel.Row, 2).Value = Date
            .Cells(DerCel.Row, 3).Value = Time
            .Cells(DerCel.Row, 4).Value = Me.TxtZName
            .Cells(DerCel.Row, 5).Value = Me.TbxCAS
            .Cells(DerCel.Row, 6).Value = Me.TxtZSupplier
            .Cells(DerCel.Row, 7).Value = Me.TbxNSupplier
            .Cells(DerCel.Row, 8).Value = Me.TbxStock
            .Cells(DerCel.Row, 9).Value = Me.TxtZBC
            .Cells(DerCel.Row, 10).Value = Me.TxtZStoPlace
            .Cells(DerCel.Row, 11).Value = Me.TbxURL
            .Cells(DerCel.Row, 12).Value = Me.TxtZPName
            .Cells(DerCel.Row, 13).Value = Me.TxtZWBS
            .Cells(DerCel.Row, 14).Value = Me.TxtZGL
            .Cells(DerCel.Row, 15).Value = Me.TxtZCC
        End With

        With Sheets("sale")
            Set Sale = Sheets("Sale").Range("B65536").End(xlUp)(2)
            .Cells(Sale.Row, 2).Value = Date
            .Cells(Sale.Row, 3).Value = Time
            .Cells(Sale.Row, 4).Value = Me.TxtZName
            .Cells(Sale.Row, 5).Value = Me.TbxCAS
            .Cells(Sale.Row, 6).Value = Me.TxtZSupplier
            .Cells(Sale.Row, 7).Value = Me.TbxNSupplier
            .Cells(Sale.Row, 8).Value = Me.TbxStock
            .Cells(Sale.Row, 9).Value = Me.TxtZBC
            .Cells(Sale.Row, 10).Value = Me.TxtZStoPlace
            .Cells(Sale.Row, 11).Value = Me.TbxURL
            .Cells(Sale.Row, 12).Value = Me.TxtZName
            .Cells(Sale.Row, 13).Value = Me.TxtZWBS
            .Cells(Sale.Row, 14).Value = Me.TxtZGL
            .Cells(Sale.Row, 15).Value = Me.TxtZCC
        End With
        Unload Me
    End If
End Sub

CA MARCHE !

mais qu'ai-je fais de faux ?

Tu avais mal placé la partie de code suivant :

.
.
.
 With Sheets("Movements")
                             Set DerCel = .Range("B65536").End(xlUp)(2)
                             .Cells(DerCel.Row, 2).Value = Date
                             .Cells(DerCel.Row, 3).Value = Time
                             .Cells(DerCel.Row, 4).Value = Me.TxtZName
                             .Cells(DerCel.Row, 5).Value = Me.TbxCAS
                             .Cells(DerCel.Row, 6).Value = Me.TxtZSupplier
                             .Cells(DerCel.Row, 7).Value = Me.TbxNSupplier
                             .Cells(DerCel.Row, 8).Value = Me.TbxStock
                             .Cells(DerCel.Row, 9).Value = Me.TxtZBC
                             .Cells(DerCel.Row, 10).Value = Me.TxtZStoPlace
                             .Cells(DerCel.Row, 11).Value = Me.TbxURL
                             .Cells(DerCel.Row, 12).Value = Me.TxtZPName
                             .Cells(DerCel.Row, 13).Value = Me.TxtZWBS
                             .Cells(DerCel.Row, 14).Value = Me.TxtZGL
                             .Cells(DerCel.Row, 15).Value = Me.TxtZCC
                            End With

                            With Sheets("sale")
                                Set Sale = Sheets("Sale").Range("B65536").End(xlUp)(2)
                                .Cells(Sale.Row, 2).Value = Date
                                .Cells(Sale.Row, 3).Value = Time
                                .Cells(Sale.Row, 4).Value = Me.TxtZName
                                .Cells(Sale.Row, 5).Value = Me.TbxCAS
                                .Cells(Sale.Row, 6).Value = Me.TxtZSupplier
                                .Cells(Sale.Row, 7).Value = Me.TbxNSupplier
                                .Cells(Sale.Row, 8).Value = Me.TbxStock
                                .Cells(Sale.Row, 9).Value = Me.TxtZBC
                                .Cells(Sale.Row, 10).Value = Me.TxtZStoPlace
                                .Cells(Sale.Row, 11).Value = Me.TbxURL
                                .Cells(Sale.Row, 12).Value = Me.TxtZName
                                .Cells(Sale.Row, 13).Value = Me.TxtZWBS
                                .Cells(Sale.Row, 14).Value = Me.TxtZGL
                                .Cells(Sale.Row, 15).Value = Me.TxtZCC
                            End With
                            Unload Me
.
.
.

La partie suivante :

If TxtZName = "" Or TxtZSupplier = "" Or  TxtZStoPlace = ""  Or TxtZBC = "" Or TxtZPName = "" Or TxtZWBS = "" Or  TxtZGL = ""  Or TxtZCC = "" Then    'si les champs obligatoires sont vides
For Each txtbox In Me.Controls    'ici on boucle sur les contrôles de l'userform
If TypeOf txtbox Is MSForms.TextBox Then    'si le contrôle est de type TextBox
               'dans la ligne suivante, les textbox obligatoires sont identifiés par le début de leur nom (TxtZ...)
               'il est donc important de différencier les textbox obligatoires de ceux qui ne le sont pas
               'en choisissant un début de nom différent par exemple
If txtbox.Name Like "TxtZ*" Then    'et si le nom du TextBox commence par "TxtZ*"
                   If txtbox.Object.Value = "" Then
                        txtbox.BackColor = RGB(255, 0, 0)    'couleur rouge
                       cpt = cpt + 1    'on incrémente un compteur pour compter le nombre champs obligatoires vides
                       ReDim Preserve tablo(cpt - 1)
                        tablo(cpt - 1) = Mid(txtbox.Name, 5, Len(txtbox.Name) - 4)    'on essaie de mettre le nom du textbox dans une variable tableau
                   Else
                        txtbox.BackColor = RGB(255, 255, 255)    'couleur blanche

                    End If
                End If
            End If
        Next txtbox
    End If

sert juste à détecter quels sont les textbox obligatoires vides

C'est cette partie qui traite l'information :

If cpt > 0 Then
        For i = 1 To cpt
            chaine = chaine & vbCrLf & tablo(i - 1)
        Next i
        chaine = Mid(chaine, 3, Len(chaine) - 2)
        MsgBox "Veuillez remplir les champs suivants SVP :" & vbCrLf & chaine, vbInformation
    End If

Ah voilà ! merci encore vba-new !

Rechercher des sujets similaires à "conditions"