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

Function ... rafraichissement ?

13 réponses
Avatar
j-pascal
Bonjour,

Apparemment, j'ai un petit pb de "rafraissement" avec la fonction
suivante :
'----
Function SheetName() As Date
Dim Mois As String, Dat As Date

Application.Volatile
Mois = ActiveSheet.Name

Dat = CDate("01/" & Mois & "/" & Year(Date) + 1)
Select Case Application.Weekday(Dat)
Case 1
SheetName = Dat + 3

etc...
'----

après avoir recopié une formule liée à cette fonction, dans toutes les
feuilles, mes calculs ne s'actualisent pas avec le nom de l'onglet.
Actuellement, dans chaque feuille, je me retrouve avec le même mois !

J'ai ajouté un DoEvents, mais en vain ...

Merci pour votre aide,

JP

3 réponses

1 2
Avatar
j-pascal
Dispos ?? Mais je suis toujours dispos !
Ce "Peut-être une autre fois ..." me laisse à penser que tu as vu un
truc qui clochait dans ma "trouvaille" et que je ne suis pas assez
attentif pour le voir moi-même ou le lire entre tes lignes ...
JP
...peut être une autre fois, qd tu seras plus dispos!


j-pascal a écrit :
Euréka !!!

J'ai mis ça dans "ThisWorkbook" :

'------
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Calculate
End Sub
'------

Et ça semble fonctionner "parfaitement" !

JP


adapte ceci
essaie déjà:

Function testn() As String

testn = Application.Caller.Parent.Name

End Function


j-pascal a écrit :
Ok, mais alors ce n'est pas la feuille active qu'il me faut mais la
feuille sélectionnée ou plutôt il faudrait que la feuille sélectionnée
devienne la feuille active.
Faut-il passer par un "Private Sub Workbook_SheetActivate(ByVal Sh As
Object)" ?

@+ ?

JP

Oui bin ca change rien
Mois = ActiveSheet.Name
Donc il n'y en a qu'un
ou j'ai rien compris (j'ai cette réputation..lol)

Activesheet c'est la feuille active donc pas toutes, mais bien une
seule, celle active!

à+

-- lSteph


j-pascal a écrit :
Bonsoir Stéphane,

J'ai cette réputation (de ne donner que des bouts de code) ? Je vais
essayer de m'améliorer ...

De la cellule B7 à la cellule K7 (et ce pour 12 feuilles successives),
j'ai ceci :

B7 : =SheetName()

C7 : =SI(C7="";"";
SI(JOURSEM(C7)=4;SI(MOIS(C7+2)=MOIS(C7);C7+2;"");SI(MOIS(C7+5)=MOIS(C7);C7+5;"")))



etc. jusqu'à K

Et j'ai une fonction dans un module :
(version intégrale)

'------
Function SheetName() As Date
Dim Mois As String, Dat As Date

Application.Volatile
Mois = ActiveSheet.Name

Dat = CDate("01/" & Mois & "/" & Year(Date) + 1)
Select Case Application.Weekday(Dat)
Case 1
SheetName = Dat + 3
Case 2
SheetName = Dat + 2
Case 3
SheetName = Dat + 1
Case 4
SheetName = Dat
Case 5
SheetName = Dat + 1
Case 6
SheetName = Dat
Case 7
SheetName = Dat + 4
End Select

End Function
'------

Par ailleurs, chaque onglet est nommé :

Janvier
Février
Mars
etc. (pardonne moi de ne pas être exhaustif ;-) )


Le but de la manoeuvre, c'est de récupérer en B7 le premier mercredi
(ou vendredi) du mois lié au "nom" de l'onglet, puis en D7 jusqu'à K7
d'avoir la série des mercrdis et vendredis sans dépasser la fin du
mois.

Mon pb, c'est qu'après avoir recopié des formules dans les feuilles,
les formules de B7 à K7 ne prennent pas en compte le nom de l'onglet.
Comme cette "Function" est dans un module standard, pour moi, les
formules liées à chaque feuille devraient s'atualisé en fonction du nom
de l'onglet !

@+ ??

JP

Bonjour,

Comme d'ab jp on ne montre qu'un petit bout de la lorgnette..soit..

avec le peu qu'il y a là on en déduit que le mois c'est le nom de la
feuille active
et a priori cette feuille active a un seul nom ce doit être le même
que le sien donc un seul à la fois!

;-)

@+ ou..(...à tout à l'heure tu nous lachera la suite)

-- lSteph

On 13 nov, 16:24, j-pascal wrote:
Bonjour,

Apparemment, j'ai un petit pb de "rafraissement" avec la fonction
suivante :
'----
Function SheetName() As Date
Dim Mois As String, Dat As Date

Application.Volatile
Mois = ActiveSheet.Name

Dat = CDate("01/" & Mois & "/" & Year(Date) + 1)
Select Case Application.Weekday(Dat)
Case 1
SheetName = Dat + 3

etc...
'----

après avoir recopié une formule liée à cette fonction, dans toutes
les
feuilles, mes calculs ne s'actualisent pas avec le nom de l'onglet.
Actuellement, dans chaque feuille, je me retrouve avec le même mois !

J'ai ajouté un DoEvents, mais en vain ...

Merci pour votre aide,

JP






















Avatar
LSteph
Bonjour,


Je ne vois pas de raison à un 424 outre que:

Dans la fonction (qui va dans un module standard)
Application.Caller.Parent.Name
renvoie le nom du "Parent" de la Cellule qui appelle la fonction (Caller)
donc le nom de la(es) feuille(s) de la(es) cellule(s) où tu auras saisi
cette fonction
=testn()

après tu peux radapter à ton besoin,ajouter volatile...etc...
note que tout ce que tu mettais dans tes calculs sur dateet cela aussi
pourrait se faire sans vba juste avec des formules et
=testn()
irait directement ainsi:
=STXT(CELLULE("filename";A1);TROUVE("]";CELLULE("filename";A1))+1;999)

Si tu es dans un mode de calcul automatique
>>> Euréka !!! ????
ce calculate me semblerait inutile, mais je n'ai peut-être pas toutes
les données du pb ou c'est moi qui suis pas tt à fait dispo...


@+

--
lSteph

j-pascal a écrit :
Dispos ?? Mais je suis toujours dispos !
Ce "Peut-être une autre fois ..." me laisse à penser que tu as vu un
truc qui clochait dans ma "trouvaille" et que je ne suis pas assez
attentif pour le voir moi-même ou le lire entre tes lignes ...
JP
...peut être une autre fois, qd tu seras plus dispos!


j-pascal a écrit :
Euréka !!!

J'ai mis ça dans "ThisWorkbook" :

'------
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Calculate
End Sub
'------

Et ça semble fonctionner "parfaitement" !

JP


adapte ceci
essaie déjà:

Function testn() As String

testn = Application.Caller.Parent.Name

End Function


j-pascal a écrit :
Ok, mais alors ce n'est pas la feuille active qu'il me faut mais la
feuille sélectionnée ou plutôt il faudrait que la feuille
sélectionnée devienne la feuille active.
Faut-il passer par un "Private Sub Workbook_SheetActivate(ByVal Sh
As Object)" ?

@+ ?

JP

Oui bin ca change rien
Mois = ActiveSheet.Name
Donc il n'y en a qu'un
ou j'ai rien compris (j'ai cette réputation..lol)

Activesheet c'est la feuille active donc pas toutes, mais bien une
seule, celle active!

à+

-- lSteph


j-pascal a écrit :
Bonsoir Stéphane,

J'ai cette réputation (de ne donner que des bouts de code) ? Je
vais essayer de m'améliorer ...

De la cellule B7 à la cellule K7 (et ce pour 12 feuilles
successives), j'ai ceci :

B7 : =SheetName()

C7 : =SI(C7="";"";
SI(JOURSEM(C7)=4;SI(MOIS(C7+2)=MOIS(C7);C7+2;"");SI(MOIS(C7+5)=MOIS(C7);C7+5;"")))




etc. jusqu'à K

Et j'ai une fonction dans un module :
(version intégrale)

'------
Function SheetName() As Date
Dim Mois As String, Dat As Date

Application.Volatile
Mois = ActiveSheet.Name

Dat = CDate("01/" & Mois & "/" & Year(Date) + 1)
Select Case Application.Weekday(Dat)
Case 1
SheetName = Dat + 3
Case 2
SheetName = Dat + 2
Case 3
SheetName = Dat + 1
Case 4
SheetName = Dat
Case 5
SheetName = Dat + 1
Case 6
SheetName = Dat
Case 7
SheetName = Dat + 4
End Select

End Function
'------

Par ailleurs, chaque onglet est nommé :

Janvier
Février
Mars
etc. (pardonne moi de ne pas être exhaustif ;-) )


Le but de la manoeuvre, c'est de récupérer en B7 le premier
mercredi (ou vendredi) du mois lié au "nom" de l'onglet, puis en
D7 jusqu'à K7 d'avoir la série des mercrdis et vendredis sans
dépasser la fin du mois.

Mon pb, c'est qu'après avoir recopié des formules dans les
feuilles, les formules de B7 à K7 ne prennent pas en compte le
nom de l'onglet.
Comme cette "Function" est dans un module standard, pour moi, les
formules liées à chaque feuille devraient s'atualisé en fonction
du nom de l'onglet !

@+ ??

JP

Bonjour,

Comme d'ab jp on ne montre qu'un petit bout de la
lorgnette..soit..

avec le peu qu'il y a là on en déduit que le mois c'est le nom
de la
feuille active
et a priori cette feuille active a un seul nom ce doit être le même
que le sien donc un seul à la fois!

;-)

@+ ou..(...à tout à l'heure tu nous lachera la suite)

-- lSteph

On 13 nov, 16:24, j-pascal wrote:
Bonjour,

Apparemment, j'ai un petit pb de "rafraissement" avec la fonction
suivante :
'----
Function SheetName() As Date
Dim Mois As String, Dat As Date

Application.Volatile
Mois = ActiveSheet.Name

Dat = CDate("01/" & Mois & "/" & Year(Date) + 1)
Select Case Application.Weekday(Dat)
Case 1
SheetName = Dat + 3

etc...
'----

après avoir recopié une formule liée à cette fonction, dans
toutes les
feuilles, mes calculs ne s'actualisent pas avec le nom de
l'onglet.
Actuellement, dans chaque feuille, je me retrouve avec le même
mois !

J'ai ajouté un DoEvents, mais en vain ...

Merci pour votre aide,

JP


























Avatar
j-pascal
Merci Stéphane pour toutes ces précisions.
Je te confirme que je suis en calcul automatique et que ce "calculate"
a été salvateur (pour autant que je puisse en croire mes yeux !).
A bientôt,
jp
PS : certes, j'aurais pu passer par une formule sur la feuille, mais je
suis en train de m'initier aux dites formules en vba (sans parler de la
fenêtre d'exécution que michdenis m'a fait découvrir ...).
Je vais essayer de t'envoyer un bout de "mon" classeur ...
Bonjour,


Je ne vois pas de raison à un 424 outre que:

Dans la fonction (qui va dans un module standard)
Application.Caller.Parent.Name
renvoie le nom du "Parent" de la Cellule qui appelle la fonction (Caller)
donc le nom de la(es) feuille(s) de la(es) cellule(s) où tu auras saisi cette
fonction
=testn()

après tu peux radapter à ton besoin,ajouter volatile...etc...
note que tout ce que tu mettais dans tes calculs sur dateet cela aussi
pourrait se faire sans vba juste avec des formules et
=testn()
irait directement ainsi:
=STXT(CELLULE("filename";A1);TROUVE("]";CELLULE("filename";A1))+1;999)

Si tu es dans un mode de calcul automatique
>>> Euréka !!! ????
ce calculate me semblerait inutile, mais je n'ai peut-être pas toutes les
données du pb ou c'est moi qui suis pas tt à fait dispo...


@+

--
lSteph

j-pascal a écrit :
Dispos ?? Mais je suis toujours dispos !
Ce "Peut-être une autre fois ..." me laisse à penser que tu as vu un truc
qui clochait dans ma "trouvaille" et que je ne suis pas assez attentif pour
le voir moi-même ou le lire entre tes lignes ...
JP
...peut être une autre fois, qd tu seras plus dispos!


j-pascal a écrit :
Euréka !!!

J'ai mis ça dans "ThisWorkbook" :

'------
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Calculate
End Sub
'------

Et ça semble fonctionner "parfaitement" !

JP


adapte ceci
essaie déjà:

Function testn() As String

testn = Application.Caller.Parent.Name

End Function


j-pascal a écrit :
Ok, mais alors ce n'est pas la feuille active qu'il me faut mais la
feuille sélectionnée ou plutôt il faudrait que la feuille sélectionnée
devienne la feuille active.
Faut-il passer par un "Private Sub Workbook_SheetActivate(ByVal Sh As
Object)" ?

@+ ?

JP

Oui bin ca change rien
Mois = ActiveSheet.Name
Donc il n'y en a qu'un
ou j'ai rien compris (j'ai cette réputation..lol)

Activesheet c'est la feuille active donc pas toutes, mais bien une
seule, celle active!

à+

-- lSteph


j-pascal a écrit :
Bonsoir Stéphane,

J'ai cette réputation (de ne donner que des bouts de code) ? Je vais
essayer de m'améliorer ...

De la cellule B7 à la cellule K7 (et ce pour 12 feuilles
successives), j'ai ceci :

B7 : =SheetName()

C7 : =SI(C7="";"";
SI(JOURSEM(C7)=4;SI(MOIS(C7+2)=MOIS(C7);C7+2;"");SI(MOIS(C7+5)=MOIS(C7);C7+5;"")))




etc. jusqu'à K

Et j'ai une fonction dans un module :
(version intégrale)

'------
Function SheetName() As Date
Dim Mois As String, Dat As Date

Application.Volatile
Mois = ActiveSheet.Name

Dat = CDate("01/" & Mois & "/" & Year(Date) + 1)
Select Case Application.Weekday(Dat)
Case 1
SheetName = Dat + 3
Case 2
SheetName = Dat + 2
Case 3
SheetName = Dat + 1
Case 4
SheetName = Dat
Case 5
SheetName = Dat + 1
Case 6
SheetName = Dat
Case 7
SheetName = Dat + 4
End Select

End Function
'------

Par ailleurs, chaque onglet est nommé :

Janvier
Février
Mars
etc. (pardonne moi de ne pas être exhaustif ;-) )


Le but de la manoeuvre, c'est de récupérer en B7 le premier mercredi
(ou vendredi) du mois lié au "nom" de l'onglet, puis en D7 jusqu'à K7
d'avoir la série des mercrdis et vendredis sans dépasser la fin du
mois.

Mon pb, c'est qu'après avoir recopié des formules dans les feuilles,
les formules de B7 à K7 ne prennent pas en compte le nom de l'onglet.
Comme cette "Function" est dans un module standard, pour moi, les
formules liées à chaque feuille devraient s'atualisé en fonction du
nom de l'onglet !

@+ ??

JP

Bonjour,

Comme d'ab jp on ne montre qu'un petit bout de la
lorgnette..soit..

avec le peu qu'il y a là on en déduit que le mois c'est le nom de la
feuille active
et a priori cette feuille active a un seul nom ce doit être le même
que le sien donc un seul à la fois!

;-)

@+ ou..(...à tout à l'heure tu nous lachera la suite)

-- lSteph

On 13 nov, 16:24, j-pascal wrote:
Bonjour,

Apparemment, j'ai un petit pb de "rafraissement" avec la fonction
suivante :
'----
Function SheetName() As Date
Dim Mois As String, Dat As Date

Application.Volatile
Mois = ActiveSheet.Name

Dat = CDate("01/" & Mois & "/" & Year(Date) + 1)
Select Case Application.Weekday(Dat)
Case 1
SheetName = Dat + 3

etc...
'----

après avoir recopié une formule liée à cette fonction, dans toutes
les
feuilles, mes calculs ne s'actualisent pas avec le nom de l'onglet.
Actuellement, dans chaque feuille, je me retrouve avec le même mois
!

J'ai ajouté un DoEvents, mais en vain ...

Merci pour votre aide,

JP




























1 2