VBA - vérifier contenu textbox avec contenu cellule

Fermé
pftmarine Messages postés 32 Date d'inscription mercredi 18 juin 2014 Statut Membre Dernière intervention 3 décembre 2016 - Modifié par pijaku le 10/12/2014 à 12:29
pftmarine Messages postés 32 Date d'inscription mercredi 18 juin 2014 Statut Membre Dernière intervention 3 décembre 2016 - 11 déc. 2014 à 11:05
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

m@rina Messages postés 22312 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 26 avril 2025 11 426
9 déc. 2014 à 18:37
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
pftmarine Messages postés 32 Date d'inscription mercredi 18 juin 2014 Statut Membre Dernière intervention 3 décembre 2016
9 déc. 2014 à 18:48
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
m@rina Messages postés 22312 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 26 avril 2025 11 426
9 déc. 2014 à 19:33
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
Bonjour
donne au moin un modele pour voir car la je ne comprent pas

A+
Maurice
0
pftmarine Messages postés 32 Date d'inscription mercredi 18 juin 2014 Statut Membre Dernière intervention 3 décembre 2016
10 déc. 2014 à 08:58
Bonjour,
Comme promis voici un extrait du fichier :
https://www.cjoint.com/?DLkjeKW4y0R

Merci !!!
0
pftmarine Messages postés 32 Date d'inscription mercredi 18 juin 2014 Statut Membre Dernière intervention 3 décembre 2016
9 déc. 2014 à 20:43
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
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
pftmarine Messages postés 32 Date d'inscription mercredi 18 juin 2014 Statut Membre Dernière intervention 3 décembre 2016
10 déc. 2014 à 12:28
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
Re
avec une Listview pour le choix des clients

http://cjoint.com/?3LkqePdMiw5

A+

Maurice
0
pftmarine Messages postés 32 Date d'inscription mercredi 18 juin 2014 Statut Membre Dernière intervention 3 décembre 2016
11 déc. 2014 à 09:11
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
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
pftmarine Messages postés 32 Date d'inscription mercredi 18 juin 2014 Statut Membre Dernière intervention 3 décembre 2016
11 déc. 2014 à 10:17
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
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
pftmarine Messages postés 32 Date d'inscription mercredi 18 juin 2014 Statut Membre Dernière intervention 3 décembre 2016
11 déc. 2014 à 11:05
Que vous manque t-il ?
0