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

[VBA] Déclaration Public Tableau

12 réponses
Avatar
Péhemme
Bonjour à Tous,

J'ai plusieurs procédures qui font appel à un même tableau.
Je le déclare de la façon suivante :
Public Semaine as Variant
Semaine = Array("Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi",
"Dimanche")

Cette écriture ne fonctionne pas comme je le souhaite.
L'affectation du Array à la variable Semaine doit se faire dans la procédure
or je souhaiterais l'écrire une fois pour toute de telle sorte que mes
procédures puissent y accéder sans qu'il soit nécessaire de réécrire cette
affectation dans chacune d'entre elles.

Que dois-je modifier dans ma déclaration ?

Quoiqu'en écrivant ce message, je me demande s'il ne serait pas meilleur
d'écrire une fonction puisque j'utilise ce Array dans :
Reste = JJ Mod 7
Js = Semaine(Reste)
Où JJ est le jour julien et Js le jour de la semaine.
mais là, je ne suis pas très habile.

Merci d'avance de votre aide et de vos commentaires.
Les encouragements sont également acceptés :-)

Michel
W7 - Excel 2010

10 réponses

1 2
Avatar
MichD
Bonjour,

Cette déclaration de la variable doit être faite dans un module standard.

Public Semaine as Variant

Dans le ThisWorkbook de ton classeur, utilise l'événement "Workbook_Open" pour exécuter
cette ligne de code :

'--------------------------------------------------
Private Sub Workbook_Open()

Semaine = Array("Lundi", "Mardi", "Mercredi", _
"Jeudi", "Vendredi", "Samedi", "Dimanche")

End Sub
'--------------------------------------------------

Si tu veux une fonction personnalisée, explique ce que cette fonction est censée faire!
Avatar
Péhemme
Merci Denis.

Je prends note de ta proposition.

Si tu veux une fonction personnalisée, explique ce que cette fonction est
censée faire!



Une simple division.
Une macro me retourne un n° de jour julien dans une variable nommée JJ.
Je divise ce n° par 7 et conserve le reste (JJ MOD 7) dans une variable
nommée "Reste".
Ce reste me donne l'indice du jour de la semaine.
D'où : Semaine(Reste) me retourne le jour de la semaine.
À titre d'exemple :
le 18/07/2014 est le jour julien 2 456 856 ;
2 456 856 MOD 7 donne 4, soit l'indice du nom du jour recherché, donc :
Vendredi.
Voili, voilou.
:-)
Michel




"MichD" a écrit dans le message de groupe de discussion :
lqaqsl$a4i$

Bonjour,

Cette déclaration de la variable doit être faite dans un module standard.

Public Semaine as Variant

Dans le ThisWorkbook de ton classeur, utilise l'événement "Workbook_Open"
pour exécuter
cette ligne de code :

'--------------------------------------------------
Private Sub Workbook_Open()

Semaine = Array("Lundi", "Mardi", "Mercredi", _
"Jeudi", "Vendredi", "Samedi", "Dimanche")

End Sub
'--------------------------------------------------

Si tu veux une fonction personnalisée, explique ce que cette fonction est
censée faire!
Avatar
MichD
Pour transformer une date au calendrier julien dans la feuille de calcul :

Date_Julien est une plage nommée contenant une date reconnu par Excel
ÚTE(1900+ENT(Date_Julien/1000);1;MOD(Date_Julien;1000))

Et si tu fais ceci, tu obtiens directement le jour de la semaine de ladite DATE.

=TEXTE(DATE(1900+ENT(Date_Julien/1000);1;MOD(Date_Julien;1000));"JJJJ")

En VBA, tu peux traduire cette formule comme suit :

'------------------------------------------------
Sub test()

'Jour de la semaine : Sunday, Monday, Tuesday... Saturday
x = Evaluate("TEXT(DATE(1900+INT(Date_Julien/1000)," & _
"1,MOD(Date_Julien,1000)),""DDDD"")")

'Retourne 7 pour dimanche, 1 pour lundi ... (format européen)
y = Evaluate("WEEKDAY(DATE(1900+INT(Date_Julien/1000),1,MOD(Date_Julien,1000)),2)")
End Sub
'------------------------------------------------

Si tu préfères déclarer une date particulière dans une procédure :
'------------------------------------------------
Sub test()
Dim D As Date
D = Date ' la date que tu désires en utilisant DateSerial(year,month,day)

'Jour de la semaine : Sunday, Monday, Tuesday... Saturday
X = Evaluate("TEXT(DATE(1900+INT(" & D & "/1000)," & _
"1,MOD(" & D & ",1000)),""DDDD"")")

'Retourne 7 pour dimanche, 1 pour lundi ... (format européen)
y = Evaluate("WEEKDAY(DATE(1900+INT(" & D & "/1000),1,MOD(" & D & ",1000)),2)")
End Sub
'------------------------------------------------

As-tu besoin d'une fonction personnalisée pour cela?
Avatar
Jacquouille
Bonjour Michel

Fais gaffe si tu divises JJ ( Jacky l'Alsacien) par 7, il ne va plus rien en
rester .... -))



Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"Péhemme" a écrit dans le message de groupe de discussion :
lqb0in$obi$

Merci Denis.

Je prends note de ta proposition.

Si tu veux une fonction personnalisée, explique ce que cette fonction est
censée faire!



Une simple division.
Une macro me retourne un n° de jour julien dans une variable nommée JJ.
Je divise ce n° par 7 et conserve le reste (JJ MOD 7) dans une variable
nommée "Reste".
Ce reste me donne l'indice du jour de la semaine.
D'où : Semaine(Reste) me retourne le jour de la semaine.
À titre d'exemple :
le 18/07/2014 est le jour julien 2 456 856 ;
2 456 856 MOD 7 donne 4, soit l'indice du nom du jour recherché, donc :
Vendredi.
Voili, voilou.
:-)
Michel




"MichD" a écrit dans le message de groupe de discussion :
lqaqsl$a4i$

Bonjour,

Cette déclaration de la variable doit être faite dans un module standard.

Public Semaine as Variant

Dans le ThisWorkbook de ton classeur, utilise l'événement "Workbook_Open"
pour exécuter
cette ligne de code :

'--------------------------------------------------
Private Sub Workbook_Open()

Semaine = Array("Lundi", "Mardi", "Mercredi", _
"Jeudi", "Vendredi", "Samedi", "Dimanche")

End Sub
'--------------------------------------------------

Si tu veux une fonction personnalisée, explique ce que cette fonction est
censée faire!


---
Ce courrier électronique ne contient aucun virus ou logiciel malveillant parce que la protection avast! Antivirus est active.
http://www.avast.com
Avatar
Péhemme
Merci pour tes propositions.

As-tu besoin d'une fonction personnalisée pour cela?


:-))
Oui, parce que je l'ai fait courte.
Mes années peuvent être inférieures à 100.
Dans un premier temps, je travaille sur une période du 1/1/1 au 31/12/9999 ;
5 tableaux de 730 000 lignes dans lesquels j'obtiens le jour de la semaine
par la formule :
=CHOISIR(MOD(ENT(C11);7)+1;"Mardi";"Mercredi";"Jeudi";"Vendredi";"Samedi";"Dimanche";"Lundi")
Dans un UserForm je saisis le jour, le mois et l'année et j'obtiens dans un
msgbox :
. la date
. le calendrier (Julien ou Grégorien)
. le jour julien
. le nom du jour de la semaine
. si l'année est bissextile ou commune (quel que soit son calendrier) (1)
. la date de Pâques de l'année considérée (à partir de 325)
Tout fonctionne très bien tel que je l'ai écrit.

Le fichier étant lourd, je le reconstruis en n'utilisant que du VBA.
Là encore, ce que j'ai fait fonctionne correctement.
Je voulais simplement faire "professionnel" en améliorant l'écriture des
macros.

Et puis, qui peut le plus peut le moins, j'améliorerai le système en
élargissant la plage de travail :
. dans un premier temps à - 46 Avant JC (début du calendrier julien)
. et dans un second temps, quitte à créer un calendrier julien proleptique,
remonter jusqu'au jour julien n° 1 (1/1/-4712 avant JC).
Mais je suis loin d'en être là. Il me faudra penser, entre autres, à gérer
l'année 0 et donner des résultats en terme de date "historiques".

La retraite fait faire des choses... :-)

(1) par parenthèses, je me suis rendu compte que le calendrier Excel
(DTPicker ou MonthView) considère les années 4000 et 8000 comme bissextiles
alors que, toutes choses égalent par ailleurs, elles ne le seront pas.

Bien amicalement
Michel





"MichD" a écrit dans le message de groupe de discussion :
lqb2dp$sum$

Pour transformer une date au calendrier julien dans la feuille de calcul :

Date_Julien est une plage nommée contenant une date reconnu par Excel
ÚTE(1900+ENT(Date_Julien/1000);1;MOD(Date_Julien;1000))

Et si tu fais ceci, tu obtiens directement le jour de la semaine de ladite
DATE.

=TEXTE(DATE(1900+ENT(Date_Julien/1000);1;MOD(Date_Julien;1000));"JJJJ")

En VBA, tu peux traduire cette formule comme suit :

'------------------------------------------------
Sub test()

'Jour de la semaine : Sunday, Monday, Tuesday... Saturday
x = Evaluate("TEXT(DATE(1900+INT(Date_Julien/1000)," & _
"1,MOD(Date_Julien,1000)),""DDDD"")")

'Retourne 7 pour dimanche, 1 pour lundi ... (format européen)
y =
Evaluate("WEEKDAY(DATE(1900+INT(Date_Julien/1000),1,MOD(Date_Julien,1000)),2)")
End Sub
'------------------------------------------------

Si tu préfères déclarer une date particulière dans une procédure :
'------------------------------------------------
Sub test()
Dim D As Date
D = Date ' la date que tu désires en utilisant DateSerial(year,month,day)

'Jour de la semaine : Sunday, Monday, Tuesday... Saturday
X = Evaluate("TEXT(DATE(1900+INT(" & D & "/1000)," & _
"1,MOD(" & D & ",1000)),""DDDD"")")

'Retourne 7 pour dimanche, 1 pour lundi ... (format européen)
y = Evaluate("WEEKDAY(DATE(1900+INT(" & D & "/1000),1,MOD(" & D &
",1000)),2)")
End Sub
'------------------------------------------------

As-tu besoin d'une fonction personnalisée pour cela?
Avatar
Péhemme
:-)))
Pôvre Jacky, je ne lui voulais pas de mal...
Mon bon Jacky, si tu me lis, fais la bise à ta femme et à ta fille.
Michel


"Jacquouille" a écrit dans le message de groupe de discussion :
lqb2q9$tqr$

Bonjour Michel

Fais gaffe si tu divises JJ ( Jacky l'Alsacien) par 7, il ne va plus rien en
rester .... -))



Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"Péhemme" a écrit dans le message de groupe de discussion :
lqb0in$obi$

Merci Denis.

Je prends note de ta proposition.

Si tu veux une fonction personnalisée, explique ce que cette fonction est
censée faire!



Une simple division.
Une macro me retourne un n° de jour julien dans une variable nommée JJ.
Je divise ce n° par 7 et conserve le reste (JJ MOD 7) dans une variable
nommée "Reste".
Ce reste me donne l'indice du jour de la semaine.
D'où : Semaine(Reste) me retourne le jour de la semaine.
À titre d'exemple :
le 18/07/2014 est le jour julien 2 456 856 ;
2 456 856 MOD 7 donne 4, soit l'indice du nom du jour recherché, donc :
Vendredi.
Voili, voilou.
:-)
Michel




"MichD" a écrit dans le message de groupe de discussion :
lqaqsl$a4i$

Bonjour,

Cette déclaration de la variable doit être faite dans un module standard.

Public Semaine as Variant

Dans le ThisWorkbook de ton classeur, utilise l'événement "Workbook_Open"
pour exécuter
cette ligne de code :

'--------------------------------------------------
Private Sub Workbook_Open()

Semaine = Array("Lundi", "Mardi", "Mercredi", _
"Jeudi", "Vendredi", "Samedi", "Dimanche")

End Sub
'--------------------------------------------------

Si tu veux une fonction personnalisée, explique ce que cette fonction est
censée faire!


---
Ce courrier électronique ne contient aucun virus ou logiciel malveillant
parce que la protection avast! Antivirus est active.
http://www.avast.com
Avatar
MichD
Si tu veux faire une fonction personnalisée avec ceci :
=CHOISIR(MOD(ENT(C11);7)+1;"Mardi";"Mercredi";"Jeudi";"Vendredi";"Samedi";"Dimanche";"Lundi")

Exemple :
'---------------------------------------------
Sub test()
Dim D As Date
D = Date
'en supposant que C11 contient une date reconnue par Excel
'OU Worksheets("Feuil1").range("C11")
MsgBox Madate(D)
End Sub
'---------------------------------------------

Dans un module standard:
'-----------------------------------------------
Function Madate(D As Date)
Madate = Evaluate("CHOOSE(MOD(INT(" & D & "),7)+1,""Mardi"",""Mercredi""," & _
"""Jeudi"",""Vendredi"",""Samedi"",""Dimanche"",""Lundi"")")
End Function
'-----------------------------------------------
Avatar
Péhemme
Merci pout tout.
Michel


"MichD" a écrit dans le message de groupe de discussion :
lqb84j$bk7$

Si tu veux faire une fonction personnalisée avec ceci :
=CHOISIR(MOD(ENT(C11);7)+1;"Mardi";"Mercredi";"Jeudi";"Vendredi";"Samedi";"Dimanche";"Lundi")

Exemple :
'---------------------------------------------
Sub test()
Dim D As Date
D = Date
'en supposant que C11 contient une date reconnue par Excel
'OU Worksheets("Feuil1").range("C11")
MsgBox Madate(D)
End Sub
'---------------------------------------------

Dans un module standard:
'-----------------------------------------------
Function Madate(D As Date)
Madate = Evaluate("CHOOSE(MOD(INT(" & D & "),7)+1,""Mardi"",""Mercredi""," &
_
"""Jeudi"",""Vendredi"",""Samedi"",""Dimanche"",""Lundi"")")
End Function
'-----------------------------------------------
Avatar
Jacky
Bonsoir/jour, à vous tous
:o))

.....fais la bise à ta femme et à ta fille.


C'est fait.....
Bien qu'elles aient trouvé cela bizarre sur le moment, (ne sachant pas de quoi il retourne),
elles vous renvoient la bise à vous et vos épouses.
:o))
Bon courage pour la conversion de calendrier.

--
Bon WE
Jacky==>JJ


"Péhemme" a écrit dans le message de news: lqb70q$8uk$
:-)))
Pôvre Jacky, je ne lui voulais pas de mal...
Mon bon Jacky, si tu me lis, fais la bise à ta femme et à ta fille.
Michel


"Jacquouille" a écrit dans le message de groupe de discussion : lqb2q9$tqr$

Bonjour Michel

Fais gaffe si tu divises JJ ( Jacky l'Alsacien) par 7, il ne va plus rien en
rester .... -))



Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"Péhemme" a écrit dans le message de groupe de discussion :
lqb0in$obi$

Merci Denis.

Je prends note de ta proposition.

Si tu veux une fonction personnalisée, explique ce que cette fonction est censée faire!



Une simple division.
Une macro me retourne un n° de jour julien dans une variable nommée JJ.
Je divise ce n° par 7 et conserve le reste (JJ MOD 7) dans une variable
nommée "Reste".
Ce reste me donne l'indice du jour de la semaine.
D'où : Semaine(Reste) me retourne le jour de la semaine.
À titre d'exemple :
le 18/07/2014 est le jour julien 2 456 856 ;
2 456 856 MOD 7 donne 4, soit l'indice du nom du jour recherché, donc :
Vendredi.
Voili, voilou.
:-)
Michel




"MichD" a écrit dans le message de groupe de discussion :
lqaqsl$a4i$

Bonjour,

Cette déclaration de la variable doit être faite dans un module standard.

Public Semaine as Variant

Dans le ThisWorkbook de ton classeur, utilise l'événement "Workbook_Open"
pour exécuter
cette ligne de code :

'--------------------------------------------------
Private Sub Workbook_Open()

Semaine = Array("Lundi", "Mardi", "Mercredi", _
"Jeudi", "Vendredi", "Samedi", "Dimanche")

End Sub
'--------------------------------------------------

Si tu veux une fonction personnalisée, explique ce que cette fonction est
censée faire!


---
Ce courrier électronique ne contient aucun virus ou logiciel malveillant parce que la protection avast!
Antivirus est active.
http://www.avast.com
Avatar
Jacquouille
Ah, il est reviendu ....

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"Jacky" a écrit dans le message de groupe de discussion :
lqbthk$kf$

Bonsoir/jour, à vous tous
:o))

.....fais la bise à ta femme et à ta fille.


C'est fait.....
Bien qu'elles aient trouvé cela bizarre sur le moment, (ne sachant pas de
quoi il retourne),
elles vous renvoient la bise à vous et vos épouses.
:o))
Bon courage pour la conversion de calendrier.

--
Bon WE
Jacky==>JJ


"Péhemme" a écrit dans le message de news:
lqb70q$8uk$
:-)))
Pôvre Jacky, je ne lui voulais pas de mal...
Mon bon Jacky, si tu me lis, fais la bise à ta femme et à ta fille.
Michel


"Jacquouille" a écrit dans le message de groupe de discussion :
lqb2q9$tqr$

Bonjour Michel

Fais gaffe si tu divises JJ ( Jacky l'Alsacien) par 7, il ne va plus rien
en
rester .... -))



Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"Péhemme" a écrit dans le message de groupe de discussion :
lqb0in$obi$

Merci Denis.

Je prends note de ta proposition.

Si tu veux une fonction personnalisée, explique ce que cette fonction est
censée faire!



Une simple division.
Une macro me retourne un n° de jour julien dans une variable nommée JJ.
Je divise ce n° par 7 et conserve le reste (JJ MOD 7) dans une variable
nommée "Reste".
Ce reste me donne l'indice du jour de la semaine.
D'où : Semaine(Reste) me retourne le jour de la semaine.
À titre d'exemple :
le 18/07/2014 est le jour julien 2 456 856 ;
2 456 856 MOD 7 donne 4, soit l'indice du nom du jour recherché, donc :
Vendredi.
Voili, voilou.
:-)
Michel




"MichD" a écrit dans le message de groupe de discussion :
lqaqsl$a4i$

Bonjour,

Cette déclaration de la variable doit être faite dans un module standard.

Public Semaine as Variant

Dans le ThisWorkbook de ton classeur, utilise l'événement "Workbook_Open"
pour exécuter
cette ligne de code :

'--------------------------------------------------
Private Sub Workbook_Open()

Semaine = Array("Lundi", "Mardi", "Mercredi", _
"Jeudi", "Vendredi", "Samedi", "Dimanche")

End Sub
'--------------------------------------------------

Si tu veux une fonction personnalisée, explique ce que cette fonction est
censée faire!


---
Ce courrier électronique ne contient aucun virus ou logiciel malveillant
parce que la protection avast! Antivirus est active.
http://www.avast.com




---
Ce courrier électronique ne contient aucun virus ou logiciel malveillant parce que la protection avast! Antivirus est active.
http://www.avast.com
1 2