Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Application.WorksheetFunction.WorkDay !!!

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

Lu K

XLDnaute Occasionnel
Bonjour à tous,

J'utilise sous excel 2007 (version 12) le code suivant = "Application.WorksheetFunction.WorkDay" qui fonctionne super bien ! Mais dès que j'utilise mon fichier sur un autre PC avec version 2003 ou antérieur, ça ne marche pas ! Sachant que mon but est de créer un fichier partagé !

Savez vous pourquoi ? et qu'elle peut être la solution ?

Merci pour vos réponse.
 
Re : Application.WorksheetFunction.WorkDay !!!

Re

J'ai éssayé ça :

If Val(Application.Version) < 12 Then 'version windows
'version2003
ListView1.ListItems(ligne2).ListSubItems(12).Text = CDate(Evaluate("WORKDAY(" & Val(Planning.ListView1.ListItems(ligne2).ListSubItems(11).Text) & "," & CInt(Planning.ListView1.ListItems(ligne2).ListSubItems(5).Text - 1) & "," & Sheets("Données").Range("A1:A150") & ")"))
Else
'version2007
ListView1.ListItems(ligne2).ListSubItems(11).Text = Application.WorksheetFunction.WorkDay(Val(Planning.ListView1.ListItems(ligne1).ListSubItems(12).Text), 1, Sheets("Données").Range("A1:A150"))
End If

sans aucun succés pour la version 2003 mais Ok pour 2007
 
Re : Application.WorksheetFunction.WorkDay !!!

Bonsoir LuK, Hippolite, le forum,

Sur XL2003, il n'y a pas d'équivalent macro de la fonction Workday (ou serie.jours.ouvres), il faut donc utiliser Evaluate.

Après quelques essais Evaluate(Workdays...) j'ai constaté que:
la date initiale (1er paramètre) doit être au format numérique
La plage de jours fériés (3ème paramètre) ne semble fonctionner qu'avec un nom.

Tu peux essayer tout d'abord de nommer la plage de jours fériés par exemple "Fer" et modifier ton instruction comme suit:
Code:
ListView1.ListItems(ligne2).ListSubItems(12).Text = CDate(Evaluate("WORKDAY(" & [COLOR=red]Cdbl[/COLOR](Planning.ListView1.ListItems(ligne2).ListSubIt ems(11).Text) & "," & CInt(Planning.ListView1.ListItems(ligne2).ListSubI tems(5).Text - 1) & [COLOR=red]",Fer )"[/COLOR][COLOR=black]))[/[/COLOR]CODE]
 
Si ça ne marche pas, envoie un exemple, ce sera plus facile de tester.
 
@+
 
Gael
 
Re : Application.WorksheetFunction.WorkDay !!!

Bonjour à tous,
je remonte ce fil de discussion car vba me retourne une erreur lorsque j'essaie d'utiliser la fonction workday. J'ai essayé de faire comme indiqué par Gael mais je rencontre le même problème mon code de fonctionne pas.
Voici ci-dessous le code en question:
Sub test()

With Worksheets("param")
Dim holidays As Variant
holidays = Array(.Range("M4").Value, .Range("M5").Value, .Range("M6").Value, .Range("M7").Value, .Range("M8").Value, .Range("M9").Value, .Range("M10").Value, .Range("M11").Value, .Range("M12").Value, .Range("M13").Value, .Range("M14").Value)
End With

dateDbl = CDbl(CDate("01/01/2014"))
number = CInt(1)
MsgBox (Evaluate("workDay(" & dateDbl & "," & number & "," & " holidays)"))

End Sub

Avec la fonction evaluate l'erreur retournée est "mismatch" alors que lorsque je n'utilise pas evaluate on m'indique "unable to get the workday property...".

j'espère que vous pourrez m'éclairer car je n'y comprends rien du tout
 
Re : Application.WorksheetFunction.WorkDay !!!

Bonjour,

pas testé, mais essaye peut être comme ceci :
Code:
MsgBox (Evaluate("=workDay(" & dateDbl & "," & Number & "," & holidays & ")"))
bon après midi
@+
 
Re : Application.WorksheetFunction.WorkDay !!!

Finalement en utilisant directement application.worksheetfunction.workday cela fonctionne alors qu'au départ cela ne fonctionnait pas. Ce sont les mystères d'Excel et de vba. Par contre en ce qui concerne la fonction evaluate cela ne fonctionne toujours pas.
Cela n'est pas très grave.

Merci en
 
Re : Application.WorksheetFunction.WorkDay !!!

Pour ceux que ça intéresse le code des appels à la fonction workday qui fonctionnent:
Sub test()

With Worksheets("param")
Dim holidays As Variant

holidays = Array(CDbl(.Range("M4").Value), CDbl(.Range("M5").Value), CDbl(.Range("M6").Value), CDbl(.Range("M7").Value), CDbl(.Range("M8").Value), CDbl(.Range("M9").Value), CDbl(.Range("M10").Value), CDbl(.Range("M11").Value), CDbl(.Range("M12").Value), CDbl(.Range("M13").Value), CDbl(.Range("M14").Value))
End With

dateDbl = CDbl(CDate("01/01/2014"))
number = 1
a = Excel.WorksheetFunction.workday(dateDbl, Int(number), holidays)
b = Application.WorksheetFunction.workday(dateDbl, Int(number), holidays)
aa = Excel.WorksheetFunction.workday(dateDbl, number, holidays)
bb = Application.WorksheetFunction.workday(dateDbl, number, holidays)
c = workdayPerso(dateDbl, Int(number), holidays)

MsgBox (a & " " & b & " " & aa & " " & bb)


End Sub
 
Re : Application.WorksheetFunction.WorkDay !!!

Dans une procédure sub, je n'ai aucun soucis à appeler la workday. Par contre, l'appel à la fonction workday ne fonctionne pas quand elle est appelée par une fonction perso. J'essaie désespérement de régler le problème sans succès. Voici mon code, toute aide est la bienvenue.

'La fonction BoMonth fait appel à la fonction workday, elle permet d'obtenir le premier jour ouvré du mois.
Function BoMonth(monthNum, year)


Dim holidays As Variant
With Worksheets("param")
holidays = Array(.Range("M4").Value, .Range("M5").Value, .Range("M6").Value, .Range("M7").Value, .Range("M8").Value, .Range("M9").Value, .Range("M10").Value, .Range("M11").Value, .Range("M12").Value, .Range("M13").Value, .Range("M14").Value)
End With
Dim tempDateDbl As Double
Dim tempDate As Date

tempDate = CDate("1/" & monthNum & "/" & year)

tempDateDbl = CDbl((tempDate))
number = 1
BoMonth = Application.WorksheetFunction.workday(tempDate, 1, holidays)
If (isDayOff(tempDate)) Then
' tempDate = CDate(temp)
End If
BoMonth = tempDate
End Function

'quand j'appelle la fonctionne BoMonth dans la procédure sub, le code s'arrête car il n'arrive plus à appeler correctement la fonction worday
Sub test()

With Worksheets("param")
Dim holidays As Variant

holidays = Array(CDbl(.Range("M4").Value), CDbl(.Range("M5").Value), CDbl(.Range("M6").Value), CDbl(.Range("M7").Value), CDbl(.Range("M8").Value), CDbl(.Range("M9").Value), CDbl(.Range("M10").Value), CDbl(.Range("M11").Value), CDbl(.Range("M12").Value), CDbl(.Range("M13").Value), CDbl(.Range("M14").Value))
End With

dateDbl = CDbl(CDate("01/01/2014"))
number = 1

MsgBox (BoMonth(12, 2013))




End Sub
 
- 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

  • Question Question
Microsoft 365 Remplissage auto
Réponses
14
Affichages
263
Réponses
1
Affichages
450
W
Réponses
38
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…