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

10navettes.xlsm (92.70 Ko)

Bonjour,

ci-jointe version avec contrôle sur la date

13navettes1.xlsm (107.66 Ko)

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 Sub

Merci 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 Sub

Bonjour ...

@ 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 ?

Rechercher des sujets similaires à "formulaire date"