Regroupement de jours en semaines

  • Initiateur de la discussion Initiateur de la discussion brigadero
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

brigadero

XLDnaute Junior
Bonjour,

Je voudrais juste savoir comment faire pour, à partir de dates sur un an, regrouper les jours en fonction des semaines.
Et que mes semaines soient du lundi au dimanche.
C'est à dire pour 2009 le 1er janvier est un vendredi, donc regrouper en semaine1 le vendredi samedi dimanche, après semaine 2 du lundi au dimanche suivant etc...le but étant de mettre dans la colonne Semaine la semaine à laquelle appartient le jour, jusqu'à la 52e semaine.
Tout ceci doit être fait en vba!

Merci d'avance
 

Pièces jointes

Re : Regroupement de jours en semaines

Bonsoir à tous
Code:
[COLOR="DarkSlateGray"][B]Sub tata()
Dim i&, j&, k&
Dim sDat(), oDat, nDat&, oColl As New Collection
   With Feuil1
      oDat = .Cells(1, 1).Resize(.Cells(.Rows.Count, 1).End(xlUp).Row, 2).Value
   End With
   nDat = UBound(oDat, 1)
   For i = 1 To nDat
      oDat(i, 1) = semaine(CDate(oDat(i, 1)))
      On Error GoTo E
      oColl.Add oDat(i, 1), CStr(oDat(i, 1))
      j = j + 1
      ReDim Preserve sDat(1 To 3, 1 To j)
      sDat(1, j) = oDat(i, 1)
      sDat(2, j) = oDat(i, 2)
      sDat(3, j) = 1
R:    On Error GoTo 0
   Next i
   For i = 1 To j
      sDat(2, i) = sDat(2, i) / sDat(3, i)
   Next i
   Feuil2.Cells(2, 1).Resize(j, 2) = WorksheetFunction.Transpose(sDat)
Exit Sub
E:
   For k = j To 1 Step -1
      If oDat(i, 1) = sDat(1, k) Then
         sDat(2, k) = sDat(2, k) + oDat(i, 2)
         sDat(3, k) = sDat(3, k) + 1
         Exit For
      End If
   Next
   Resume R
End Sub

Function semaine(d As Date) As String
Dim ns&
   d = Int(d)
   ns = DateSerial(Year(d + (8 - Weekday(d, vbSunday)) Mod 7 - 3), 1, 1)
   ns = ((d - ns - 3 + (Weekday(ns, vbSunday) + 1) Mod 7)) \ 7 + 1
   semaine = Year(d) - (ns > 50) * (Month(d) = 1) + (ns < 5) * (Month(d) = 12) & "-W" & Right$("0" & ns, 2)
End Function[/B][/COLOR]
devrait faire l'affaire pour autant que la colonne 1 de la feuille 1 contienne des dates et que la colonne 2 contienne des nombres.

(Je n'ai pas pris connaissance des contributions au format .xlsm dont la place est ailleurs que sur ce forum.)​
ROGER2327
#3678


Mardi 24 Merdre 137 (Sainte Purge, sage-femme, SQ)
22 Prairial An CCXVIII
2010-W23-4T23:35:21Z
 

Pièces jointes

Dernière édition:
Re : Regroupement de jours en semaines

Bonjour!

Merci Roger2327 c'est super!
Cependant il y'a juste un petit pb, cela prend les moyennes du mardi au lundi, alors que je voudrais du lundi au dimanche...
Et pour la 1ère semaine je pnsais prendre les jours qu'il manque dans la 2e semaine pour que cela fasse une semaine complete. (prendre le montant du lundi mardi mercredi jeudi pr 2009, et on aura donc juste les montants vendredi samedi dimanche qui changeront entre la semaine 1 et 2)
Et aussi si vous pouviez commenter parceque j'avou que je ne comprends pas grand chose!! Merci

Et pour répondre à Gruick en fait mon but est le suivant :
Je veux voir si le montant d'un jour férié à un impact sur un montant hebdomadaire, c'est pour cela que tout d'abord je veux regrouper les semaines entre elle.

Je veux ensuite mettre dans une colonne si telle ou telle semaine contient un jour férié.
A partir de ce moment là, je vais comparer le montant moyen de la semaine ac un jour férié avec la moyenne des deux montants moyens des semaines qui entourent cette semaine là. (semaine S-1 et semaine S+1)
Et ensuite je vais voir si l'écart entre ces deux montants est significatifs ou pas. (en utilisant la loi normale centré et la densité de probabilité)

Voila tout. et pour l'instant j'ai quelque difficultés pour coder cela c'est pourquoi j'ai besoin de votre aide.

Merci encore.

brigadero
 
Re : Regroupement de jours en semaines

Re...
Pas d'impatience ! On n'est pas tous rentiers : des fois, on va au chagrin pour manger...
Ceci dit, même si je n'ai pas le temps de répondre tout de suite à l'ensemble de vos questions, une chose m'intrigue :
(...) il y'a juste un petit pb, cela prend les moyennes du mardi au lundi, alors que je voudrais du lundi au dimanche... (...)
dites-vous. Je ne parviens pas au même résultat. Sans le classeur joint, je reprends quelques données de mon classeur précédent et je compare les résultats de la procédure tata et les résultats du calcul direct : j'obtiens des résultats identiques en prenant des semaines du lundi au dimanche.
Pouvez-vous vérifier cela et, au besoin, déposer au moins une partie du classeur où la procédure se trompe en calculant du mardi au lundi ?
Quant à votre demande de commentaire de la procédure, c'est un peu long à rédiger. Je le ferai dans quelques jours, car je ne pense pas avoir le temps cette fin de semaine. De plus, si la procédure ne vous donne pas le résultat attendu, il n'est peut-être pas utile de la commenter : essayons d'abord de trouver la source du mauvais fonctionnement...​
À bientôt...
ROGER2327
#3679


Mercredi 25 Merdre 137 (Apparition d'Ubu Roi, SS)
23 Prairial An CCXVIII
2010-W23-5T23:50:05Z
 

Pièces jointes

Re : Regroupement de jours en semaines

Bonjour à tous
À JCGL :

Merci pour le fichier .xls. Il me semble que notre ami devrait y trouver son compte, car votre solution est bien plus fonctionnelle que mon ébauche. Sauf s'il a une bonne raison pour ne pas utiliser un tableau croisé dynamique, je pense que brigadero devrait s'intéresser à cette solution.​
Bonne journée.
ROGER2327
#3680


Jeudi 26 Merdre 137 (Sainte Barbaque, naïade, SQ)
24 Prairial An CCXVIII
2010-W23-6T07:00:13Z
 
Re : Regroupement de jours en semaines

Bonjour à tous,
Salut Roger,

Comme déjà écrit :
Je vous laisse mettre la formule qui (vous) convient dans la colonne 'Semaine"

en colonne C :utilisation de la fonction native NO.SEMAINE() et masquée par "Grouper".

Nous savons tous qu'elle ne correspond pas à la norme ISO; je ne traite ici que le "Regroupement".

A+ à tous
 
Re : Regroupement de jours en semaines

Bonjour à tous!

Tout d'abord merci à vous pour vos aides qui m'ont bien avançé.

Maintenant je me confronte à un nouveau pb dont je vous avais parlé qui est le suivant :
Je veux voir si le montant d'un jour férié a un impact sur un montant hebdomadaire, c'est pour cela que tout d'abord je veux regrouper les semaines entre elle.

Je met dans une colonne si un jour est férié ou non (retourne un booléen)

Maintenant, làoù il faudrait que vous m'aidiez, serait que dans ma feuille 2, si telle ou telle semaine contient un jour férié cela retourne également "Vrai" ou "Faux" (en code vba)
A partir de ce moment là, je vais comparer le montant moyen de la semaine ac un jour férié avec la moyenne des deux montants moyens des semaines qui entourent cette semaine là. (semaine S-1 et semaine S+1)
Et ensuite je vais voir si l'écart entre ces deux montants est significatifs ou pas. (en utilisant la loi normale centré et la densité de probabilité)

Merci encore.

je vous joins en pièce jointe l'avancement. (qui utilise ce que m'a fait roger2327).

brigadero
 

Pièces jointes

Re : Regroupement de jours en semaines

Merci beaucoup JCL mais le TCD ne m'interesse vraiment pas...
car mon programme doit marcher pour toute les années, avec des jours fériés qui changent, c'est pour cela que j'ai une fonction "férié" pour les détécter en fonction de la date...


Roger 2327 comment puis-je intégrer à votre code le fait que si j'ai un jour férié dans ma semaine "X", je la sélectionne et je la compare à la moyenne des des semaines qui l'entoure...
 
Re : Regroupement de jours en semaines

Bonjour à tous,

Mon grain de sel : si tu as besoin d'aide pour tout faire, et donc pour tout maintenir derrière en VBA... c'est que ce n'est surement pas la solution qu'il te faut...

Au vu des qq pages que j'ai parcouru, tu as écarté d'entrée les solutions "faciles" comme celle de la formule weeknum (ou No.semaine) avec la compilation en TCD derrière...
Qui me semble la solution la plus évidente et la plus rapide à mettre en place... or le temps semble te manquer...
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
8
Affichages
663
Réponses
0
Affichages
332
Retour