Dénombrer les participants au jour le jour

Bonjour à tous,

j'ai un fichier dans lequel je rentre les participants à un centre de loisir, la date concernant leur premier jour de présence, la date concernant leur dernier jour de présence et l'activité à laquelle ils ont participé.

Je cherche la solution qui me permettrait à partir de ces données de générer un nouveau tableau avec en abscisse toutes les dates de l'année en commençant au 1er janvier et en ordonnée une ligne par activité (foot/basket/hand) avec au sein du tableau le nombre de participants à chaque activité chaque jour donné. Je souhaiterais si c'est possible que ce tableau se remplisse automatiquement en fonction des données rentrées dans le premier tableau.

J'espère avoir exprimé ma demande de manière compréhensible. Je vous joins un exemple de tableau avec les données telles que je les rentre au fur et à mesure en feuille 1 et le tableau que j'aimerais voir s'incrémenter automatiquement en feuille 2.

20test.xlsx (10.60 Ko)

Merci d'avance pour votre aide

Bonjour,

Une proposition avec Power Query et un peu de VBA pour l'actualisation de la requête.

Cordialement.

15poolpoar.xlsm (25.88 Ko)

Bonjour,

un grand merci, ça me semble parfait !

Par contre, je ne sais pas où trouver dans le fichier que vous avez posté les formules utilisées, afin que je puisse les reproduire sur le vrai fichier que j'utilise avec les données. Pouvez vous m'aiguiller sur la marche à suivre ou m'expliquer comment vous avez procédé pour que je sois à l'avenir autonome sur ce genre de requête ?

Merci

re,

Des explications et un peu de lecture.

http://www.excel-formations.fr/Trucs_astuces/PQ00.php

14poolpoar.docx (67.78 Ko)

Cordialement.

Bonjour,

Comme j'avais commencé dans l'après-midi, je poste quand même.

Solution uniquement VBA :

Sub extract()
Dim tablo(), j%, L%, I%, k%, z%
Dim PL As Range

Set PL = Range("T_BDD[Nom]")
For z = PL.Rows.Count To 1 Step -1
    If PL(z).Value <> "" Then PL.ListObject.ListRows(z).Delete
Next z

j = 0
L = -1
With Sheets("Feuil1")
    For I = 0 To .Cells(Rows.Count, 1).End(xlUp).Row - 2
        For k = 0 To Cells(I + 2, 3) - Cells(I + 2, 2)
                j = j + 1
                L = L + 1
            ReDim Preserve tablo(1 To 4, 1 To j)
                tablo(1, j) = Cells(I + 2, 1)
                tablo(2, j) = CDate(Format(Cells(I + 2, 2) + L, "dd/mm/yyyy")) * 1
                tablo(3, j) = Cells(I + 2, 4)
        Next k
        L = -1
    Next I
    .Cells(2, 7).Resize(UBound(tablo, 2), UBound(tablo, 1)) = Application.Transpose(tablo) 'sinon on se place dernière ligne + 1
End With
End Sub

Bonjour à toutes et tous,

Une autre solution VBA !...

Cdlt.

Public Sub CreateTable()
Dim tbl, arr(), r As Range, i As Long, j As Long, m As Long
    With Range("Output").ListObject
        If Not .DataBodyRange Is Nothing Then .DataBodyRange.Delete
        Set r = .InsertRowRange.Cells(1)
    End With
    tbl = Range("Input").Value
    For i = LBound(tbl) To UBound(tbl)
            For j = tbl(i, 2) To tbl(i, 3)
                ReDim Preserve arr(3, m + 1)
                arr(0, m) = tbl(i, 1)
                arr(1, m) = j
                arr(2, m) = tbl(i, 4)
                m = m + 1
            Next j
    Next i
    r.Resize(m, 3).Value = Application.Transpose(arr)
End Sub

Bonsoir Jean-Éric,

Merci pour la double élégance :

-d'une part pour la suppression des données du listobject

- d'autre part pour le "For j = tbl(i, 2) To tbl(i, 3)" qui paraît si évident quand on l'a sous le nez, mais que je n'ai pas vu.

Re,

@JoyeuxNoel,
Je l'aime bien cette devise.

pourquoi faire simple quand on peut faire complique shadok 5
Rechercher des sujets similaires à "denombrer participants jour"