Trouver le dernier jour ouvrés de l'année

br44

XLDnaute Impliqué
Bonjour à tous ,


Je voudrais savoire si il est possible de modifier la macro suivante pour extraire le dernier jour ouvré de l'année ,afin que je me serve du rèsultat pour déclancher une macro de sauvegarde annuelle ?

Exemple : Si le dernier jour ouvrée est le mercredi 31/12 pas de soussi ,mais si le dernier jour du mois est le samedi 31 ou le dimanche 31 ,le dernier jour ouvré sera donc le vendredi 28 ou 29 date sur la quelle la macro devra se déclancher .


Voici une macro poster sur le forum par Boisgontier le 01/07/2008 qui permet de claculer le nombre de jour ouvrés :

Function NbJoursOuvres(début, fin)
Dim i As Integer, d As Long, nfériés As Integer, témoin As Boolean
Dim fériés(1 To 11)
An = Year(début)
If début > fin Then
NbJoursOuvres = 0
Else
paques = DateSerial(An, 3, 23) + ((2 * (An Mod 4) + (4 * (An Mod 7) + _
(6 * (((19 * (An Mod 19)) + 24) Mod 30) + 5))) Mod 7) + _
((19 * (An Mod 19) + 24) Mod 30) - 1
fériés(1) = DateSerial(An, 1, 1)
fériés(2) = DateSerial(An, 5, 1)
fériés(3) = DateSerial(An, 5, 8)
fériés(4) = DateSerial(An, 7, 14)
fériés(5) = DateSerial(An, 8, 15)
fériés(6) = DateSerial(An, 11, 1)
fériés(7) = DateSerial(An, 11, 11)
fériés(8) = DateSerial(An, 12, 25)
fériés(9) = paques + 1
fériés(10) = paques + 39
fériés(11) = paques + 50
NbJoursOuvres = 0
For d = début To fin
témoin = False
For i = 1 To 11
If d = fériés(i) Then témoin = True
Next i
If Weekday(d) <> 1 And Weekday(d) <> 7 And Not témoin Then NbJoursOuvres = NbJoursOuvres + 1
Next d
End If
End Function


En resumé :
1) Comment afficher le resulta dans la macro est le convertir au formar Date(jj/mm/aaaa) pour que je puisse la compare avec la date de ma cellule contenant la date du jour ?

2) Mettre la condition sur ma macro pour quelle s'enclanche de la manière suivante /

Si date de la macro 1 est ègal à la date de la cellule ("F3") alors èxècute la macro2 ?

Ci -joint ma macro :
Sub Test()

Dim Wb1 As Workbook
Dim Chemin As String


Chemin = "C:\Documents and Settings\Rimmele\Bureau\classeur2.Xls"
Set Wb1 = Workbooks.Open(Chemin)

If CDadte=Macro1 Then

ActiveWorkbook.SaveCopyAs "C:\Documents and Settings\Rimmele\Bureau\sauv1\sauv2\classeur" & Year(Wb1.Sheets(1).[F3]) & ".XLS"

End if

Wb1.Close
End Sub

Espèrant avoir ètè claire dans ma demande et vous remerciant par avance je vous dit à bientôt sur post . Amicalement BR44
 

abcd

XLDnaute Barbatruc
Re : Trouver le dernier jour ouvrés de l'année

Bonjour,

Je ne m'y connais pas en macros, mais vois si la formule suivante peut t'aider, à mettre dans une cellule au lieu de la fonction AUJOURDHUI() :

=DATE(ANNEE(AUJOURDHUI());12;31)-(JOURSEM(DATE(ANNEE(AUJOURDHUI());12;31);2)>5)-(JOURSEM(DATE(ANNEE(AUJOURDHUI());12;31);2)>6)

ou, si la date d'aujourd'hui est en A1 :
=DATE(ANNEE(A1);12;31)-(JOURSEM(DATE(ANNEE(A1);12;31);2)>5)-(JOURSEM(DATE(ANNEE(A1);12;31);2)>6)


abcd
 

br44

XLDnaute Impliqué
Re : Trouver le dernier jour ouvrés de l'année

Re:Bonjour Chris,abcd,le forum


Merçi a vous deux pour la rapiditée de vos rèponses mais le rèsultat qui s'affiche dans ma cellule est une copie donc elle ne contient aucune formule .

si j'avait le choix avec un solution vba se serais plus simple pour moi .

Je prend en compte vos sugjestion pour une prochaine fois et vous remercie de nouveaux pour vos propositions . Amicalement BR44
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Trouver le dernier jour ouvrés de l'année

Bonjour,

Code:
Sub DernierJourAn()
  an = 2011
  j = DateSerial(an, 12, 31)
  Do While Weekday(j, 2) >= 6
    j = j - 1
  Loop
  MsgBox Format(j, "dddd dd mm yyyy")
End Sub

ou 

Sub DernierJourAn2()
  an = 2011
  x = Evaluate("SERIE.JOUR.OUVRE(""" & DateSerial(an + 1, 1, 1) & """,-1)")
  MsgBox Format(x, "dddd dd mm yyyy")
End Sub

JB
Formation Excel VBA JB
 

br44

XLDnaute Impliqué
Re : Trouver le dernier jour ouvrés de l'année

Re:Bonjour Boisgontier,le forum

Merçi pour cette rèponse que je vais tester ,mais te serais -t-il possible de me donner en rèsumer quelque explication de ta macro pour que je la comprenne.

Une autres petite question tu place à quel endroit de ta macro t'es rèponses et comment tu fais la liasons avec la mienne ?


Merçi d'avance et à plus .Amicalement br44
 

br44

XLDnaute Impliqué
Re : Trouver le dernier jour ouvrés de l'année

Re:Rebonjour à tous ,


Bon je vient de tester ta première proposition et cela fonctionne . Il ne me reste plus qu'à trouver le moyen de recupèrer le rèsultat de la MsgBox et de la placer comme condition à ma macro .

Si tu as une idée n'hèsite pas de me le faire savoir ,car je dèbute en vba .

Te remerciant par avance pour le coup de main je te dis à plus .Amicalement Br44
 

br44

XLDnaute Impliqué
Re : Trouver le dernier jour ouvrés de l'année

Re: bonjour Boisgontier,le forum


Juste pour vous dire quand rèflèchissant sur mon soussi je croire avoire trouver se qui bloque .

il faut remplacer la derniernière ligne de la macro (MsgBox) par une variable dates .

Ceci afin que je puisse la remprendre avec la variable CDate , et que la compare avec la cellue ("F3") de ma macro .

Si vous avez une idée sur cette procèdure cela me rendrait service .


En vous remerciant par avence je vous dit à bientôt sur se fil .Amicelement BR44
 

br44

XLDnaute Impliqué
Re : Trouver le dernier jour ouvrés de l'année

Re:Bonsoir Chris ,le forum


Je viens de lire ton message est je te remerçie pour cette rèponse . Il se trouve quand fouillant sur le forum j'ai lu un poste (Wiki page 6 par michelXLd) qui traite de se dossier est donc je vient de modifier ma macro de la manière suivante :

Sub Test()
Dim Wb1 As Workbook
Dim Chemin As String

Dim MaVariable As String

Chemin = "C:\Documents and Settings\Rimmele\Bureau\classeur2.Xls"
Set Wb1 = Workbooks.Open(Chemin)

An = 2009
j = DateSerial(An, 12, 31)
Do While Weekday(j, 2) >= 6
j = j - 1
Loop
Mavaraible = Format(j, "dddd dd mm yyyy")


ActiveWorkbook.SaveCopyAs "C:\Documents and Settings\Rimmele\Bureau\sauv1\sauv2\classeur" & Year(Wb1.Sheets(1).[F3]) & ".XLS"

Wb1.Close
End Sub

Maintenant il ne reste plus que la condition à rèaliser .

Si tu as une idée voilà se que je voudrais :

Si la variable est ègal à la valeur de la cellule("F3") alors dèclancher la macro .

J'ai essayer ceci :

if MaVariable = Wb1.Sheets("Feuil1").Range("F3").Value Then

......

End If


Mais cela ne marche pas ?


en espèrant avoire ètè claire et te remerciant par avance du coup de main je te dis à à bientôt.Amicalement Br44
 

br44

XLDnaute Impliqué
Re : Trouver le dernier jour ouvrés de l'année

Re:Bonjour à tous ,

Je voudrais savoir comment ècrire en vba la condition suivante :

Si la valeure de "Mavariable" est ègal à la Valeure de la cellule "F3" alors exexcuter ma macro ?

Voici des infos complèmentaires:

Mavariable As String

Mavariable = Format (j,"dddd dd mm yyyy")

ma cellule "F3" Affiche = une date 04/05/06 (exemple )

Donc en rèsumer :

Si ma cellule "F3" est ègal à la date de "Ma variable " Alors dèclancher la macro .

Espèrant avoir ètè claire dans ma demande et vous remerciant par avance je vopus dit à bientôt sur se fil . Amicalement Br44
 

ChTi160

XLDnaute Barbatruc
Re : Trouver le dernier jour ouvrés de l'année

Salut br44

avec aussi peu d'info Lol
Voila ce que j'ai compris

Code:
With WorkSheets("Feuil1")
If Format(CDate(.Range("F3").value),"ddd dd mm yyyy")= Mavariable then
 MsgBox "Coucou"
End if
End With

en espérant avoir fait avancer le chimilimblic

Bonne fin de Soirée
 

br44

XLDnaute Impliqué
Re : Trouver le dernier jour ouvrés de l'année

Re: Rebonjour Chti160 ,le forum


Bon après avoire tester te proposition ,je t'annonce que cela ne fonctionne pas .


Bon je vais essayer de t'expliquer en quelques mots se que je veux .


Je voudrais pouvoire enclanche ma macro qu'une seul fois par an est ceci le dernier jour ouvré de l'année.

Pour se faire je recherche le dernier jour de l'année de la manière suivante :

'recherche le dernier jour ouvré de l'anné An = 2007
j = DateSerial(An, 12, 31)
Do While Weekday(j, 2) >= 6
j = j - 1
Loop
MsgBox Format(j, "dddd dd mm yyyy")
'je récuper le rèsultat sous forme de variable
Mavaraible = Format(j, "dddd dd mm yyyy")


Je voudrais me servir de ma variable comme rèfèrence à ma condition pour pouvoir la compare avec la date situé dans la cellule "F3" du classeur source ,afin de dèclancher la macro suivante :

Sub Test()
Dim Wb1 As Workbook
Dim Chemin As String
Dim MaVariable As String

Chemin = "C:\Documents and Settings\Rimmele\Bureau\classeur2.Xls"
Set Wb1 = Workbooks.Open(Chemin)


ActiveWorkbook.SaveCopyAs "C:\Documents and Settings\Rimmele\Bureau\sauv1\sauv2\classeur" & Year(Wb1.Sheets(1).[F3]) & ".XLS"
Wb1.Close
End Sub

Mon problème est de crèer la condition pour que la macro s'enclance que si la date situèe dans la cellule "F3" soit ègal au dernier jour ouvré de l'anée ?

J'èspère que cet explication sera plus claire et que cela est possible à rèaliser .

Te remerciant par avance pour toute proposition èventuel je te dis à plus et merçi encore .Amicelement BR44
 

pierrejean

XLDnaute Barbatruc
Re : Trouver le dernier jour ouvrés de l'année

bonjour a tous

A tester

dans un module

Code:
Function derjourouvre(An As Integer)
j = DateSerial(An, 12, 31)
Do While Weekday(j, 2) >= 6
j = j - 1
Loop
derjourouvre = j
End Function

dans le module de feuille

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$F$3" Then
 If CDate(Target.Value) = derjourouvre(Year(Date)) Then
  MsgBox ("coucou") 'remplacer par call tamacro
 End If
End If
End Sub

et dans F3:

=AUJOURDHUI()
 

Discussions similaires

Statistiques des forums

Discussions
312 361
Messages
2 087 626
Membres
103 611
dernier inscrit
sebboes