XL 2019 Comment comparer 2 dates vba

chris4785478547

XLDnaute Junior
Bonsoir à tous,

Pour savoir si une date se trouve dans un intervalle, j'ai choisi de les convertir en numérique grâce à DATEVALUE (à tort ou à raison...)
Mais ma comparaison ne marche pas, j'ai mis des espions pour déboguer et je constate que mes variables (DATEDEBUTNUMERIQUE et DATEFINNUMERIQUE) théoriquement traitées de la même façon ne sont pas égales (je travaille avec les deux dates =16/12/20)
Je joins une impression d'écran.
Merci par avance
procedure ComptageNbreDeLignesAInserer.png
 
Solution
Bonsoir @chris4785478547, le fil,

merci pour le code de ta carte Visa, et désolé pour le retard de ma réponse,
j'ai été pris par des affaires personnelles qui ont duré très longtemps.

c'est marrant, mais à chaque fois, « Rouen », ça m'rappelle la pauvre
Jeanne d'Arc qui a fini sur le bûcher ! c'est la conséquence de mes
anciens cours d'histoire, avec moult dates à retenir par cœur ; c'était
le 30 mai 1431, un p'tit peu avant l'arrivée du premier PC ! :rolleyes:

moi j'habite en France, pas loin d'Paris ; j'aime pas la grisaille de ma
banlieue ; j'préférerai de loin être en province, à la campagne, ou près
d'la mer et d'la plage, mais hélas, j'ai pas l'choix !!! 😭 😭 😭

je te remercie pour ton intention qu'on mange ensemble...

chris4785478547

XLDnaute Junior
Re:
=>Staple
Je viens de voir ta réponse pour les citations, merci.
Pbme: je n'arrive pas à trouver la syntaxe à mettre à la place de #11/31/2020# (par exemple pour éviter toute confusion entre mois et jour) pour compter non pas le nombre d'occurrences de cette date mais le nombre d'occurrences de dates comprises dans un intervalle.
Sinon je peux toujours revenir à la solution avec la boucle mais j'aimais bien ta solution
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonsoir

Le 31 novembre n'existe pas
(sauf peut-être dans la Twilight Zone ;))
En attendant, je propose une version "améliorée" de ma précédente macro.
VB:
Sub Test_ComptageLignes()
Dim TestDate$, X&
TestDate = InputBox("Saisir une date?", "Test", Date)
X = DateValue(TestDate)
ComptageLignes 1, X
End Sub
Private Sub ComptageLignes(Col As Long, vDate As Long)
MsgBox Application.CountIf(Range("A:A"), vDate)
End Sub
N'hésites pas si tu as des questions.
 

chris4785478547

XLDnaute Junior
Salut Staple,
Et Mince tout faux !
Merci à toi mais je voudrais, avant d'améliorer, arriver à compter le nombre de lignes qui contiennent des dates comprises dans un intervalle, entre (par exemple) le 1er décembre et le 15 décembre, je n'ai pas réussi de mon côté
Par ailleurs, j'ai toujours le problème des "DateLueSource"="00:00:00" je cherche du côté de mon fichier car sur le tien ca fonctionne
 
Dernière édition:

chris4785478547

XLDnaute Junior
Re:
j'utilise les macros suivantes:
VB:
Sub Test_ComptageLignes()
ComptageLignes #12/31/2020#
End Sub




Private Sub ComptageLignes(vDate As Date)
With Workbooks("test.xlsm").Worksheets("Feuil1")
    MsgBox Application.CountIf(Range("A:A"), vDate)
End With
End Sub
avec un fichier de données: (voir fichier joint)
et le message de la msgbox dit "0"
je n'y comprends plus rien, je pense que je vais y passer la nuit.
Nota: J'ai vu que quand on saisit une date au format français (jj/mm/aaaa) VBA corrige instantanément en mettant la date en question au format US (mm/jj/aaaa).Etonnant.
 

Pièces jointes

  • test.xlsm
    100.8 KB · Affichages: 12

Staple1600

XLDnaute Barbatruc
Re

Ca marchera mieux ainsi
VB:
Sub Test_ComptageLignes()
ComptageLignes #12/31/2020#
End Sub

Private Sub ComptageLignes(vDate As Date)
With ThisWorkbook.Worksheets("Feuil1")
MsgBox Application.CountIf(.Range("A:A"), vDate)
End With
End Sub
NB: La macro doit être dans le classeur où sont les dates
(ou alors il faudra modifier ma macro en conséquence)
Mais la, stop, soirée TV ;)
 

Staple1600

XLDnaute Barbatruc
Re

Ici modification pour tester avec le classeur toto.xlsm ouvert
Et la macro est dans un autre classeur
VB:
Sub Test_ComptageLignes_III()
ComptageLignes Workbooks("toto.xlsm"), #12/31/2020#
End Sub

Private Sub ComptageLignes(WBK As Workbook, vDate As Date)
With WBK.Worksheets("Feuil1")
MsgBox Application.CountIf(.Range("A:A"), vDate)
End With
End Sub
 

chris4785478547

XLDnaute Junior
Bonjour le fil, Staple,
Ta procédure fonctionne (message #36).
J'ai trouvé pourquoi j'avais des dates nulles !
C'est la fonction With qui ne marche pas ! Je ne sais pas si c'est que je l'utilise mal ou quoi mais je n'obtenais pas le résultat attendu: With Workbooks("Banque.xlsx").Worksheets("Feuille1")
Il s'est avéré que le programme n'allait pas chercher des données dans le classeur "Banque" mais dans le classeur actif !!!!!
Bref, ca marche beaucoup mieux
Merci encore de ton aide précieuse
 

chris4785478547

XLDnaute Junior
Bonsoir,

=> Staple
Eh bien je croyais t'avoir fait le feedback, mais en revenant ici pour vérifier je découvre que mon message #37 n'était pas parti.
Dis toi bien que je tâche d'être toujours correct et de ne jamais faire à autrui ce que je ne voudrais pas qu'on me fasse, et il est évident pour moi d'envoyer des feedbacks avant de commencer un autre sujet, car c'est la moindre des choses vis à vis de ceux qui se donnent la peine d'aider la communauté...
Au sujet de la boucle: Eh bien oui, il y a peut être quelque chose qui m'a échappé mais je t'ai dit à plusieurs reprises que cette solution me conviendrait très bien si je pouvais spécifier, non pas une date mais un intervalle de dates et comme tu ne m'as pas répondu sur ce sujet, j'ai pensé que tu n'avais pas la solution. Je n'allais pas non plus te harceler.
Merci encore.
 

Staple1600

XLDnaute Barbatruc
Re

Mon petit message dans ton autre fil n'était qu'une amicale invitation (avec une tite pointe d'ironie) à revenir ici donner quelques commentaires sur mon dernier bout de code VBA.
Ni plus, ni moins. ;)

Pour le reste, l'intervalle entre deux dates, comme au début du fil, datedébut et datefin étaient égales (16/12/2020), je suis allé au plus simple.

J'y retourne si désormais datedébut <> datefin
 

Statistiques des forums

Discussions
312 508
Messages
2 089 143
Membres
104 050
dernier inscrit
Pepito93100