Nombre de vendredi 13 de ma naissance jusqu'à aujourdhui
34 réponses
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
| 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 '--------------------------------------------
| 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$ba4acef3@reader.news.orange.fr...
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" <michdenis@hotmail.com> a écrit dans le message de news:
ihhj47$rgf$1@speranza.aioe.org...
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
'--------------------------------------------
| 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 '--------------------------------------------