Resolu: Filtre Automatique sur Dates incorect, apres saisie formulaire

patapock

XLDnaute Nouveau
Bonsoir le Forum.
Je sèche sur une histoire de saisie de dates dans un formulaire.

J'ai un "Tableau1": Colonnes "Noms", "Date d’entrée", "Date de sortie"
Un bouton "Filtrer" qui masque les lignes dont la date d’entrée est antérieure a Aujourd'hui.
J'ai aussi un formulaire qui me permet de modifier les enregistrements de mon tableau.

Si les dates sont saisies dans la feuille, le filtrage se fait correctement
Si je modifie une date d’entrée en utilisant le formulaire (ou simplement, si j'affiche un enregistrement et que je valide le formulaire), lors du filtrage, l'enregistrement sera masque, même si la date d’entrée est postérieure a aujourd'hui.

Seul moyen de retrouver une situation normale: double cliquer sur la cellule de date, et sortir de la cellule.

Sans doute est ce du au fait que le formulaire passe la date en format texte?
J'ai essaye avec la fonction CDate, mais mon soucis, c'est que les cellules concernées peuvent aussi contenir le texte "N/A" et que je ne sais pas comment intégrer cette fonction dans la boucle du formulaire.

Ci-joint, mon fichier exemple, et ci-dessous, le code du formulaire.
Merci pour votre aide.

Option Explicit

Dim Ligne As Long

Private Sub ComboBox1_Change()
Dim Ctrl As Control
Dim Colonne As Integer

If Me.ComboBox1.ListIndex = -1 Then Exit Sub
With Sheets("Feuil1")
Ligne = Me.ComboBox1.ListIndex + 5 'Debut de la premiere ligne de donnees?
For Each Ctrl In Me.Controls
Colonne = Val(Ctrl.Tag)
If Colonne > 0 Then Ctrl = .Cells(Ligne, Colonne)
Next Ctrl
End With
End Sub


Private Sub CommandButton1_Click()
' Bouton VALIDATE
Dim dDate As Date
Dim Ctrl As Control
Dim Colonne As Integer
Dim Ligne As Long


If Me.ComboBox1.ListIndex = -1 Then Exit Sub
Ligne = Me.ComboBox1.ListIndex + 5 'Debut de la premiere ligne de donnees
With Sheets("Feuil1")
For Each Ctrl In Me.Controls
Colonne = Val(Ctrl.Tag)
If Colonne > 0 Then .Cells(Ligne, Colonne) = Ctrl

'Formater Dates
TextBox1.Value = Format(TextBox1, "[$-409]d/mmm/yyyy;@")
TextBox2.Value = Format(TextBox2, "[$-409]d/mmm/yyyy;@")

Next Ctrl
End With
End Sub

Private Sub UserForm_Initialize()

Dim J As Long

With Sheets("Feuil1")
For J = 5 To .Range("A" & Rows.Count).End(xlUp).Row ' 5 = Debut de la premiere ligne de donnees
Me.ComboBox1.AddItem .Range("A" & J)
Next J
End With


End Sub
 

Pièces jointes

  • Test_Dates.xls
    54 KB · Affichages: 35
  • Test_Dates.xls
    54 KB · Affichages: 38
  • Test_Dates.xls
    54 KB · Affichages: 34
Dernière édition:

patapock

XLDnaute Nouveau
Re : Filtre Automatique sur Dates incorect, apres saisie formulaire

Paritec,

tout d'abord, merci.
Votre code marche parfaitement.
Vous arrivez au résultat que je souhaitais, mais, en ayant fait table rase des codes que j'avais joint :rolleyes:
Je conçois qu'il vaille mieux construire sur des bases solides, surtout que outre le fait que ça marche, en plus, c'est propre!
Pour la partie filtre, j'ai compris.

Pour ce qui est du formulaire, je suis dans le brouillard complet (je débute le VBA), et je ne parviens pas a utiliser votre méthode pour l'appliquer a mon projet qui comporte plus de TextBox avec des dates, et les données débutant ailleurs sur ma feuille. Notamment, je ne parviens pas a alimenter ma ComboBox avec les données (Noms) existantes.

Pourrais-je vous demander de rajouter quelques commentaires destines au novice que je suis.

Cordialement
 

Paritec

XLDnaute Barbatruc
Re : Filtre Automatique sur Dates incorect, apres saisie formulaire

Re Patapock le forum
oui tu as vu j'ai fait le ménage !!!
j'avais modifié un peu le fichier dans la version 2 mais sans avoir vu ta réponse
tu veux savoir quoi?
a+
Papou:eek:
 

Pièces jointes

  • Patapock V2.xls
    57 KB · Affichages: 32

patapock

XLDnaute Nouveau
Re : Filtre Automatique sur Dates incorect, apres saisie formulaire

Dans ma feuille de calcul, les Noms qui alimentent le ComboBox du formulaire debutent en "A6". Je ne parviens pas a afficher la liste de noms dans le menu deroulant.

J'ai des cellules avec des dates dans les colonnes F, G, I, K, L, N, Q, S, V, Z, AF, AK, AM, AN, AO, AP, et donc, autant de TextBox dans mon formulaire.

En plus, quand je ne renseigne pas de date, je souhaite, a la place remplir les cellules concernées par "N/A", et des lors, CDate ne fonctionne plus.

Si besoin, je peux t'envoyer mon fichier par MP, mais tu risques d'y perdre ton latin.

Cordialement
 

patapock

XLDnaute Nouveau
Re : Filtre Automatique sur Dates incorect, apres saisie formulaire

Paritec,
J ai regarde tes commentaires mais il reste deux zones d'ombre:

Premier point:
Pourrais-tu m'expliquer les premier "3" des lignes
Feuil1.Cells(C1.List(C1.ListIndex, 3), 2) = CDate(T1)
Feuil1.Cells(C1.List(C1.ListIndex, 3), 3) = CDate(T2)​


Deuxieme point:
Pourquoi definis tu le tableau aa de "A5" a "D" alors que sur la feuille, le tableau va de A a C ?
Code:
Private Sub UserForm_Initialize()
    Dim aa, i& 'déclaration des variables
    With Feuil1 'avec la feuil1
        aa = .Range([COLOR=#ff0000]"A5:D"[/COLOR] & .Range("A" & Rows.Count).End(xlUp).Row) 'là la plage A5 et D et dernière ligne j'en fait un tableau aa
    End With 'fini avec la feuil1
    For i = 1 To UBound(aa) 'là pour i= 1  to la fin de mon tableau aa
        aa(i, 4) = i + 4  ' là je donne à la valeur de la colonne d de mon tableau le numéro de la ligne ou se trouve les données
    Next i 'prochain i
    C1.List = aa 'là je rempli la combobox c1
End Sub

Merci pour ton aide.
 

Paritec

XLDnaute Barbatruc
Re : Filtre Automatique sur Dates incorect, apres saisie formulaire

Re patapock le forum
bah il faut lire c'est simple
Feuil1.Cells(C1.List(C1.ListIndex, 3), 2) = CDate(T1)
la cellule Feuil1.cells( ligne C1.List(C1.ListIndex, 3), et colonne 3 ) = sera égale à la Date en T1
C1.List(C1.ListIndex, 3) cela c'est le numéro de la ligne ou est stocké les données en feuil1, c'est donc la quatrième colonne de la combobox C1
Pour la deuxième question, bah si tu avais lu la macro tu le saurais
tu as
Code:
For i = 1 To UBound(aa) 'là pour i= 1  to la fin de mon tableau aa
        aa(i, 4) = i + 4  ' là je donne à la valeur de la colonne d de  mon tableau le numéro de la ligne ou se trouve les données
    Next i 'prochain i
donc je fais une boucle et je rempli la colonne 4 de mon tableau aa avec le numéro de ligne donc il me faut une colonne de plus
a+
Papou
 
Dernière édition:

patapock

XLDnaute Nouveau
Re : Filtre Automatique sur Dates incorect, apres saisie formulaire

"Au royaume de aveugles les borgnes sont rois"
Je vais me pencher la dessus sous peu.

Encore merci Monsieur.

P.S. Toujours mon problème de vue, sans doute, mais comment marque t’on un sujet "Résolu" ?
 

Paritec

XLDnaute Barbatruc
Re : Filtre Automatique sur Dates incorect, apres saisie formulaire

Re Patapock le forum
tu retournes sur ton premier post et là tu cliques modifier le message, et ensuite tu vas modifier le titre et tu rajoutes résolu devant le titre
a+
Papou:eek:
 

Discussions similaires

Réponses
6
Affichages
130

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16