Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

vgendron

XLDnaute Barbatruc
Hello

Je pense qu'il faudrait ajouter une colonne N pour concatener Date et heure
ensuite tu fais ton filtre avec les critères de début et fin également créés par concaténation
 

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
404
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…