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.
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 SubSalut 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 SubEssaie 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 SubCA 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 Ifsert 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 IfAh voilà ! merci encore vba-new !