Excel VBA - Recherche derniere date

Vanrob

XLDnaute Nouveau
Bonjour a tous,

J'ai un petit souci concernant une recherche de date.
J'ai une liste de date + heure (jj/mm/aaa h:hh) et je cherche a obtenir la derniere date pour le mois (par exemple) de janvier.
Ceci afin de pouvoir reperer a quelle ligne cela correspond, et donc, de selectionner les donnees (de la colonne et de celle(s) a cote) de la premiere date du mois jusque la derniere.

Il semblerait que le fait d'utiliser des dates complique la chose avec VBA etant donne les differents formats possibles de celles-ci.

Mes recherches m'ont menes a ce code:

Code:
Sub DernierJourDuMois()
Dim Annee As Date, Mois As Date
Dim NbJours As Byte, i As Byte
Dim Cell As Range

For Each Cell In Range("A2:A" & Range("A65536").End(xlUp).Row)
Annee = Year(CDate(Cell))
Mois = Month(CDate(Cell))
NbJours = Day(DateSerial(Year(CDate(Cell)), Month(CDate(Cell)) + 1, 0))

If Format((DateSerial(Annee, Mois, NbJours)), "dd/mm/yyyy") = CDate(Cell) Then
i=i+1
Cells(i, 3) = Cell
Cells(i, 4) = Cell.Offset(0, 1)
End If

Next Cell
End Sub

Qui regarde donc dans la colonne A les dates et selectionne la derniere de chaque moi pour les copier l'une a la suite de l'autre dans les colonnes C (et les donnees correspondantes en D)

D'ou je me demande: comment specifier de le faire que pour le mois de Janvier? (ou un autre mois) et avoir 1 donnees et non celles de chaque mois?
Je suppose qu'il faut effectuer une modification dans:
" For Each Cell In Range("A2:A" & Range("A65536").End(xlUp).Row) "
Mais etant debutant (j'utilisais l'enregistreur jusque maintenant ^^') je n'ai pas grand idee...

Aussi, pourquoi faire un code aussi "complique" alors qu'il existe une fonction find?
N'est-il pas possible de demander de trouver la derniere date enregistree pour le mois de janvier? (Ca me semble beaucoup plus simple de prime abord) Ou est-ce a cause du fait que ce soit une date?


En vous remerciant,

Vanrob



PS: Vous en pensez quoi du site du zero pour debuter en VBA? :p
Desole pour les accents, je suis sur un clavier qwerty (etant a l'etranger...)
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Excel VBA - Recherche derniere date

Bonjour Vanrob et bienvenue sur XLD :),

Un essai dans le classeur joint.
VB:
Sub DernierJourDuMois()
Dim Annee As Date, Mois As Date
Dim NbJours As Byte, i As Byte
Dim Cell As Range

Columns("c:d").ClearContents
Application.ScreenUpdating = False
For Each Cell In Range("A2:A" & Range("A65536").End(xlUp).Row)
  Annee = Year(CDate(Cell))
  Mois = Month(CDate(Cell))
  NbJours = Day(DateSerial(Year(CDate(Cell)), Month(CDate(Cell)) + 1, 0))
  If DateSerial(Annee, Mois, NbJours) = Int(Cell.Value2) Then
    i = i + 1
    Cells(i, 3) = Cell.Value2
    Cells(i, 4) = Cell.Offset(0, 1).Value    'ou bien = Int(Cell.Value2) si on ne veut pas des heures.
  End If
Next Cell
Application.ScreenUpdating = True
End Sub

[...] Aussi, pourquoi faire un code aussi "complique" alors qu'il existe une fonction find?
N'est-il pas possible de demander de trouver la dernière date enregistrée pour le mois de janvier? (Çà me semble beaucoup plus simple de prime abord) Ou est-ce a cause du fait que ce soit une date? [...]
A mon avis, oui.
 

Pièces jointes

  • Le classeur joint ( MERCI ! ) v1.xlsm
    29 KB · Affichages: 60
Dernière édition:

Vanrob

XLDnaute Nouveau
Re : Excel VBA - Recherche derniere date

Bonjour mapomme,

Merci!
En effet, cela fonctionne (comme celui que j'avais poste il me semble?)

Mais comment obtenir le resultat mais pour 1 mois?
L'idee est que sur une feuille j'aie Janvier (donc je fais tourner la macro pour avoir la derniere date du mois et extraire les donnees pour Janvier en disant de prendre tout ce qu'il y a entre la premiere date et "celle trouvee"), sur une autre feuille Fevrier, etc.

Est-ce qu'il n'y a pas un moyen de dire "For Each Cell" Before 1/2/2014 (pour janvier) ? :p
Sinon j'utiliserai cette macro en disant d'aller chercher la valeur trouvee dans la cellule (par exemple) C1 et de selectionner les donnees du debut du mois jusque la valeur trouvee C1.


Merci!
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Excel VBA - Recherche derniere date

(re),

En fait je n'avais pas testé votre macro car je n’avais pas vu le fichier que vous aviez joint pour illustrer votre question. Remarquez que je ne le vois pas encore.

Un fichier joint (sans donnée confidentielle) montrant ce que vous désirez obtenir est souvent un plus pour inciter d'éventuels répondeurs à s'intéresser à votre question. A ce propos, vous pouvez lire l'article de la charte du site "Demandeur point n°5 Lien supprimé)

Pour tester "janvier" par exemple, on peut indiquer une condition dans le corps de la boucle " (si mois(cell) = janvier et année(cell) = année-voulue alors... fin si ") mais sans fichier pour tester...
 

Vanrob

XLDnaute Nouveau
Re : Excel VBA - Recherche derniere date

Rebonjour,

J'avais bien lu. Mais je voulais decomposer la chose pour ne donner que l'endroit qui me posait probleme (d'ou juste le code).
Mais pour reprendre ton exemple, voici en fichier joint ce que ca donne.

J'ai donc une serie de valeur pour chaque mois (variable, il n'y en a pas toujours automatiquement le meme nombre), le but etant de cliquer sur un bouton present sur la feuille Juillet pour extraire les donnees correspondant au mois de Juillet! :)

D'ou, l'idee de chercher a reperer la derniere date d'un mois donne et de l'utiliser dans ce but.

Bonne apres-midi

Robin
 

Pièces jointes

  • Le classeur joint ( MERCI ! ) v2.xlsx
    33.6 KB · Affichages: 49

Vanrob

XLDnaute Nouveau
Re : Excel VBA - Recherche derniere date

Bonjour,

Vu la difficulte que peu presenter le fait de jouer avec des dates/heures, une alternative ne serait pas de mettre une ligne vide des le debut d'un nouveau mois?
Et ainsi dire a la macro de regarder de la ligne A2 (si cela commence en A2 comme sur le fichier joint) jusqu'a la prochaine ligne vide ( "ligne1" ?), puis pour le moi suivant, de regarder la ligne trouvee precedemment ( "ligne1" ) jusque la ligne vide suivante. Et ainsi de suite?

Bien a vous,

Robin
 

Discussions similaires

Réponses
21
Affichages
291
Réponses
1
Affichages
168

Membres actuellement en ligne

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 187
dernier inscrit
ebenhamel