VBA - vérifier contenu textbox avec contenu cellule
pftmarine
Messages postés
32
Date d'inscription
Statut
Membre
Dernière intervention
-
pftmarine Messages postés 32 Date d'inscription Statut Membre Dernière intervention -
pftmarine Messages postés 32 Date d'inscription Statut Membre Dernière intervention -
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 :
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 :
Merci pour votre aide !!
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 !!
A voir également:
- VBA - vérifier contenu textbox avec contenu cellule
- Fusionner deux cellules excel en gardant le contenu - Guide
- Le fichier à télécharger correspond au contenu brut d’un courrier électronique. de quel pays a été envoyé ce message ? - Guide
- Ce contenu n'est pas disponible facebook - Forum Réseaux sociaux
- Verifier compatibilite windows 11 - Guide
- Excel compter cellule couleur sans vba - Guide
8 réponses
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
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
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
Merci de votre aide
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
A+
Maurice
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
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
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
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...
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...
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
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
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
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
Col A : janvier
Février
...
Col B : 01/01/2014
01/02/2014
...
Col C : 31/01/2014
28/02/2014
Cdlt
Maurice a raison, peux tu donner un exemple ?
m@rina