OVH Cloud OVH Cloud

tranformer le jour de la semaine en Lu,Ma, ect...

19 réponses
Avatar
xcheater2
bonjour tout le monde,

j'ai une feuille du classeur qui contient un calendrier (c'est pour un
planning).
j'ai des lignes qui contiennent les jours de la semaine (Mon, Tue, Wed,
etc...) : ce sont des dates transformées avec le format de la cellule (ddd).
Hélas en anglais.
je voudrais savoir si je peu utiliser la liste personnalisée pour mettre les
dates en français mais sous la forme (Lu, Ma, Me, Je, etc...) au lieu de
(lun, mar, mer, jeu).
Je ne peu installer sur le micro d'autres langues que l'anglais.

Si ce n'est pas possible, y a t il un autre moyen de pouvoir le faire
sachant que la date de la cellule doit rester entière car la macro pour
faire le planning se réfère a cette cellule.

Merci par avance de votre aide.

9 réponses

1 2
Avatar
xcheater2
c'est parce que a mon avis dans la macro, le calcul devient :

calc = (Di - #11/24/2002#) / 35

Chose que je n'avais pas en cliquait bouton droit de la sourie sur cette
cellule et je sélectionnait "format de la cellule" et dans personnalisée, je
mettais "jjj" ce qui me permettais d'afficher le jour de la semaine tout en
gardant a l'intérieur la date qui me sert dans la macro pour faire un
calcul.

"AV" a écrit dans le message de news:
u2$$
Pas de XL en anglais alors pour tester ....

AV




Avatar
Michel Gaboly
Bonjour,

Je te propose 2 options :

1 - Formules
Cela peut poser des problèmes à ta macro si elle se refère à des
références absolues ;-((

Il s'agit simplement d'utiliser une ligne supplémentaire à insérer
sous la ligne comportant les dates.

Avant cela, il faut definir un nom, "MatDates" par exemple associé à
une matrice :

Fait référence à : ={"Lu";"Ma";"Me";"Je";"Ve";"Sa";"Di"}

Ensuite, tu entres cette formule en-dessous de chaque date dans la
nouvelle ligne :

=INDEX(MatDates;JOURSEM(B1;2))

(Avec une version en anglais, il faut remplacer JOURSEM() par
WEEKDAY(). Pas de modif pour INDEX().

Le second argumlent de JOURSEM(), 2 fait démarrer la semaine le
lundi (par défaut, c'est le dimanche).

Tu masques ensuite la ligne contenant les dates. Il faut éventuellement
prévoir une cellule pour saisir la première date, dont découlent les
autres.


2 - VBA
Après avoir nommé ("Dates" par exemple), la plage à formater, on
modifie le format des dates en utilisant l'événement Calculate :

Private Sub Worksheet_Calculate()
Dim c As Range
For Each c In Range("Dates")
c.NumberFormat = """" & Application.WorksheetFunction.Index(Array("Lu", "Ma", "Me", "Je", "Ve", "Sa", "Di"), WeekDay(c, 2))
& """"
Next c
End Sub

ou

Private Sub Worksheet_Calculate()
Dim c As Range, Mat
Mat = Array("Lu", "Ma", "Me", "Je", "Ve", "Sa", "Di")
For Each c In Range("Dates")
c.NumberFormat = """" & Application.WorksheetFunction.Index(Mat, WeekDay(c, 2)) & """"
Next c
End Sub

PS - Le traitement n'est pas très rapide, tu peux ajouter

Application.ScreenUpdating = False

au début.


NB - Un point important (BUG ?) : pendant les tests, WeekDay me
renvoyait une valeur erronnée (2 pour le lundi, 3 pour le mardi, ...)
Cela se passait sur Mac, avec Excel 98.

J'ai transféré le classeur sur un PC avec Excel 2000, même anomalie.
J'ai fini par comprendre que le problème vient de l'option de classeur
"Calendrier depuis 1904", qui est l'option par défaut sur Mac.

Weekday renvoie un résultat correct avec l'option 1900, erronné avec
l'option 1904. Il faut retrancher 1 dans ce dernier cas.


En VBA, False = 0 et True = -1

On peut donc modifier la procédure ainsi :

Private Sub Worksheet_Calculate()
Dim c As Range, Mat, Delta As Integer
Application.ScreenUpdating = False
Delta = ThisWorkbook.Date1904
Mat = Array("Lu", "Ma", "Me", "Je", "Ve", "Sa", "Di")
For Each c In Range("Dates")
c.NumberFormat = """" & Application.WorksheetFunction.Index(Mat, WeekDay(c, 2) + Delta) & """"
Debug.Print Application.WorksheetFunction.Index(Mat, WeekDay(c, 2))
Next c
End Sub



bonjour tout le monde,

j'ai une feuille du classeur qui contient un calendrier (c'est pour un
planning).
j'ai des lignes qui contiennent les jours de la semaine (Mon, Tue, Wed,
etc...) : ce sont des dates transformées avec le format de la cellule (ddd).
Hélas en anglais.
je voudrais savoir si je peu utiliser la liste personnalisée pour mettre les
dates en français mais sous la forme (Lu, Ma, Me, Je, etc...) au lieu de
(lun, mar, mer, jeu).
Je ne peu installer sur le micro d'autres langues que l'anglais.

Si ce n'est pas possible, y a t il un autre moyen de pouvoir le faire
sachant que la date de la cellule doit rester entière car la macro pour
faire le planning se réfère a cette cellule.

Merci par avance de votre aide.


--
Cordialement,

Michel Gaboly
http://www.gaboly.com

Avatar
Bureau
A tout hasard et faire l'essai sur une copie ! je n'ai pas testé n'ayant pas
de capacité à mettre les dates au format anglais :
créer une ligne nouvelle dessous la ligne des dates en jours anglais :
chaque nouvelle cellule sera donnée pour égale (= ) à la cellule qui est
au-dessus. Si ton EXCEL est francais il devrait bien réagir, non ? Ce n'est
apparement que ton application qui est anglaise (et j'espère non protégée)
Par ailelurs et bien sûr toutes les formules en dessous se seront décalées
auto d'une ligne sans perdre leurs références.
Si cela marche, alors mettre à zéro la ligne initiale pour la masquer. L'une
aura en apparence remplacé l'autre.
?
M'excuser si je t'ai fait perdre 5 minutes

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

bonjour tout le monde,

j'ai une feuille du classeur qui contient un calendrier (c'est pour un
planning).
j'ai des lignes qui contiennent les jours de la semaine (Mon, Tue, Wed,
etc...) : ce sont des dates transformées avec le format de la cellule
(ddd).

Hélas en anglais.
je voudrais savoir si je peu utiliser la liste personnalisée pour mettre
les

dates en français mais sous la forme (Lu, Ma, Me, Je, etc...) au lieu de
(lun, mar, mer, jeu).
Je ne peu installer sur le micro d'autres langues que l'anglais.

Si ce n'est pas possible, y a t il un autre moyen de pouvoir le faire
sachant que la date de la cellule doit rester entière car la macro pour
faire le planning se réfère a cette cellule.

Merci par avance de votre aide.





Avatar
Clément Marcotte
Hum.... m'est avis qu'il faut aller au dodo ;-)))


Je n'aurais jamais osé imaginer que cela t'arrivait ;-)

Avatar
AV
Hum.... m'est avis qu'il faut aller au dodo ;-)))


Je n'aurais jamais osé imaginer que cela t'arrivait ;-)


Pfff.... mais non, c'est d'Isabelle que je parlais :
=INDEX(journée;WEEKDAY(A1);2)
au lieu de
=INDEX(journée;WEEKDAY(A1;2))

;-)
AV


Avatar
isabelle
c'est quoi ça :-))) j'ai loupé une invitation !!! )
isabelle


Hum.... m'est avis qu'il faut aller au dodo ;-)))


Je n'aurais jamais osé imaginer que cela t'arrivait ;-)



Avatar
xcheater2
Bonjour bureau,
en faite je suis en train de creer le planning sur un pc qui lui est en
francais pour un pc qui lui tout est en anglais. Quand j'importe de fichier
fait sur le pc francais, toutes les commandes sont transformées
automatiquement en anglais. C'est pour cela que je voulais transformer les
dates en d'anglais a francais mais en diminuant encore le libéllé, et comme
sur le pc anglais, je ne suis pas administrateur (version nt 4.0), je ne
puis rien rajouter.

Mais j'ai retenu l'option de Isabelle qui me semble la plus approprié

pour ce qui est de me faire perdre 5 mns, je ne pense pas, c'est comme ca
que l'on apprend aussi

Merci encore de ton aide.


"Bureau" a écrit dans le message de news:
#
A tout hasard et faire l'essai sur une copie ! je n'ai pas testé n'ayant
pas

de capacité à mettre les dates au format anglais :
créer une ligne nouvelle dessous la ligne des dates en jours anglais :
chaque nouvelle cellule sera donnée pour égale (= ) à la cellule qui est
au-dessus. Si ton EXCEL est francais il devrait bien réagir, non ? Ce
n'est

apparement que ton application qui est anglaise (et j'espère non protégée)
Par ailelurs et bien sûr toutes les formules en dessous se seront décalées
auto d'une ligne sans perdre leurs références.
Si cela marche, alors mettre à zéro la ligne initiale pour la masquer.
L'une

aura en apparence remplacé l'autre.
?
M'excuser si je t'ai fait perdre 5 minutes

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

bonjour tout le monde,

j'ai une feuille du classeur qui contient un calendrier (c'est pour un
planning).
j'ai des lignes qui contiennent les jours de la semaine (Mon, Tue, Wed,
etc...) : ce sont des dates transformées avec le format de la cellule
(ddd).

Hélas en anglais.
je voudrais savoir si je peu utiliser la liste personnalisée pour mettre
les

dates en français mais sous la forme (Lu, Ma, Me, Je, etc...) au lieu de
(lun, mar, mer, jeu).
Je ne peu installer sur le micro d'autres langues que l'anglais.

Si ce n'est pas possible, y a t il un autre moyen de pouvoir le faire
sachant que la date de la cellule doit rester entière car la macro pour
faire le planning se réfère a cette cellule.

Merci par avance de votre aide.









Avatar
xcheater2
Bonjour Michel Gaboly,

Merci de m'avoir répondu, je vais regarder attentivement ces renseignements,
mais pour l'instant j'ai pris la méthode a Isabelle et modifier le script vb
car mon script met déjà 12s à se réaliser. Mais j'ai conservé ta méthode
pour comprendre le fonctionnement.

Merci encore


"Michel Gaboly" a écrit dans le message de news:

Bonjour,

Je te propose 2 options :

1 - Formules
Cela peut poser des problèmes à ta macro si elle se refère à des
références absolues ;-((

Il s'agit simplement d'utiliser une ligne supplémentaire à insérer
sous la ligne comportant les dates.

Avant cela, il faut definir un nom, "MatDates" par exemple associé à
une matrice :

Fait référence à : ={"Lu";"Ma";"Me";"Je";"Ve";"Sa";"Di"}

Ensuite, tu entres cette formule en-dessous de chaque date dans la
nouvelle ligne :

=INDEX(MatDates;JOURSEM(B1;2))

(Avec une version en anglais, il faut remplacer JOURSEM() par
WEEKDAY(). Pas de modif pour INDEX().

Le second argumlent de JOURSEM(), 2 fait démarrer la semaine le
lundi (par défaut, c'est le dimanche).

Tu masques ensuite la ligne contenant les dates. Il faut éventuellement
prévoir une cellule pour saisir la première date, dont découlent les
autres.


2 - VBA
Après avoir nommé ("Dates" par exemple), la plage à formater, on
modifie le format des dates en utilisant l'événement Calculate :

Private Sub Worksheet_Calculate()
Dim c As Range
For Each c In Range("Dates")
c.NumberFormat = """" &
Application.WorksheetFunction.Index(Array("Lu", "Ma", "Me", "Je", "Ve",

"Sa", "Di"), WeekDay(c, 2))
& """"
Next c
End Sub

ou

Private Sub Worksheet_Calculate()
Dim c As Range, Mat
Mat = Array("Lu", "Ma", "Me", "Je", "Ve", "Sa", "Di")
For Each c In Range("Dates")
c.NumberFormat = """" &
Application.WorksheetFunction.Index(Mat, WeekDay(c, 2)) & """"

Next c
End Sub

PS - Le traitement n'est pas très rapide, tu peux ajouter

Application.ScreenUpdating = False

au début.


NB - Un point important (BUG ?) : pendant les tests, WeekDay me
renvoyait une valeur erronnée (2 pour le lundi, 3 pour le mardi, ...)
Cela se passait sur Mac, avec Excel 98.

J'ai transféré le classeur sur un PC avec Excel 2000, même anomalie.
J'ai fini par comprendre que le problème vient de l'option de classeur
"Calendrier depuis 1904", qui est l'option par défaut sur Mac.

Weekday renvoie un résultat correct avec l'option 1900, erronné avec
l'option 1904. Il faut retrancher 1 dans ce dernier cas.


En VBA, False = 0 et True = -1

On peut donc modifier la procédure ainsi :

Private Sub Worksheet_Calculate()
Dim c As Range, Mat, Delta As Integer
Application.ScreenUpdating = False
Delta = ThisWorkbook.Date1904
Mat = Array("Lu", "Ma", "Me", "Je", "Ve", "Sa", "Di")
For Each c In Range("Dates")
c.NumberFormat = """" &
Application.WorksheetFunction.Index(Mat, WeekDay(c, 2) + Delta) & """"

Debug.Print Application.WorksheetFunction.Index(Mat,
WeekDay(c, 2))

Next c
End Sub


--
Cordialement,

Michel Gaboly
http://www.gaboly.com




Avatar
xcheater2
Bonjour a tous,

Je tiens à tous vous remercier de l'aide que vous m'avez apporté. J'ai pris
notes de toutes vos suggestions mais j'ai gardé la solutions de Isabelle qui
me parait pour moi la plus simple (c'est la premiere fois que j'utilise
excel)

Merci encore de votre aide
1 2