Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Nombre de vendredi 13 de ma naissance jusqu'à aujourdhui

34 réponses
Avatar
Tatanka
Bonsoir,

J'ai adapté une macro trouvée ici :
http://www.docmemo.com/divers/vendredi13.php

me permettant d'obtenir la liste de tous les « vendredi 13 »
de 1945 jusqu'à 2011. Le résultat me satisfait mais par
souci d'apprentissage, comment la modifier pour que cette
liste ne couvre que la période du 10 mai 1945 jusqu'à
la date du jour ? Voici la macro :

Sub Vendredi_13()
Dim Année, Mois, Compteur, NomMois(12)
NomMois(1) = "janvier"
NomMois(2) = "février"
NomMois(3) = "mars"
NomMois(4) = "avril"
NomMois(5) = "mai"
NomMois(6) = "juin"
NomMois(7) = "juillet"
NomMois(8) = "août"
NomMois(9) = "septembre"
NomMois(10) = "octobre"
NomMois(11) = "novembre"
NomMois(12) = "décembre"
For Année = 1945 To 2011
For Mois = 1 To 12
If Weekday(Mois & "/13/" & Année) = 6 Then
Range("A1").Offset(Compteur, 0) = "13 " _
& NomMois(Mois) & " " & Année
Compteur = Compteur + 1
End If
Next Mois
Next Année
End Sub

4 réponses

1 2 3 4
Avatar
Tatanka
Aussi inattendu qu'impressionnant !
SOMMEPROD, c'est LA formule.

"michdenis" a écrit dans le message de news: ihhco6$beu$
Bonjour,

Si tu veux seulement calculer le nombre de vendredi 13 entre 2 dates

Debut : Nom de la cellule contenant la date du début
Fin : Nom de la cellule contenant la date de la fin

=SOMMEPROD(((JOUR(LIGNE(INDIRECT(Debut&":"&Fin))))*(((JOURSEM(LIGNE(INDIRECT(Debut&":"&Fin));1)=6)))))

OU

Validation matricielle :
=SOMME(SI(((JOUR(LIGNE(INDIRECT(Debut&":"&Fin))))*(((JOURSEM(LIGNE(INDIRECT(Debut&":"&Fin));1)=6)*1)))=1;1))


MichD
--------------------------------------------

Avatar
Tatanka
Joyeux anniversaire Jacquouille,
Vino avec femme parfumée je te souhaite ;-)

Serge

"Jacquouille" a écrit dans le message de news: 4d3c4ea0$0$14253$
Ah Sommeprod, quelle symphonie, et ....quelle rapidité

--
Jacquouille

" Le vin est au repas ce que le parfum est à la femme."

"michdenis" a écrit dans le message de groupe de discussion : ihhco6$beu$
Bonjour,

Si tu veux seulement calculer le nombre de vendredi 13 entre 2 dates

Debut : Nom de la cellule contenant la date du début
Fin : Nom de la cellule contenant la date de la fin

=SOMMEPROD(((JOUR(LIGNE(INDIRECT(Debut&":"&Fin))))*(((JOURSEM(LIGNE(INDIRECT(Debut&":"&Fin));1)=6)))))

OU

Validation matricielle :
=SOMME(SI(((JOUR(LIGNE(INDIRECT(Debut&":"&Fin))))*(((JOURSEM(LIGNE(INDIRECT(Debut&":"&Fin));1)=6)*1)))=1;1))


MichD
--------------------------------------------

Avatar
Jacquouille
.... In vino veritas ..... -)
Merci bien pour tes bons oeufs

--
Jacquouille

" Le vin est au repas ce que le parfum est à la femme."

"Tatanka" a écrit dans le message de groupe de
discussion : ihhukd$ol5$
Joyeux anniversaire Jacquouille,
Vino avec femme parfumée je te souhaite ;-)

Serge

"Jacquouille" a écrit dans le message de news:
4d3c4ea0$0$14253$
Ah Sommeprod, quelle symphonie, et ....quelle rapidité

--
Jacquouille

" Le vin est au repas ce que le parfum est à la femme."

"michdenis" a écrit dans le message de groupe de
discussion : ihhco6$beu$
Bonjour,

Si tu veux seulement calculer le nombre de vendredi 13 entre 2 dates

Debut : Nom de la cellule contenant la date du début
Fin : Nom de la cellule contenant la date de la fin

=SOMMEPROD(((JOUR(LIGNE(INDIRECT(Debut&":"&Fin))))*(((JOURSEM(LIGNE(INDIRECT(Debut&":"&Fin));1)=6)))))

OU

Validation matricielle :
=SOMME(SI(((JOUR(LIGNE(INDIRECT(Debut&":"&Fin))))*(((JOURSEM(LIGNE(INDIRECT(Debut&":"&Fin));1)=6)*1)))=1;1))


MichD
--------------------------------------------







Avatar
michdenis
| sachant que tous les 28
| ans (10227 jours) ça se répète

Merci Sam, c'est le genre de trucs que j'oublie constamment!
;-)






MichD
--------------------------------------------
"michel ou sam" a écrit dans le message de groupe de discussion : 4d3c62d2$0$7725$

Bonjour,
en reprenant ta macro, j'ai réussi à gagner qq ms en sachant que tous les 28
ans (10227 jours) ça se répète
de 47 ms je suis passé à 31 ms
Bon, il y aura des précautions à prendre si on change de date.

Sub Vendredi_13modif()
Dim Année As Long, T(), A As Long
Dim Debut As Long, Fin As Long, D As Long
D = GetTickCount
Debut = CDate("22/03/1954")
Final = Date
Fin = Application.WorksheetFunction.Min(Final, Debut + 10227)
For Année = Debut To Fin
If Weekday(Année) = 6 And Day(Année) = 13 Then
ReDim Preserve T(A)
T(A) = Année
A = A + 1
End If
Next
Année = T(A - 48) + 10227
While Année < Final
ReDim Preserve T(A)
T(A) = Année
A = A + 1
Année = T(A - 48) + 10227
Wend
Application.ScreenUpdating = False
Application.EnableEvents = False
With Range("B1").Resize(UBound(T) + 1)
.NumberFormat = "dddd dd mmmm yyyy"
.Value = Application.Transpose(T)
.EntireColumn.AutoFit
End With
Application.ScreenUpdating = True
Application.EnableEvents = True
Range("B100") = (GetTickCount - D) / 1000 & " sec"

Michel

"michdenis" a écrit dans le message de news:
ihhj47$rgf$
Si tu recherches la vitesse, il y a aussi ceci :

'Déclaration de l'Api dans le haut du module :
Declare Function GetTickCount& Lib "kernel32" ()
'--------------------------------------------
Sub Liste_Vendredi_13()
Dim Année As Long, T(), A As Long
Dim Debut As Long, Fin As Long, D As Long

D = GetTickCount
Debut = CDate("22/03/1954")
Fin = Date

For Année = Debut To Fin
If Weekday(Année) = 6 And Day(Année) = 13 Then
ReDim Preserve T(A)
T(A) = Année
A = A + 1
End If
Next
Application.ScreenUpdating = False
Application.EnableEvents = False
With Range("A1").Resize(UBound(T) + 1)
.NumberFormat = "dddd dd mmmm yyyy"
.Value = Application.Transpose(T)
.EntireColumn.AutoFit
End With
Application.ScreenUpdating = True
Application.EnableEvents = True
MsgBox (GetTickCount - D) / 1000 & " sec"
End Sub
'--------------------------------------------


MichD
--------------------------------------------

1 2 3 4