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

VBA : champ calculé dans un userform...

5 réponses
Avatar
Domi
Bonsoir à tous,
J'utilise dans une feuille de calcul cette formule, qui me renvoie une date
= DatePF - la valeur numérique contenu en E5, le tout en sautant les jours
fériés qui figurent dans la plage joursferies.
=SERIE.JOUR.OUVRE(DatePF;-E5;joursferies)

JE voudrais faire la même chose dans un userform...
Dans un textebox (Me.datePF) je rentre une date
Et dans le textbox Me.Resultat s'affiche la nouvelle date... en tenant
toujours compte des jours fériés, je pourrais nommer aussi la valeur
contenue en E5.
Pas très doué avec VBA, quelqu'un aurait-il la solution à me proposer ?
Merci
Domi

5 réponses

Avatar
MichDenis
Bonjour Domi,


=SERIE.JOUR.OUVRE(DatePF;-E5;joursferies)

Remplace cela par ceci :

(pas tester)

if isDate(me.textbox1) then
Msgbox SERIE.JOUR.OUVRE(cdate(Me.textbox1);-E5;joursferies)
end if


Salutations!




"Domi" a écrit dans le message de news: edfS%

Bonsoir à tous,
J'utilise dans une feuille de calcul cette formule, qui me renvoie une date
= DatePF - la valeur numérique contenu en E5, le tout en sautant les jours
fériés qui figurent dans la plage joursferies.
=SERIE.JOUR.OUVRE(DatePF;-E5;joursferies)

JE voudrais faire la même chose dans un userform...
Dans un textebox (Me.datePF) je rentre une date
Et dans le textbox Me.Resultat s'affiche la nouvelle date... en tenant
toujours compte des jours fériés, je pourrais nommer aussi la valeur
contenue en E5.
Pas très doué avec VBA, quelqu'un aurait-il la solution à me proposer ?
Merci
Domi
Avatar
Domi
J'ai fait cela comme test :
J'ai remplacé la ref de la cellule E5 par une valeur et j'ai mis des "," à
la place des ";"
La syntaxe est semble-t-il reconnu mais après saisie d'une date ça plante
sur la ligne avec "Erreur d'execution 424 " Objet recquis....
Où est l'erreur ?
Merci
Domi



Private Sub Aff_dateSortie_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If IsDate(Aff_dateSortie) Then
MsgBox SERIE.JOUR.OUVRE(CDate(Aff_dateSortie), -10, joursferies)
End If
End Sub



"MichDenis" a écrit dans le message de
news:
Bonjour Domi,


=SERIE.JOUR.OUVRE(DatePF;-E5;joursferies)

Remplace cela par ceci :

(pas tester)

if isDate(me.textbox1) then
Msgbox SERIE.JOUR.OUVRE(cdate(Me.textbox1);-E5;joursferies)
end if


Salutations!




"Domi" a écrit dans le message de news:
edfS%


Bonsoir à tous,
J'utilise dans une feuille de calcul cette formule, qui me renvoie une
date

= DatePF - la valeur numérique contenu en E5, le tout en sautant les jours
fériés qui figurent dans la plage joursferies.
=SERIE.JOUR.OUVRE(DatePF;-E5;joursferies)

JE voudrais faire la même chose dans un userform...
Dans un textebox (Me.datePF) je rentre une date
Et dans le textbox Me.Resultat s'affiche la nouvelle date... en tenant
toujours compte des jours fériés, je pourrais nommer aussi la valeur
contenue en E5.
Pas très doué avec VBA, quelqu'un aurait-il la solution à me proposer ?
Merci
Domi





Avatar
MichDenis
Bonjour Domi,

Désolé...la réponse était incomplète ...

En vba, tu dois ajouter la référence suivante à ton projet : atpvbaen.xls

D = CDate("12/10/2005")
G = CDate("15/12/2005")
Toto est une plage nommée de la feuille de calcul où sont listés les congés fériés.

MsgBox networkdays(D, G, Range("toto"))


Et si je transpose à ton exemple :

If Isdate(me.textbox) then
D = CDate(Aff_dateSortie)
G = CDate(Aff_dateSortie) - 10
MsgBox networkdays(D, G, range("joursferies"))
End If


Salutations!



"Domi" a écrit dans le message de news:
J'ai fait cela comme test :
J'ai remplacé la ref de la cellule E5 par une valeur et j'ai mis des "," à
la place des ";"
La syntaxe est semble-t-il reconnu mais après saisie d'une date ça plante
sur la ligne avec "Erreur d'execution 424 " Objet recquis....
Où est l'erreur ?
Merci
Domi



Private Sub Aff_dateSortie_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If IsDate(Aff_dateSortie) Then
MsgBox SERIE.JOUR.OUVRE(CDate(Aff_dateSortie), -10, joursferies)
End If
End Sub



"MichDenis" a écrit dans le message de
news:
Bonjour Domi,


=SERIE.JOUR.OUVRE(DatePF;-E5;joursferies)

Remplace cela par ceci :

(pas tester)

if isDate(me.textbox1) then
Msgbox SERIE.JOUR.OUVRE(cdate(Me.textbox1);-E5;joursferies)
end if


Salutations!




"Domi" a écrit dans le message de news:
edfS%


Bonsoir à tous,
J'utilise dans une feuille de calcul cette formule, qui me renvoie une
date

= DatePF - la valeur numérique contenu en E5, le tout en sautant les jours
fériés qui figurent dans la plage joursferies.
=SERIE.JOUR.OUVRE(DatePF;-E5;joursferies)

JE voudrais faire la même chose dans un userform...
Dans un textebox (Me.datePF) je rentre une date
Et dans le textbox Me.Resultat s'affiche la nouvelle date... en tenant
toujours compte des jours fériés, je pourrais nommer aussi la valeur
contenue en E5.
Pas très doué avec VBA, quelqu'un aurait-il la solution à me proposer ?
Merci
Domi





Avatar
Domi
Désolé mais je coince a nouveau...
En vba, tu dois ajouter la référence suivante à ton projet :
atpvbaen.xls.......???
Il faut passer par OutilsRéférences et rechercher cette valeur dans la
liste pour la cocher ? JE n'ai rien trouvé qui ressemble à cela.

J'ai tout de même éssayé sans...

If Isdate(Aff_dateSortie) then
D = CDate(Aff_dateSortie)
G = CDate(Aff_dateSortie) - 10
MsgBox networkdays(D, G, range("joursferies"))
End If

Mais j'ai une ereur sur "networkdays" : Sub ou fonction non définie

Je suis sous WK2 SP4 / Excel 2000/SP3
Merci
Domi



"MichDenis" a écrit dans le message de
news:
Bonjour Domi,

Désolé...la réponse était incomplète ...

En vba, tu dois ajouter la référence suivante à ton projet : atpvbaen.xls

D = CDate("12/10/2005")
G = CDate("15/12/2005")
Toto est une plage nommée de la feuille de calcul où sont listés les
congés fériés.


MsgBox networkdays(D, G, Range("toto"))


Et si je transpose à ton exemple :

If Isdate(me.textbox) then
D = CDate(Aff_dateSortie)
G = CDate(Aff_dateSortie) - 10
MsgBox networkdays(D, G, range("joursferies"))
End If


Salutations!



"Domi" a écrit dans le message de news:


J'ai fait cela comme test :
J'ai remplacé la ref de la cellule E5 par une valeur et j'ai mis des "," à
la place des ";"
La syntaxe est semble-t-il reconnu mais après saisie d'une date ça plante
sur la ligne avec "Erreur d'execution 424 " Objet recquis....
Où est l'erreur ?
Merci
Domi



Private Sub Aff_dateSortie_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If IsDate(Aff_dateSortie) Then
MsgBox SERIE.JOUR.OUVRE(CDate(Aff_dateSortie), -10, joursferies)
End If
End Sub



"MichDenis" a écrit dans le message de
news:
Bonjour Domi,


=SERIE.JOUR.OUVRE(DatePF;-E5;joursferies)

Remplace cela par ceci :

(pas tester)

if isDate(me.textbox1) then
Msgbox SERIE.JOUR.OUVRE(cdate(Me.textbox1);-E5;joursferies)
end if


Salutations!




"Domi" a écrit dans le message de news:
edfS%


Bonsoir à tous,
J'utilise dans une feuille de calcul cette formule, qui me renvoie une
date

= DatePF - la valeur numérique contenu en E5, le tout en sautant les
jours


fériés qui figurent dans la plage joursferies.
=SERIE.JOUR.OUVRE(DatePF;-E5;joursferies)

JE voudrais faire la même chose dans un userform...
Dans un textebox (Me.datePF) je rentre une date
Et dans le textbox Me.Resultat s'affiche la nouvelle date... en tenant
toujours compte des jours fériés, je pourrais nommer aussi la valeur
contenue en E5.
Pas très doué avec VBA, quelqu'un aurait-il la solution à me proposer ?
Merci
Domi










Avatar
MichDenis
Bonjour Domi,

Sous windows xp pro, ce fichier (ATPVBAEN.XLA) est situé à cet endroit :

C:Program FilesMicrosoft OfficeOFFICE11BibliothèqueAnalyse

Je ne sais pas ce qui se passe sur ton ordinateur, mais ce fichier devrait être présent sous excel 2000.

Si tu fais une recherche sur ton disque dur, Peux-tu le trouver ? Sinon copie toi une version de ce fichier en
provenance d'un autre ordinateur, et utilise le bouton "parcourir" de la fenêtre VBE (visual basic editor) pour
l'ajouter à la liste des bibliothèques disponibles.

Sans ce fichier, point de salut pour exécuter ces lignes de code !

Si jamais, tu ne résouts par le problème, il est toujours possible de créer une fonction personnalisée pour faire ce
travail. Voici un truc qui a été publié par Frédéric Sigonneau :

Après recopie dans un module standard de ton classeur, et tes dates de début et
fin de période étant par ex en A1 et A2, tu peux utiliser en A3 :

=NbOuvrés(A1;A2)


'--------------------------------------------
'comment compter un nbre de jours entre 2 dates saisies ds 2 cellules en
'otant les samedi,dimanche et jours feries

Function NbOuvrés&(D1, D2)
Dim Prem As Date, Der As Date, i As Date
If D1 = D2 Then
Prem = D1
If TYPEJOUR(Prem) = 0 Then NbOuvrés = 1
Exit Function
End If
Select Case D1 < D2
Case True: Prem = D1: Der = D2
Case False: Prem = D2: Der = D1
End Select
For i = Prem To Der
NbOuvrés = NbOuvrés + (TYPEJOUR(i) = 0) * -1
Next i
End Function

'--------------------------------------------
'Cette fonction renvoie 0 si le jour passé en paramètre est un jour de semaine,
'1 s'il s'agit d'un samedi ou d'un dimanche et 2 s'il s'agit d'un jour férié.
'Valide jusqu'en 2099 et pour les jours fériés français
Function TYPEJOUR(D As Date)
'L. Longre
Dim A As Integer, T As Integer
Dim LP As Date, LD As Long
Dim Toto As Long

A = Year(D)
If A > 2099 Then
TYPEJOUR = CVErr(xlErrValue)
Exit Function
End If
LD = Int(D)
If LD <= 2 Then
If LD = 1 Then TYPEJOUR = 2
Exit Function
End If
T = (((255 - 11 * (A Mod 19)) - 21) Mod 30) + 21
LP = DateSerial(A, 3, 2) + T + (T > 48) _
+ 6 - ((A + A 4 + T + (T > 48) + 1) Mod 7)
Select Case D
' Jours fériés mobiles
Case Is = LP, Is = LP + 38, Is = LP + 49
TYPEJOUR = 2
' Jours fériés fixes
Case Is = DateSerial(A, 1, 1), Is = DateSerial(A, 5, 1), _
Is = DateSerial(A, 5, 8), Is = DateSerial(A, 7, 14), _
Is = DateSerial(A, 8, 15), Is = DateSerial(A, 11, 1), _
Is = DateSerial(A, 11, 11), Is = DateSerial(A, 12, 25)
TYPEJOUR = 2
Case Else
' Samedi ou dimanche
If Weekday(D, vbMonday) >= 6 Then TYPEJOUR = 1
End Select

End Function
'--------------------------------------------



Salutations!




"Domi" a écrit dans le message de news: %
Désolé mais je coince a nouveau...
En vba, tu dois ajouter la référence suivante à ton projet :
atpvbaen.xls.......???
Il faut passer par OutilsRéférences et rechercher cette valeur dans la
liste pour la cocher ? JE n'ai rien trouvé qui ressemble à cela.

J'ai tout de même éssayé sans...

If Isdate(Aff_dateSortie) then
D = CDate(Aff_dateSortie)
G = CDate(Aff_dateSortie) - 10
MsgBox networkdays(D, G, range("joursferies"))
End If

Mais j'ai une ereur sur "networkdays" : Sub ou fonction non définie

Je suis sous WK2 SP4 / Excel 2000/SP3
Merci
Domi



"MichDenis" a écrit dans le message de
news:
Bonjour Domi,

Désolé...la réponse était incomplète ...

En vba, tu dois ajouter la référence suivante à ton projet : atpvbaen.xls

D = CDate("12/10/2005")
G = CDate("15/12/2005")
Toto est une plage nommée de la feuille de calcul où sont listés les
congés fériés.


MsgBox networkdays(D, G, Range("toto"))


Et si je transpose à ton exemple :

If Isdate(me.textbox) then
D = CDate(Aff_dateSortie)
G = CDate(Aff_dateSortie) - 10
MsgBox networkdays(D, G, range("joursferies"))
End If


Salutations!



"Domi" a écrit dans le message de news:


J'ai fait cela comme test :
J'ai remplacé la ref de la cellule E5 par une valeur et j'ai mis des "," à
la place des ";"
La syntaxe est semble-t-il reconnu mais après saisie d'une date ça plante
sur la ligne avec "Erreur d'execution 424 " Objet recquis....
Où est l'erreur ?
Merci
Domi



Private Sub Aff_dateSortie_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If IsDate(Aff_dateSortie) Then
MsgBox SERIE.JOUR.OUVRE(CDate(Aff_dateSortie), -10, joursferies)
End If
End Sub



"MichDenis" a écrit dans le message de
news:
Bonjour Domi,


=SERIE.JOUR.OUVRE(DatePF;-E5;joursferies)

Remplace cela par ceci :

(pas tester)

if isDate(me.textbox1) then
Msgbox SERIE.JOUR.OUVRE(cdate(Me.textbox1);-E5;joursferies)
end if


Salutations!




"Domi" a écrit dans le message de news:
edfS%


Bonsoir à tous,
J'utilise dans une feuille de calcul cette formule, qui me renvoie une
date

= DatePF - la valeur numérique contenu en E5, le tout en sautant les
jours


fériés qui figurent dans la plage joursferies.
=SERIE.JOUR.OUVRE(DatePF;-E5;joursferies)

JE voudrais faire la même chose dans un userform...
Dans un textebox (Me.datePF) je rentre une date
Et dans le textbox Me.Resultat s'affiche la nouvelle date... en tenant
toujours compte des jours fériés, je pourrais nommer aussi la valeur
contenue en E5.
Pas très doué avec VBA, quelqu'un aurait-il la solution à me proposer ?
Merci
Domi