XL 2016 retranscrire des périodes (date début-date de fin) sur un calendrier

  • Initiateur de la discussion Initiateur de la discussion OA29
  • 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 !

OA29

XLDnaute Nouveau
1667053460821.png
 

Pièces jointes

Bonjour,

Deux propositions par power query (intégré à votre version).
Je ne sais quelle requête sera la plus rapide sur de grands volumes de données.
Si vous les testez, merci de nous signaler laquelle est la plus rapide des deux requêtes.

[aparté]
Hello @mapomme
[/aparté]
 

Pièces jointes

Merci à vous deux pour vos réponses.

@ mapomme : ça fonctionne même si, pour le moment, je ne comprends pas vraiment la formule.

@ Hasco : je n'ai pas réussi à faire fonctionner la proposition et donc impossible de comparer les deux options.

@ tous : j'avais oublié une subtilité sur les périodes : la dernière peut être en cours, c'est à dire qu'il y a une date de début mais pas de date de fin ; la date de fin à prendre en compte serait alors celle du jour (aujourd'hui()) afin de tenir le calendrier à jour dans le suivi des absences.

encore merci pour vos retours,
bonne soirée
 
Re,
@ tous : j'avais oublié une subtilité sur les périodes : la dernière peut être en cours, c'est à dire qu'il y a une date de début mais pas de date de fin ; la date de fin à prendre en compte serait alors celle du jour (aujourd'hui()) afin de tenir le calendrier à jour dans le suivi des absences.
Nouvelle formule en G2 à copier vers le bas :
VB:
=REPT("absent";SOMMEPROD(--((E2>=A$2:A$999)*(E2<=SI((A$2:A$999<>"")*(B$2:B$999="")>0;AUJOURDHUI();B$2:B$999))))>0)

Voir fichier joint.
 

Pièces jointes

Dernière édition:
Bonjour à tous
@ Hasco : je n'ai pas réussi à faire fonctionner la proposition et donc impossible de comparer les deux options.

Mais encore ? As-tu actualisé ?

Si tu as 2016 il n'y a aucune raison pour ce cela ne fonctionne pas

Le fichier modifié avec une ligne sans date de fin
 

Pièces jointes

Bonjour @goube 🙂,
Quelle est l'utilité des signes -- dans la formule SOMMEPROD et dans quel cas l'utiliser ?

C'est très bien vu car dans mes formules le "--" est inutile.
C'est une question d'habitude. Et comme on dit: "ça ne mange de pain".

Quand l'expression entre les parenthèses de SOMMEPROD ne renvoie que des VRAI ou FAUX, SOMMEPPROD ne sait pas faire la somme. SOMMEPROD renvoie 0. Pour que SOMMEPROD soit correcte il faut transformer les VRAI et FAUX en nombres. On peut le faire en prenant deux fois leur opposé (--), en les multipliant par 1 (*1) ou encore en utilisant la fonction N().

Dans mes précédentes formules, les termes de la SOMMEPROD sont des produits de deux valeurs booléennes. Le produit de deux valeurs booléennes est converti automatiquement par excel en nombres (0 ou 1). Donc les "--" sont inutiles.

Voir illustration dans le fichier joint.
 

Pièces jointes

Dernière édition:
Bonjour le fil, le forum,

Pour faire bon poids voyez cette macro dans le code de la feuille :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim P As Range, tabP, Q As Range, tabQ, datmin&, datmax&, d As Object, i&, deb&, fin&, dat
Set P = [A1].CurrentRegion.Resize(, 2): tabP = P.Value2 'matrice, plus rapide
Set Q = [E1].CurrentRegion.Resize(, 2): tabQ = Q.Value2 'matrice, plus rapide
datmin = Application.Min(Q.Columns(1))
datmax = Application.Max(Q.Columns(1))
'---mémorise les dates du tableau P---
Set d = CreateObject("Scripting.Dictionary")
For i = 2 To UBound(tabP)
    deb = Val(tabP(i, 1))
    If deb > 0 Then
        deb = IIf(deb > datmin, deb, datmin)
        fin = Val(tabP(i, 2))
        If fin = 0 Then fin = Date
        fin = IIf(fin < datmax, fin, datmax)
        For dat = deb To fin
            d(dat) = "absent"
        Next dat
    End If
Next i
'---remplissage du tableau Q---
For i = 2 To UBound(tabQ)
    tabQ(i, 2) = d(tabQ(i, 1))
Next i
'---restitution---
Application.EnableEvents = False 'désactive les évènements
Q = tabQ
Application.EnableEvents = True 'réactive les évènements
End Sub
Elle se déclenche automatiquement quand on modifie ou valide une cellule quelconque.

A+
 

Pièces jointes

Comparaison des durées des calculs :

- formules matricielles du post #6 => 3,2 millièmes de seconde, pour cela j'ai rendu les formules volatiles

- calcul du tableau VBA du post #12 => 0,45 millième de seconde.

La macro est rapide car elle utilise des tableaux VBA et le Dictionary.
 
- 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
21
Affichages
889
Réponses
16
Affichages
368
  • Question Question
Microsoft 365 Problème de date
Réponses
5
Affichages
220
Réponses
14
Affichages
563
Retour