Répartition et somme entre deux date dans un calendrier

LPM

XLDnaute Nouveau
Bonjour à tous,

Tout d'abord je vous remercie pour votre aide et le temps que vous nous offrez.

J'ai beau me creuser les méninges, et avec mes faibles connaissances en excel je ne trouve pas de solution. Pire encore, je n'ai pas réussi à trouver de solution correspondant à mon problème sur pas mal de forum.

Je vous explique.

J'extrais tous les jours de mon logiciel hotelier un fichier csv qui me liste toutes mes réservations.Cela fonctionne par date. Exemple, une réservation pour une arrivée au 01/01, départ au 03/01, pour une chambre double.

J'aimerais synthétiser ce fichier sur un calendrier qui m'indiquerait le nombre de chambre vendu (par catégorie) et par date.

A savoir que plus j'avance dans le temps, plus la liste des réservations s'allongent. Donc la formule nécessaire ne doit pas s'arrêter uniquement aux dernières valeurs / lignes du tableau.

Dans le premier onglet du fichier que j'ai joint, se trouver la liste des réservations. Et j'aimerais voir la synthèse dans mon deuxième onglet.

Je vous remercie par avance pour votre retour.
 

Pièces jointes

  • Planning.xls
    41 KB · Affichages: 41
  • Planning.xls
    41 KB · Affichages: 44

LPM

XLDnaute Nouveau
Re : Répartition et somme entre deux date dans un calendrier

Merci pour votre temps et votre savoir.

J'ai du mal m'exprimer et j'ai oublié de préciser quelque chose. Je vous en présente mes excuses.

Dans la colonne chambre, ce n'est pas le nombre de chambre vendu, mais le numéro de la chambre que j'attribue au client. Il importe peu dans mon tableau de synthèse.

Chaque ligne correspond à une réservation, qui est à répartir dans le calendrier jour par jour.

Par exemple: pour une réservation d'une chambre commune du 01/04 au 03/04, je voudrais voir +1 le 01/04 pour la catégorie commune, +1 le 02/04 dans la catégorie commune.

Le but étant de savoir par jour et par catégorie, combien de chambre sont occupés.

Je vous remercie tous les deux,

Claire
 

Modeste geedee

XLDnaute Barbatruc
Re : Répartition et somme entre deux date dans un calendrier

Bonsour®
envisager l'utilisation de Tableau Croisé Dynamique
Capture.jpg
 

Pièces jointes

  • Capture.jpg
    Capture.jpg
    70.8 KB · Affichages: 27

pierrejean

XLDnaute Barbatruc
Re : Répartition et somme entre deux date dans un calendrier

Re

Nouvelle version mais !!!!
1) Plutôt long
2) résultat différent de celui obtenu par mon ami Jocelyn

Que dit le TCD de Modeste ???
 

Pièces jointes

  • Planning.xls
    59 KB · Affichages: 21
  • Planning.xls
    59 KB · Affichages: 20

LPM

XLDnaute Nouveau
Re : Répartition et somme entre deux date dans un calendrier

Merci à tous.

Jocelyn, vous approchez du but. Bon je n'ai pu que vérifier manuellement ce que vous avez fait. Cela me semble bon, sauf que je remarque des erreurs. J'ai essayé de trouver ça a la main, en vérifiant certaines dates. Je pense que le soucis viens du fait que votre formule compte comme "+1" la date de départ. Si vous voulez la date de départ est à exclure, puisque la personne part et que la chambre est donc disponible à la vente.

Si j'ai une réservation du 01/04 au 02/4, il faut uniquement compter 1 pour le 01/04.

Pour certaines dates je n'arrive pas à trouver l'erreur. Exemple du 07/04. Il est indiqué que 21 chambre privée sont occupées sur cette date. Or, en comptant à la main j'en compte: 15. Et même en incluant la date de départ comme vendu je tombe sur: 19.

Merci Pierre Jean et Modeste Geedee, mais j'ai besoin du total par catégorie et par jour. Si vous voulez, cela me permet ensuite de comparer entre le jour J et la veille les dates qui ont pris des réservations.Le tout dans un autre tableau de synthèse avec différentes données me permettant de gérer mes tarifs.
Exemple, j'avais 4 chambre commune vendu au 01/04, le lendemain j'en ai 5, cette différence me permet de voir quelles dates sont plus plus réserver que d'autres.

Merci encore à tous pour votre temps et vos connaissances.
 

LPM

XLDnaute Nouveau
Re : Répartition et somme entre deux date dans un calendrier

Jocelyn,

*EDIT*: je viens de recalculer pour le 07/04, je n'avais pas vu les dernière privées en bas du tableau. L'erreur vient bien du compte de la nuit de départ.
EN recomptant je suis tombée sur 16 réellement vendu, et 21 en incluant la date de départ.

Merci Pierre Jean et Modeste Geedee pour votre travail. La version de Jocelyn correspond plus à mon besoin.

Bravo à vous, grâce à vous je touche au but :)
 

Jocelyn

XLDnaute Barbatruc
Re : Répartition et somme entre deux date dans un calendrier

re,
Bonjour Modeste Geedee,

Revoila un fichier avec la correction sur la date de sortie après modification pour le 07/04/2016 le résultat est 16 et après pointage manuel dans la feuille planning le résultat 16 aussi j'ai laissé le test dans la feuille planning

Cordialement
 

Pièces jointes

  • Planning V2.xls
    96.5 KB · Affichages: 30
  • Planning V2.xls
    96.5 KB · Affichages: 26

LPM

XLDnaute Nouveau
Re : Répartition et somme entre deux date dans un calendrier

Un très très très grand merci à vous tous, :D

Vous venez de me sauver d'un grand moment de solitude.

Merci Jocelyn le fichier est parfait!

Je vous souhaite à tous un excellent week end.

Claire
 

pierrejean

XLDnaute Barbatruc
Re : Répartition et somme entre deux date dans un calendrier

Re

Juste pour le fun

Je suis enfin arrivé a pondre quelque chose qui marche même si cela demande une patience certaine
Et BRAVO ami Jocelyn
 

Pièces jointes

  • Planning.xls
    53 KB · Affichages: 26
  • Planning.xls
    53 KB · Affichages: 25

klin89

XLDnaute Accro
Re : Répartition et somme entre deux date dans un calendrier

Bonsoir à tous, :)

A tester sur PC, restitution en feuil2
Je me suis appuyé sur le fichier de pierrejean post #13

Je n'ai que Excel2003 sous la main et donc pas pu tester avec l'exemple présenté.
(pas assez de colonnes pour la restitution du résultat)
Je retesterais demain avec quelques lignes et peu de dates.
VB:
Option Explicit

Sub Compter_Reservations()
Dim a, i As Long, j As Long, nbrejours As Long, AL As Object
    Set AL = CreateObject("System.Collections.ArrayList")
    a = Sheets(1).Range("a3").CurrentRegion.Value
    With CreateObject("Scripting.Dictionary")
        For i = 2 To UBound(a, 1)
            nbrejours = a(i, 2) - a(i, 1)
            For j = 0 To nbrejours - 1
                If Not AL.Contains(a(i, 1) + j) Then AL.Add a(i, 1) + j
            Next
            If Not .exists(a(i, 4)) Then
                Set .Item(a(i, 4)) = _
                CreateObject("Scripting.Dictionary")
                .Item(a(i, 4)).CompareMode = 1
                For j = 0 To nbrejours - 1
                    .Item(a(i, 4))(a(i, 1) + j) = 1
                Next
            Else
                For j = 0 To nbrejours - 1
                    .Item(a(i, 4))(a(i, 1) + j) = .Item(a(i, 4))(a(i, 1) + j) + 1
                Next
            End If
        Next
        AL.Sort
        ReDim a(1 To .Count + 1, 1 To AL.Count + 1)
        a(1, 1) = ""
        For i = 0 To AL.Count - 1
            a(1, i + 2) = AL(i)
        Next
        For i = 0 To .Count - 1
            a(i + 2, 1) = .keys()(i)
            For j = 0 To .items()(i).Count - 1
                a(i + 2, AL.IndexOf(.items()(i).keys()(j), 0) + 2) = .items()(i).items()(j)
            Next
        Next
    End With
    Application.ScreenUpdating = False
    'Restitution
    With Sheets("Feuil2")
        .Cells.Clear
        With .Cells(1).Resize(UBound(a, 1), UBound(a, 2))
            .FormulaLocal = a
            .Font.Name = "calibri"
            .Font.Size = 10
            .VerticalAlignment = xlCenter
            .BorderAround Weight:=xlThin
            .Borders(xlInsideVertical).Weight = xlThin
            With .Rows(1)
                .BorderAround Weight:=xlThin
                With .Offset(, 1).Resize(, .Columns.Count - 1)
                    .Interior.ColorIndex = 36
                End With
            End With
            With .Columns(1)
                With .Offset(1).Resize(.Rows.Count - 1)
                    .Interior.ColorIndex = 38
                End With
            End With
            .Columns.AutoFit
        End With
        .Activate
    End With
    Application.ScreenUpdating = True
End Sub
Bonne nuit klin89
 

klin89

XLDnaute Accro
Re : Répartition et somme entre deux date dans un calendrier

Re à tous, :)

Le code réajusté, on récupère toutes les dates au cas où :p

VB:
Option Explicit

Sub Compter_Reservations()
Dim a, i As Long, j As Long, nbrejours As Long, AL As Object
Dim myMin As Date, myMax As Date, k As Date
    Set AL = CreateObject("System.Collections.ArrayList")
    With Sheets(1).Range("a3").CurrentRegion
        a = .Value
        myMin = CDate(Application.Min(.Columns(1)))
        myMax = CDate(Application.Max(.Columns(2)))
    End With
    For k = myMin To myMax
        AL.Add k
    Next
    With CreateObject("Scripting.Dictionary")
        For i = 2 To UBound(a, 1)
            nbrejours = a(i, 2) - a(i, 1)
            If Not .exists(a(i, 4)) Then
                Set .Item(a(i, 4)) = _
                CreateObject("Scripting.Dictionary")
                .Item(a(i, 4)).CompareMode = 1
            End If
            For j = 0 To nbrejours - 1
                .Item(a(i, 4))(a(i, 1) + j) = .Item(a(i, 4))(a(i, 1) + j) + 1
            Next
        Next
        AL.Sort
        ReDim a(1 To .Count + 1, 1 To AL.Count + 1)
        a(1, 1) = ""
        For i = 0 To AL.Count - 1
            a(1, i + 2) = AL(i)
        Next
        For i = 0 To .Count - 1
            a(i + 2, 1) = .keys()(i)
            For j = 0 To .items()(i).Count - 1
                a(i + 2, AL.IndexOf(.items()(i).keys()(j), 0) + 2) = .items()(i).items()(j)
            Next
        Next
    End With
    Application.ScreenUpdating = False
    'Restitution
    With Sheets("Feuil2")
        .Cells.Clear
        With .Cells(1).Resize(UBound(a, 1), UBound(a, 2))
            '.FormulaLocal = a
            .Value = a
            .Font.Name = "calibri"
            .Font.Size = 10
            .VerticalAlignment = xlCenter
            .BorderAround Weight:=xlThin
            .Borders(xlInsideVertical).Weight = xlThin
            With .Rows(1)
                .BorderAround Weight:=xlThin
                With .Offset(, 1).Resize(, .Columns.Count - 1)
                    .Interior.ColorIndex = 36
                End With
            End With
            With .Columns(1)
                With .Offset(1).Resize(.Rows.Count - 1)
                    .Interior.ColorIndex = 38
                End With
            End With
            .Columns.AutoFit
        End With
        .Activate
    End With
    Application.ScreenUpdating = True
End Sub
klin89
 

Discussions similaires

Statistiques des forums

Discussions
312 176
Messages
2 085 963
Membres
103 068
dernier inscrit
Strogoff