XL 2013 Compter le nombre de cellules comprises entre deux dates dans une colonne de dates

BribriD

XLDnaute Nouveau
Bonjour,

J'ai un tableau avec une colonne remplie de différentes dates. Je cherche à calculer le nombre de cellules remplies pour le mois de janvier, février etc … en sachant que mes dates sont marquées de la manière suivante 01/01/2019

Avez vous une idée? Je n'y arrive pas et suis novice
Merci
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Bribri, bonjour le forum,

Le code ci-dessous va t'indiquer combien il y a de date pour chaque mois si les données se trouvent dans la colonne 1 :

VB:
Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim A As Variant 'déclare la variable A (Année)
Dim DD As Date 'déclare la variable DD (Date de Début)
Dim DF As Date 'déclare la variable DF (Date de Fin)
Dim C As Integer 'déclare la variable C (Compteur)
Dim ML As String 'déclare la variable ML (Mois Long)

Set O = Worksheets("Feuil1") 'définit l'onglet O (à Adapter à ton cas)
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
A = Application.InputBox("Quelle Annéee ?", "ANNÉE", Type:=2) 'définit l'année A
If A = False Or A = "" Then Exit Sub 'si bouton [Annuler] ou non renseignée, sort de la procédure
For J = 1 To 12 'boucle 1 : sur 12 mois
    C = 0 'initialise le compteur
    DD = DateSerial(A, J, 1) 'definit la date de début DD
    DF = DateSerial(A, J + 1, 0) 'définit la date de fin DF
    For I = 1 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs
        'si la date de la donnée ligne I colonne 1 de TV est comprise entre la date de début DD et la date de fin DF, incrémente le compteur C
        If DateSerial(Year(TV(I, 1)), Month(TV(I, 1)), Day(TV(I, 1))) >= DD And DateSerial(Year(TV(I, 1)), Month(TV(I, 1)), Day(TV(I, 1))) <= DF Then C = C + 1
    Next I 'prochaine ligne de la boucle 2
    ML = Choose(J, "Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre") 'définit le mois long
    MsgBox "il y a " & C & " date(s) au mois de " & ML & " de l'année " & A & "." 'message
Next J 'prohain mois de la boucle 1
End Sub

[Édition]
Bonjour Lolote, nos post se sont croisés...
 

BribriD

XLDnaute Nouveau
Merci lolote83 et Robert!
Je choisi pour cette fois le tableau croisé dynamique, plus pratique pour moi dans ce fichier .
Par contre je vois que vous Robert connait les macros.
J'en ai crée une pour ce fichier ce matin (la première de ma vie, en regardant les scripts sur les forum et voici ce que j'ai sorti et qui fonctionne !!

Il s'agit de supprimer des lignes de l'onglet Rungis-Paris et les coller dans l'onglet "Déplacement" lorsque la colonne H est remplie.
Ca marche mais s'il y a plusieurs lignes concernées, je dois à chaque fois relancer la macro. Il y a t-il un script qui me permette de couper et coller toutes les lignes d'un coup dont la colonne H est remplie ?

Sub MACROVICEVERSA()
Dim c As Range, cDest As Range

Application.ScreenUpdating = False
With ThisWorkbook
'cDest: La celllule de destination: premi?re cellule vide de la colonne A de D?placements
With .Worksheets("D?placements")
Set cDest = .Cells(.Rows.Count, "A").End(xlUp)(2)
End With
With .Woarrive rksheets("Rungis-Paris")
'on cherche LA CELLULE contenant x en colonne B de Rungis-Paris
Set c = .Range("H:H").Find("*", LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
With c.EntireRow
'On copie toute la ligne trouv?e vers cDest
.Copy cDest
'on supprime la ligne trouv?e de Feuil1
.Delete
End With
Set c = Nothing
End If
'on vide notre variable cDest
Set cDest = Nothing
End With
End With
End Sub

Merci et bonne soirée !
j'ai passé la journée sur ce fichier car ce matin en me réveillant je ne savais pas ce qu'était une macro et comment faire un tableau dynamique ! Quelle journée !
 

Robert

XLDnaute Barbatruc
Repose en paix
Re,

Tu n'indiques pas où commence le tableau !?... Le code ci-dessous suppose qu'il commence en A1 et que la ligne 1 contient les titres :

VB:
Sub MACROVICEVERSA()
Dim RP As Worksheet 'déclare la variable RP (ongete Rungis Paris)
Dim D As Worksheet 'déclare la variable D (onglet Déplacement)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim PL As Range 'déclare la variable PL (PLage)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set RP = Worksheets("Rungis-Paris") 'définit l'onglet RP
Set D = Worksheets("Déplacements") 'définit l'onglet D
Set PL = RP.Range("A1") 'initialise la plage PL
TV = RP.Range("A1").CurrentRegion 'définit le tableau des Valeurs TV
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
    If TV(I, 8) = "*" Then 'condition  si la donnée ligne I colonne 8 de TV vaut "*"
        Set PL = IIf(PL.Cells.Count = 1, RP.Rows(I), Application.Union(PL, RP.Rows(I))) 'redéfinit la plage PL
        'de'finit la cellule de destination DEST (A1 si A1 est vide, sinon, la première cellule vide de la colonne A de l'onglet D)
        If D.Range("A1") = "" Then Set DEST = D.Range("A1") Else Set DEST = D.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0)
        RP.Rows(I).Copy DEST 'copie la ligne I et la colle dans DEST
    End If 'fin de la condition
Next I 'prochaine ligne de la boucle
PL.Delete 'supprime la plage PL
End Sub
 

Discussions similaires