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 -
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 !
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:
- Prendre uniquement la dernière ligne d'une journée
- Dernière version ccleaner gratuit français - Télécharger - Nettoyage
- Supprimer dernière page word - Guide
- Partager photos en ligne - Guide
- Aller à la ligne excel - Guide
- Dernière version chrome - Accueil - Applications & Logiciels
4 réponses
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
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
Re,
j'étais absent cet aprèm
je te proposerai ce soir ou demain matiin une solution pure VBA rapide
j'étais absent cet aprèm
je te proposerai ce soir ou demain matiin une solution pure VBA rapide
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
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
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..)
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..)
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...
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...
J'aimerais bien "tirer" mais j'ai plus de 80'000 valeurs !!! Existerait-il une façon de le faire automatiquement ?
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
__
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!
Merci à vous