VBA - vérifier contenu textbox avec contenu cellule

Bonsoir,

J'ai crée un formulaire de saisie pour les usagers qui se présente dans mon établissement. J'ai un onglet par mois et un formulaire par onglet.
Dans ce formulaire je dois saisir notamment la date d'entrée et de sortie (+infos usagers).
Dans mon code je vérifie avant validation que toutes les textbox soient renseignées et pour les dates d'entrées et de sorties je vérifie également que celle-ci soient bien dans la période

ex. si je saisie une arrivée en janvier 2014 j'ai le code suivant :

    'Vérification que les dates sont comprises dans la période
    If TextBox1 < #1/1/2014# Or TextBox1 > #1/31/2014# Then
    MsgBox ("Veuillez indiquer une date d'entrée comprise entre le 01/01/2014 et le 31/01/2014")
    Exit Sub
    End If
    
    If TextBox3 <> "" Then
        If TextBox3 < #1/1/2014# Or TextBox3 > #1/31/2014# Then
        MsgBox ("Veuillez indiquer une date de sortie comprise entre le 01/01/2014 et le 31/01/2014")
        Exit Sub
        End If


Mon problème c'est que ce classeur sera utilisé tous les ans et que dés 2015 il faudra revoir le code or ce ne sera plus moi qui gérerais ça. Je voudrais donc que mon code vérifie la date en se reportant au contenu d'une cellule dans la feuille "Liste" (qui contient toutes les données pour listes déroulantes...) pour que l'utilisateur change seulement l'année dans le tableau "Liste".

J'ai testé ce code mais il ne fonctionne pas :

    'Vérification que les dates sont comprises dans la période
    If TextBox1.Value < Sheets("Liste").Range("E28") Or TextBox1.Value > Sheets("Liste").Range("F28") Then
    MsgBox ("Veuillez indiquer une date d'entrée comprise entre le 01/01/2014 et le 31/01/2014")
    Exit Sub
    End If
    
    If TextBox3 <> "" Then
        If TextBox3.Value < Sheets("Liste").Range("E28") Or TextBox3.Value > Sheets("Liste").Range("F28") Then
        MsgBox ("Veuillez indiquer une date de sortie comprise entre le 01/01/2014 et le 31/01/2014")
        Exit Sub
        End If


Merci pour votre aide !!

8 réponses

  1. Modérateur
    Bonjour,

    Est-ce que la date change en fonction de l'année ? Je veux dire : est ce que c'est toujours du 1er janvier au 31 décembre de l'année en cours ?

    m@rina
    0
    1. Oui c'est du 1er janvier au 31 décembre mais comme j'ai dis mon formulaire et prévu par mois donc il faut sur le code du formulaire de janvier qu'il vérifie la date du 1er janvier N au 31 janvier N... (Au final j'ai 12 formulaire donc 12 codes différents..). Du coup mon tableau pour les dates et comme ceci :

      Col A : janvier
      Février
      ...
      Col B : 01/01/2014
      01/02/2014
      ...
      Col C : 31/01/2014
      28/02/2014

      Cdlt
      0
    2. Modérateur
      Effectivement pas besoin de faire 12 formulaires. Il faut créer des variables qui seront le mois et l'année en cours, et utiliser ces variables.

      Maurice a raison, peux tu donner un exemple ?

      m@rina
      0
  2. Bonjour
    donne au moin un modele pour voir car la je ne comprent pas

    A+
    Maurice
    0
  3. Je vous envoi un exemple demain matin depuis le bureau. Par contre j'ai 12 formulaires car c'est la seule solution que j'ai trouve pour que les contenu des textbox se reporte dans le bonne onglet (je ne m'y connais pas hyper bien en macro...).

    Merci de votre aide
    0
    1. Bonjour

      deja les fonction date ne marche pas
      Voila un macro pour la gestion des date
      mettre l'année en "A1" et lancer la macro
      Sub NombJourMois()
      Application.ScreenUpdating = False
      Annee = Range("A1").Value
         For Mois = 1 To 12
            Jour = 1
            Range("A" & Mois + 1).Value = UCase(Format((DateSerial(Annee, Mois, Jour)), "mmmm"))
            Range("B" & Mois + 1).Value = Format((DateSerial(Annee, Mois, Jour)), "m/d/yyyy")
            For Jour = 1 To 31
               VarMois = Val(Format((DateSerial(Annee, Mois, Jour)), "m"))
               If Mois <> VarMois Then
                     Exit For
                  Else
                     Range("C" & Mois + 1).Value = Format((DateSerial(Annee, Mois, Jour)), "m/d/yyyy")
               End If
            Next
         Next
      Application.ScreenUpdating = False
      End Sub
      


      A+
      Maurice
      0
      1. Merci pour cette réponse cela marche. Effectivement c'est mieux d'avoir ce tableau là automatisé aussi mais je bloque surtout pour la vérification lors de la saisie du formulaire... Avez vous pu trouver une solution ? Cdlt
        0
    2. Bonjour
      Voila un debut de ton projet avec ceation des mois

      http://cjoint.com/?3Lko1om7Qow

      regarde bien si ca te va
      le decor on le fait a la fin du projet HI

      A+

      Maurice
      0
      1. Re
        avec une Listview pour le choix des clients

        http://cjoint.com/?3LkqePdMiw5

        A+

        Maurice
        0
        1. Bonjour,
          Je vous remercie pour tout votre travail !!

          Je vous explique par contre ma situation, je dois peaufiner ceci pour dans 15 jours car après mon contrat se termine et j'ai déjà un classeur bien rempli qui est créé. Celui-ci contient énormément de feuilles et de données et les tableaux par mois alimentent beaucoup de feuilles permettant d'établir des statistiques... je n'ai donc malheureusement pas le temps de tout reprendre et le fait de supprimer et recréer les feuilles chaque année m'embête pour la liaison avec la stats. C'est pour ça que je demandais juste une petite solution pour vérifier la date sans repasser par le changement du code chaque année.

          Cela dit encore merci pour le temps que vous m'avez consacré, je garde tout pour la suite (je pense que ça me servira bien un jour de toute façon) !! Désolé si je me suis mal expliquée dés le départ...
          0
      2. Bonjour
        pour ton probleme tu a pas laissez le code dans ton modele

        sinon voila ma derniere version qui peux te servire un jour

        http://cjoint.com/?3LlkjV37d8G

        Bon courage

        A+
        Maurice
        0
        1. Merci !! C'est vraiment bien d'empêche ! Je suis déçue de ne pas avoir le temps de travailler à partir de ça...

          Pour le code il y est bien, c'est celui-ci :

          'Pour la sélection du nom et du prénom (fonctionne avec la ComboBox6 ci-dessous)
          Private Sub ComboBox1_Change()
          Dim DerLig As Long, Lig As Long, VDate As String, VProd As String
          ' On utilise les collections pour éviter les doublons
          Dim TabProd As New Collection
          ' Effacer les valeurs de la combobox6 - Prénoms
          Me.ComboBox6.Clear
          ' Pour chaque ligne de la feuille
          With Sheets("Données")
          DerLig = .Range("A" & Rows.Count).End(xlUp).Row
          For Lig = 3 To DerLig
          VDate = .Range("A" & Lig).Value
          VProd = .Range("B" & Lig).Value
          If VDate = Me.ComboBox1 Then
          On Error Resume Next
          TabProd.Add VProd, VProd
          ' Si aucune erreur lors de l'ajout dans la collection
          ' On ajoute la valeur dans le combobox
          If Err.Number = 0 Then Me.ComboBox6.AddItem VProd
          End If
          Next

          End With

          End Sub

          Private Sub ComboBox3_Change()

          End Sub

          Private Sub Frame3_Click()

          End Sub

          'Pour le formulaire
          'Pour la sélection du nom et du prénom (fonctionne avec la ComboBox1 ci-dessus)
          Sub UserForm_Initialize()
          Dim J As Long
          Dim I As Integer
          Dim DerLig As Long, Lig As Long, VDate As String
          ' On utilise les collections pour éviter les doublons
          Dim TabDate As New Collection
          ' Pour chaque ligne de la feuille
          With Sheets("Données")
          DerLig = .Range("A" & Rows.Count).End(xlUp).Row
          For Lig = 3 To DerLig
          VDate = .Range("A" & Lig).Value
          On Error Resume Next
          TabDate.Add VDate, VDate
          ' Si aucune erreur lors de l'ajout dans la collection
          If Err.Number = 0 Then
          ' On ajoute la valeur dans le combobox
          Me.ComboBox1.AddItem VDate
          End If
          Next
          End With

          End Sub

          'Pour le bouton Valider
          Sub cmdOK_Click()

          Dim rien
          Dim L As Integer

          'Vérification que tous les champs sont bien renseignés
          'Le nom
          If ComboBox1 = rien Then
          MsgBox ("Veuillez indiquer le nom avant de valider")
          Exit Sub
          End If

          'Le prénom
          If ComboBox6 = rien Then
          MsgBox ("Veuillez indiquer le prénom avant de valider")
          Exit Sub
          End If

          'Vérification que la date d'entrée est renseignée
          If TextBox1 = rien Then
          MsgBox "Veuillez indiquer une date d'entrée avant de valider", 0, "Information"
          Exit Sub
          End If

          'Vérification que les dates sont comprises dans la périod
          End If

          'Enregistrement des données saisies dans tableau
          L = Sheets("01").Range("a1000").End(xlUp).Row + 1 'Pour placer le nouvel enregistrement à la première ligne de tableau non vide
          Range("A" & L).Value = ComboBox1 'Nom
          Range("B" & L).Value = ComboBox6 'Prénom
          Range("H" & L).Value = TextBox1 'Date d'entrée
          Range("I" & L).Value = TextBox3 'Date de sortie

          Unload Me
          End Sub
          'Pour le bouton Annuler
          Private Sub cmdAnnuler_Click()
          Unload Me
          End Sub

          Merci !
          Cdlt
          0
      3. Re
        si la listeView fonctionne sur ton ordi
        deja
        tu transfert Userform dans ton fichier
        je ne peux pas aller plus loing car il me manque pas mal de truc

        A=
        Maurice
        0
        1. Que vous manque t-il ?
          0