[VBA] Déclaration Public Tableau

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichD
Le #26279422
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!
Péhemme
Le #26280232
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!
MichD
Le #26280632
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?
Jacquouille
Le #26280622
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
Péhemme
Le #26281212
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?
Péhemme
Le #26281202
:-)))
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
MichD
Le #26281192
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
'-----------------------------------------------
Péhemme
Le #26281372
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
'-----------------------------------------------
Jacky
Le #26282802
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"
:-)))
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
Jacquouille
Le #26282982
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" 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
Publicité
Poster une réponse
Anonyme