Microsoft 365 Trie par Date & Heure

Le Rouky

XLDnaute Nouveau
Jour le forum,

j'ai un petit problème, lors de l'appui sur le bouton "Condi" je voudrai filtrer puis copier-coller les ligne entre date & heure debut jusqu'à date & heure fin.

J'arrive à filtrer et exporter par date(colonne M) de la feuille "Condi" sur la feuille "Bilan" mais je n'arrive pas à inclure les heures(colonne L) dans ce tri.

VB:
Sub Tri_export()
 
    Datdeb = Range("O1")
    Datfin = Range("S1")
    Derlig = Range("A" & Rows.Count).End(xlUp).Row
    Derlig1 = Range("A" & Rows.Count).End(xlUp).Row
    
    With Sheets("Condi")
        .Range("A1:M" & Derlig).AutoFilter Field:=13, _
            Criteria1:=">=" & Format(Datdeb, "mm/dd/yyyy"), Operator:=xlAnd, _
            Criteria2:="<=" & Format(Datfin, "mm/dd/yyyy")
    End With
    
    Sheets("Condi").Range("A2:M" & Derlig1).SpecialCells(xlVisible).Copy Sheets("Bilan").Range("A4")
    
End Sub

Auriez vous une idée ?

Cordialement
 

Pièces jointes

  • Test.xlsm
    100.1 KB · Affichages: 7
Solution
Bonjour.
Moi je le ferais comme ça, si toutefois je ne mettais pas d'abord les données sous forme de tableau :
VB:
Option Explicit
Sub TriExport()
   Dim DHDéb As Date, DHFin As Date, T(), LE As Long, LS As Long, DH As Date, C As Integer
   DHDéb = Feuil1.[O1].Value + Feuil1.[Q1].Value
   DHFin = Feuil1.[S1].Value + Feuil1.[U1].Value
   T = Feuil1.[A2:M2].Resize(Feuil1.[A1000000].End(xlUp).Row - 1).Value
   For LE = 1 To UBound(T, 1)
      DH = T(LE, 13) + T(LE, 12)
      If DH >= DHDéb And DH <= DHFin Then
         LS = LS + 1: For C = 1 To 13: T(LS, C) = T(LE, C): Next C
         End If
      Next LE
   Feuil2.[A4:M1000000].ClearContents
   If LS > 0 Then Feuil2.[A4].Resize(LS, 13).Value = T
   End Sub

Lolote83

XLDnaute Barbatruc
Bonjour,
Avec le code modifié ci dessous
VB:
Sub Tri_export()
    Dim Heudeb As Date
    Dim heufin As Date
    Datdeb = Range("O1")
    Datfin = Range("S1")
    Heudeb = Range("Q1")
    heufin = Range("U1")
    Derlig = Range("A" & Rows.Count).End(xlUp).Row
    Derlig1 = Range("A" & Rows.Count).End(xlUp).Row
    
    With Sheets("Condi")
        '---------------------------------------------------- Pour les dates
        .Range("A1:M" & Derlig).AutoFilter Field:=13, _
            Criteria1:=">=" & Format(Datdeb, "mm/dd/yyyy"), Operator:=xlAnd, _
            Criteria2:="<=" & Format(Datfin, "mm/dd/yyyy")

        '---------------------------------------------------- Pour les heures
        .Range("A1:M" & Derlig).AutoFilter Field:=12, _
            Criteria1:=">=" & Format(Heudeb, "hh:mm:ss"), Operator:=xlAnd, _
            Criteria2:="<=" & Format(heufin, "hh:mm:ss")

    End With
    xNbrLig = Range("A1:A" & Derlig).SpecialCells(xlCellTypeVisible).Count
    If xNbrLig > 1 Then
        Sheets("Condi").Range("A2:M" & Derlig1).SpecialCells(xlVisible).Copy Sheets("Bilan").Range("A4")
        MsgBox "Données copiées", vbInformation, "COPIE EFFECTUEE"
        ActiveSheet.Range("$A$1:$M$33").AutoFilter Field:=13
        ActiveSheet.Range("$A$1:$M$33").AutoFilter Field:=12

    Else
        MsgBox "Aucune donnée ne correspond aux dates et heures choisies", vbCritical, "RIEN"
        ActiveSheet.Range("$A$1:$M$33").AutoFilter Field:=13
        ActiveSheet.Range("$A$1:$M$33").AutoFilter Field:=12
    End If
End Sub

@+ Lolote83
 

Cousinhub

XLDnaute Barbatruc
Bonjour,
Avec 365, tu peux utiliser la fonction Filtre, ce qui peut t'éviter d'utiliser une macro...
J'ai transformé ta plage de données (A1:M33) en Tableau Structuré (mais ce n'est pas une obligation, juste un conseil très avisé, l'utilisation de ces tableaux n'apporte que des avantages...)
Et dans l'onglet "Bilan", cellule A4, une formule dynamique :
Code:
=FILTRE(T_Data;(T_Data[Date]+T_Data[Heure]>=Condi!O1+Condi!Q1)*(T_Data[Date]+T_Data[Heure]<=Condi!S1+Condi!U1))
Et tu obtiens toutes tes données...
Bonne journée
 

Pièces jointes

  • filtre tableau.xlsm
    99.9 KB · Affichages: 2

Dranreb

XLDnaute Barbatruc
Bonjour.
Moi je le ferais comme ça, si toutefois je ne mettais pas d'abord les données sous forme de tableau :
VB:
Option Explicit
Sub TriExport()
   Dim DHDéb As Date, DHFin As Date, T(), LE As Long, LS As Long, DH As Date, C As Integer
   DHDéb = Feuil1.[O1].Value + Feuil1.[Q1].Value
   DHFin = Feuil1.[S1].Value + Feuil1.[U1].Value
   T = Feuil1.[A2:M2].Resize(Feuil1.[A1000000].End(xlUp).Row - 1).Value
   For LE = 1 To UBound(T, 1)
      DH = T(LE, 13) + T(LE, 12)
      If DH >= DHDéb And DH <= DHFin Then
         LS = LS + 1: For C = 1 To 13: T(LS, C) = T(LE, C): Next C
         End If
      Next LE
   Feuil2.[A4:M1000000].ClearContents
   If LS > 0 Then Feuil2.[A4].Resize(LS, 13).Value = T
   End Sub
 

Lolote83

XLDnaute Barbatruc
Re bonjour à tous,
@Cousinhub , quand on filtre sur les dates indiquées (06/12/2018 - 07/12/2018) et les heures indiquées (08:00:00 - 09:00:00), je n'obtient aucune donnée.
Lors de ton filtre par la formule citée au post précédent, tu as 5 lignes mais les horaires ne correspondent pas
@+ Lolote83
 

Cousinhub

XLDnaute Barbatruc
Re-,
Hellolote 😉
Pourtant, d'après cette formule, j'obtiens ces créneaux :

16:14:0006/12/2018
02:18:0007/12/2018
09:07:0006/12/2018
18:52:0006/12/2018
21:15:0006/12/2018

Soient des dates comprises entre le 06/12/2018 08:00:00 et le 07/12/2018 09:00:00
C'est bien ce qui est demandé, il me semble... 🧐
 

Lolote83

XLDnaute Barbatruc
Re bonjour
@Cousinhub , effectivement vu de ce côté cela semble être OK
Cependant, si on filtre en premier sur les dates, puis sur les heures on a aucune donnée.
Peut être est-ce la le problème du coup.
La concaténation (date + heure) est donc certainement nécessaire, chose que je n'ai pas prise en compte dans mon post.
Je valide donc ta solution
@+ Lolote83
 

Le Rouky

XLDnaute Nouveau
Jour le Forum ,@vgendron ,@Lolote83 ,@Cousinhub ,@Dranreb

Merci à vous pour vos reponses,

@vgendron , pas possible de créer une colonne.

@Lolote83 , Me dit "Aucune donnée ne correspond aux dates et heures choisies" quelque soit la date ou l'heure

@Cousinhub , j'aime pas les formules car il y a toujours source d'erreur quand on n'est pas le seul sur le fichier.

@Dranreb , Nickel. Je valide ta solution.

Encore merci à vous tous

Cordialement
 

Discussions similaires

Réponses
7
Affichages
402

Statistiques des forums

Discussions
313 098
Messages
2 095 234
Membres
106 233
dernier inscrit
Bouzalmad