Prendre uniquement la dernière ligne d'une journée

Fermé
Yeezuus Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   -  
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

J'ai un fichier qui contient plusieurs valeurs. Chaque ligne correspondant à un moment de la journée (08.09.10 21:46 qui se situe dans la colonne A)

J'ai donc :
08.09.10 23:56
08.09.10 23:57
08.09.10 23:58
08.09.10 23:59
09.09.10 00:00

J'aimerais donc avoir uniquement la dernière ligne de la journée (celle 08.09.10 23:59) et que ceci s'applique pour tous les jours du mois.

Comme ça dans une autre feuille j'aurais des lignes comme ci-dessous :

08.09.10 23:59
09.09.10 23:59
10.09.10 23:59
etc...

Merci d'avance !

A voir également:

4 réponses

Vaucluse Messages postés 26496 Date d'inscription   Statut Contributeur Dernière intervention   6 438
 
Bonjour
vos données d'origine:
en A les dates en B les heures

édition
en C la liste des dates
en D1, à tirer sur la hauteur utile
=INDEX(B:B;EQUIV(C1;A:A;0)+NB.SI(A:A;C1)-1)

ce qui suppose bien sur, que la liste de dates est classée ou au moins que toutes les dates au même jour se suivent.

crdlmnt

Errare humanum est, perseverare diabolicum
0
Yeezuus Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,

J'aimerais bien "tirer" mais j'ai plus de 80'000 valeurs !!! Existerait-il une façon de le faire automatiquement ?
0
Vaucluse Messages postés 26496 Date d'inscription   Statut Contributeur Dernière intervention   6 438
 
.. suis pas sur que 80000 formules puissent traiter facilement le problème... mais si vous avez 80000 lignes de données, il doit normalement y en avoir moins pour l'édition, non?

Dans tous les cas:

__Placer le curseur dans la case adresse à gauche de la barre de formule
__Inscrivez l'adresse du champ C1:C80000 (ou autre) et enter
__ inscrivez dans la barre de formule la formule correspondant à C1
__entrez en avec la touche enter en maintenant la touche ctrl enfoncée, le champ va se remplir... en plusieurs secondes je pense.

crdlmnt
__
0
Yeezuus Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
 
"la formule correspondant à C1" c'est à dire?
0
Vaucluse Messages postés 26496 Date d'inscription   Statut Contributeur Dernière intervention   6 438
 
C'est à dire qu'il faut entrez dans la barre de formule la 1° formule du champ.
Si je reprends mon exemple
dans la case adresse
D1:D80000
dans la barre de formule:
=INDEX(B:B;EQUIV(C1;A:A;0)+NB.SI(A:A;C1)-1)

et enter en maintenant enfoncée la touche ctrl
*
Bonne chance!
0
Yeezuus Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
 
Ok, je vais essayer.

Merci à vous
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
Bonjour,

Comme ça dans une autre j'aurais des lignes comme ci-dessous :
dans une autre quoi ?
0
Yeezuus Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
 
effectivement, j'ai oublié d'écrire "dans une autre feuille".
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
Re,

j'étais absent cet aprèm

je te proposerai ce soir ou demain matiin une solution pure VBA rapide
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
Ci dessous proposition
il n'est pas nécessaire que les "tops" soient dans un ordre croissant (jour ou heure)

Les commentaires du code demain suer ta demande

Option Explicit
'--------
Sub derniere_heure()
Dim Derlig As Long, T_in(), Idx As Long, jour as Double
Dim D_max As Object
Dim start As Single

start = Timer
Application.ScreenUpdating = False
With Sheets(1)
Derlig = .Columns("A").Find("*", , , , , xlPrevious).Row
T_in = Application.Transpose(.Range("A2:A" & Derlig)) 'début des tops en A2
End With
Set D_max = CreateObject("scripting.dictionary")

For Idx = 1 To UBound(T_in)
jour = Int(T_in(Idx))
If Not D_max.exists(jour) Then
D_max.Add jour, T_in(Idx)
Else
If T_in(Idx) > D_max.Item(jour) Then D_max.Item(jour) = T_in(Idx)
End If
Next

With Sheets(2)
.Columns("A").Clear
With .Range("A2").Resize(D_max.Count, 1)
.Value = Application.Transpose(D_max.items)
.NumberFormat = "dd/mm/yy h:mm;@"
.Borders.Weight = xlThin
End With
.Activate
End With

Application.ScreenUpdating = True
MsgBox "Derniers tops journaliers extraits en " & Timer - start & " sec."
End Sub

0
Yeezuus Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,

Merci à vous pour le code. Il marche, mais pas parfaitement.

J'aimerais que le VBA reprenne la ligne à chaque fois (sachant que ma date est à la colonne A et que j'aimerais uniquement les colonnes M, N, O)

Ce qui donnerait ceci :

01.01.2014 --> M --> N --> O
etc...

Car dans votre code, il me prend plus de 60'000 lignes (sur les 80'000..)
0
Yeezuus Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
 
Je viens de remarquer que le code s'arrête au 11ème jour (à la ligne 35'000 et quelques...), sauriez-vous pourquoi ?
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
Bonjour,

J'aimerais que le VBA reprenne la ligne à chaque fois (sachant que ma date est à la colonne A et que j'aimerais uniquement les colonnes M, N, O)

Ce qui donnerait ceci :

01.01.2014 --> M --> N --> O


Et où était ce préciser dans la demande ?

Il faut bien te rendre compte que ce que tu demandes n'est pas forcément facile et que personne ne veut passer parfois plusieurs heures à essayer de résoudre un problème bénévolement pour se voir dire après coup " il faut en plus que...." et très rarement , "Excuse moi, j'avais mal expliqué°
etc...
0
Maurice
 
Bonjour

en Vba

MaVar = Cells(Rows.Count, 1).End(xlUp).Value

et tu la copy ou tu veux

A+
Maurice
-1
Yeezuus Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,

Je suis débutant en VBA, pourriez-vous un peu plus détailler svp?
0