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

XL 2021 Compter le nombre de cellules qui contiennent la date d'aujourd'hui

Usine à gaz

XLDnaute Barbatruc
Bonjour à toutes et à tous

Je n'arrive pas à faire à faire ma formule
Je voudrais en "H2" du classeur test joint compter le nombre de cellules qui contiennent la date d'aujourd'hui.

J'ai fait pas mal de recherches (certainement mal cherché lol) sans y parvenir.

Auriez-vous la bonne formule ?
En cas, je joins le petit fichier test.
Grand merci à toutes et à tous
 

Pièces jointes

  • compter les dates AUJOURD'HUI.xlsm
    12.4 KB · Affichages: 29
Solution
Autre solution en VBA en utilisant matrices (Ctrl shift puis enter pour valider la formule).

VB:
Public Function ArrayFromRange(ByVal Target As Range) As Variant
'Helper function that returns an array from a range with the correct dimensions.
'This fixes the issue of single values not returning as an array, and when a 2 dimension array is returned, when it...

Usine à gaz

XLDnaute Barbatruc
Bonjour à toutes et à tous

Je reviens sur le sujet car je voudrais compter également les dates du jour -1 (la veille).
J'arecherché& et tenté plusieurs formules sans y parvenir.
auriez-vous la bonne formule ?
Je vous remercie
 

jlfeugeas

XLDnaute Nouveau
Autre solution en VBA en utilisant matrices (Ctrl shift puis enter pour valider la formule).

VB:
Public Function ArrayFromRange(ByVal Target As Range) As Variant
'Helper function that returns an array from a range with the correct dimensions.
'This fixes the issue of single values not returning as an array, and when a 2 dimension array is returned, when it only has 1 dimension of data.
'Arrayx = ArrayFromRange(ws.Range("A1"))
'vARE = ArrayFromRange(Range("tous"))
    Select Case True
        Case Target.Cells.Count = 1 ' Single cell
            ArrayFromRange = Array(Target.Value)
        Case Target.Rows.Count = 1 ' Single Row
            ArrayFromRange = Application.Transpose(Application.Transpose(Target.Value))
        Case Target.Columns.Count = 1 ' Single Column
            ArrayFromRange = Application.Transpose(Target.Value)
        Case Else ' Multi dimension array
            ArrayFromRange = Target.Value
    End Select
End Function

Function M_CompteToday(ListA As Range)
Application.Volatile
Dim n%, i%, LgA%, x!, dat As String

Dim a() As String
Dim MatA As Variant, cel As Variant

MatA = ArrayFromRange(ListA)
LgA = ListA.Count
ReDim a(1 To LgA)
''*******************************************
n = 0
For Each cel In MatA 'construit variable de la colonne liste A (a)
    n = n + 1
    a(n) = Format(cel, "dd mmmm yy")
Next cel
''*******************************************TRT CONDITIONS
For i = 1 To LgA
    If a(i) = Format(Now(), "dd mmmm yy") Then x = x + 1

Next i
''*******************************************
M_CompteToday = x

End Function
 

Pièces jointes

  • compter les dates AUJOURD'HUI.xlsm
    20.5 KB · Affichages: 3

jlfeugeas

XLDnaute Nouveau
Salut, tu voulais aussi pour le jour précédent....
Bonne soirée.
VB:
Function M_CompteToday(ListA As Range)
Application.Volatile
Dim n%, i%, LgA%, x!
Dim a() As String
Dim MatA As Variant, cel As Variant

MatA = ArrayFromRange(ListA)
LgA = ListA.Count
ReDim a(1 To LgA)
''*******************************************
n = 0
For Each cel In MatA 'construit variable de la colonne liste A (a)
    n = n + 1
    a(n) = Format(cel, "dd mmmm yy")
Next cel
''*******************************************TRT CONDITIONS
For i = 1 To LgA
'    If a(i) = Format(Now(), "dd mmmm yy") Then x = x + 1 'Pour Aujourd'hui
    If a(i) = Format(DateAdd("d", -1, Now()), "dd mmmm yy") Then x = x + 1 'Pour le jour d'hier
Next i
''*******************************************
M_CompteToday = x
End Function
 

mapomme

XLDnaute Barbatruc
Bonsoir à tous,
Une autre fonction personnalisée avec deux paramètres : Depuis(xrg, nbrjour)
  • xrg est la plage des dates à dénombrer
  • nbrjour est le décalage à partir duquel on compte les dates jusqu'à aujourd'hui. Nbrjour doit être nul ou négatif

Exemple :
  • Compter les jours de la sélection active qui sont aujourd'hui : Depuis(Selection, 0)
  • Compter les jours de la sélection active qui sont aujourd'hui ou la veille : Depuis(Selection, -1)
  • Compter les jours de la sélection active qui sont aujourd'hui ou la veille ou avant-hier : Depuis(Selection, -2)
  • Compter uniquement les jours de la veille : Depuis(Selection, -1) - Depuis(Selection, 0)
  • Compter uniquement avant-hier et hier : Depuis(Selection, -2) - Depuis(Selection, 0)

Le code :
VB:
Function Depuis(xrg As Range, nbrjour&) As Long
Dim x, j&, n&
   If nbrjour > 0 Then Exit Function
   For Each x In xrg
      j = Int(x)
      If ((Date - j) <= -nbrjour) And (j <= Date) Then n = n + 1
   Next
   Depuis = n
End Function
 

Pièces jointes

  • Usine à gaz- compter Date- v1.xlsm
    17.4 KB · Affichages: 5

jlfeugeas

XLDnaute Nouveau
Bonne idée mapomme ! la fonction est plus générale, merci.
VB:
Function M_Depuis(ListA As Range, nbj%)
'ListA = dates et nbj = nombre de jours avant aujourd'hui
Application.Volatile
Dim n%, i%, LgA%, x!
Dim a() As String
Dim MatA As Variant, cel As Variant

MatA = ArrayFromRange(ListA)
LgA = ListA.Count
ReDim a(1 To LgA)
''*******************************************
n = 0
For Each cel In MatA 'construit variable de la colonne liste A (a)
    n = n + 1
    a(n) = FormatNumber(DateValue(cel))
Next cel
''*******************************************TRT CONDITIONS
For i = 1 To LgA
    If Date - a(i) <= nbj And Date - a(i) >= 0 Then x = x + 1
Next i
''*******************************************
M_Depuis = x
End Function
Elle ne passe pas par une gestion avec des variables mémoire (plus rapide ?)
J'ai ré-écrit la mienne en utilisant le même algorithme, mais avec transfert des données en mémoire ce qui permet dans certain cas des opérations plus complexes, comme l'affichage des résultats... Le nombre de jour à évaluer en arrière, est par contre positif.
 

Pièces jointes

  • Usine à gaz- compter Date- v2.xlsm
    23.9 KB · Affichages: 2

jlfeugeas

XLDnaute Nouveau
Code:
Public Function M_Result(ListA As Range, nbj%)
'Affichage résultats
Application.Volatile
Dim n%, i%, LgA%, LgB%
Dim a() As String, b() As String
Dim MatA As Variant, cel As Variant

LgA = ListA.Count
MatA = ArrayFromRange(ListA)

ReDim a(1 To LgA)
ReDim b(1 To LgA)
'*******************************************
n = 0
For Each cel In MatA 'construit listeA sans compter cellules vides
    n = n + 1
    a(n) = FormatNumber(DateValue(cel))
Next cel
'*******************************************
For i = 1 To LgA 'construit listeB
    If Date - a(i) <= nbj And Date - a(i) >= 0 Then b(i) = CDate(a(i))
Next i
'*******************************************
M_Result = Application.Transpose(b)
End Function
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…