Formulaire & Date
Bonjour à tous,
J'ai besoin d'un peu d'aide.
Je fouille, je copie et j'arrive (parfois) à adapter ce que je peux trouver sur le forum mais là je bloque un peu !
J'ai un formulaire qui me permet de remplir un tableau.
Lorsqu'on appelle ce formulaire, la date du jour s'affiche directement dans le texbox prévu à cet effet.
Il est toujours possible de modifier cette date mais j'aimerais (si cela est possible) que l'utilisateur ne puisse pas y entrer une date supérieure à celle qui se trouve dans le tableau en cellule A9 ou alors qu'il soit averti que la date qui saisie est supérieure à cette cellule ! Le top aurait été que la date saisie permise soit comprise entre les cellules A5 et A9.
De plus, j'aurais aussi souhaité que l'utilisateur ne puisse pas valider le formulaire tant que toutes les box ne sont pas renseignées.
J'ai bien réussi avec les Textbox mais cela ne fonctionne pas (à tous les coups) avec les deux Listbox que j'ai nommé Expédition et RDV !
Merci pour votre aide ...
Ci-joint fichier
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
pour la vérifier si les controls son renseignés
For Each ctrl In Me.Controls
t = TypeName(ctrl)
Select Case t
Case "TextBox":
If ctrl.Value = "" Then
MsgBox "Vous devez renseigner la case " & ctrl.nme, vbExclamation, "Information":
Exit Sub
End If
Case "ComboBox":
If ctrl.ListIndex = -1 Then
MsgBox "Vous devez sélectionnner un item de " & ctrl.Name, vbExclamation, "Information"
Exit Sub
End If
Case "ListBox":
If ctrl.ListIndex = -1 Then
MsgBox "Vous devez sélectionnner un item de " & ctrl.Name, vbExclamation, "Information"
Exit Sub
End If
Case Else:
End Select
Next ctrl
pour les date tu pourrais utiliser un combobox au lieu d'un texbox,
Private Sub ComboBox1_Change()
ComboBox1.Value = Format(ComboBox1.Value, "dd-mmm-yyyy")
End Sub
Private Sub UserForm_initialize()
CBLien = "1"
CBLien.ListIndex = CBLien.ListCount - 1
ComboBox1.RowSource = "9!A5:A9"
ComboBox1.ListIndex = ComboBox1.ListCount - 1
TBDate = Format(Now, "dd/mm/yyyy")
End SubMerci pour vos réponses, je regarde tout ça et je reviens vers vous ...
@thev : ta solution fonctionne parfaitement ... top
@i20100 : pour le contrôles, ça ne fonctionne pas, en même temps je ne suis pas sûr ou je dois ajouter ce code
Je vais continuer à tester et aussi à explorer ta proposition concernant la date, ça me parait plutôt très intéressant comme solution !
re,
@i20100 : pour le contrôles, ça ne fonctionne pas, en même temps je ne suis pas sûr ou je dois ajouter ce code
c'est dans la macro BTValider_Click
Private Sub BTValider_Click()
For Each ctrl In Me.Controls
t = TypeName(ctrl)
Select Case t
Case "TextBox":
If ctrl.Value = "" Then
MsgBox "Vous devez renseigner la case " & ctrl.nme, vbExclamation, "Information":
Exit Sub
End If
Case "ComboBox":
If ctrl.ListIndex = -1 Then
MsgBox "Vous devez sélectionnner un item de " & ctrl.Name, vbExclamation, "Information"
Exit Sub
End If
Case "ListBox":
If ctrl.ListIndex = -1 Then
MsgBox "Vous devez sélectionnner un item de " & ctrl.Name, vbExclamation, "Information"
Exit Sub
End If
Case Else:
End Select
Next ctrl
'Remplir le tableau en fonction des valeurs et du nombre de palettes
Dim derlign As Integer
Dim NumLigne As Integer
If MsgBox("Confirmer l'ajout des données", vbYesNo, "Confirmation") = vbYes Then
ActiveSheet.Unprotect "6800"
derlign = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row + 1
Cells(derlign, 1) = CBLien
Cells(derlign, 2) = CDate(TBDate)
Cells(derlign, 3) = LBExpedition
Cells(derlign, 6) = TBNavette1
Cells(derlign, 8) = TBNbPalettes1
Cells(derlign, 9) = CBTransporteur
Cells(derlign, 12) = LBRDV
Cells(derlign, 13) = TBHArrivée
Cells(derlign, 14) = TBHDépart
'Effacer les TextBox
TBNavette1 = ""
TBNbPalettes1 = ""
CBLien = ""
' Trier par date
Range("A12:O53").Select
ActiveSheet.Sort.SortFields.Clear
ActiveSheet.Sort.SortFields.Add Key:=Range("B13:B53"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveSheet.Sort
.SetRange Range("A12:O53")
.Header = xlYes
.MatchCase = True
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
ActiveSheet.Protect "6800"
End If
Me.CBLien.SetFocus
End SubBonjour ...
@ i20100
Ok ta solution fonctionne, en fait j'avais bien placé le script mais j'avais une erreur car il manquait une lettre dans ta proposition
& ctrl.nme > & ctrl.Name
Private Sub BTValider_Click()
Case "TextBox":
If ctrl.Value = "" Then
MsgBox "Vous devez renseigner la case " & ctrl.nme, vbExclamation, "Information":Pour ta proposition de Combobox, je trouve l'idée vraiment intéressante mais en regardant de plus près le code, je m'aperçois que le rowsource est lié à l'onglet '9' (ComboBox1.RowSource = "9!A5:A9").
9 étant le numéro de la semaine, je crée donc un nouvel onglet chaque semaine, 10,11,12 ......
Il faudrait donc que le RowSource s'adapte à chaque nouvel onglet
Est-ce possible ?