OVH Cloud OVH Cloud

Encore un problème de date...

11 réponses
Avatar
géjoun.
Bonjour,

Une fois de plus, j'arrive pas à faire ce que je veux! (ça change un peu!
;-) )

En A1, j'ai la date par =MAINTENANT() et à partir de cette date, je
voudrais pouvoir obtenir une liste déroulante en A2 (avec
données\validation) qui m'affiche dans la liste les 5 semaines qui suivent
par rapport à la date A1 (donc, par exemple pour le 14/10/04, en A2, je
trouverai : 'semaine 42', 'semaine 43', 'semaine 44', 'semaine 45' et
'semaine 46'); et une fois ma semaine sélectionnée en A2, en A3, je pourrais
choisir le jour qui m'intéresse de la semaine sélectionnée en A2 (par
exemple : 'lundi 18 Octobre 2004', 'mardi 19 Octobre 2004'...etc... jusqu'au
vendredi de la semaine sélectionnée en A2).

Par exemple :

- en A1 : 14/10/04 que je fige (F9)
- en A2 : je sélectionne 'Semaine 43'
- en A3 : je sélectionne 'Mercredi 20 Octobre 2004'

Et bien sur, que tout ça s'actualise en permanence par rapport à
=MAINTENANT() lorsque j'ouvre lon gabarit.

Ca à l'air compliqué?

Merci! ;-)

--
__________________________
Géjoun.
dam-mail2004@ifrance.com
····················································
Enlevez l'année pour répondre...
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

10 réponses

1 2
Avatar
papou
Bonjour
Sans macro, au plus simple (?), ce que je ferais (mais ce n'est qu'un avis)
Dans une feuille de préparation tu saisis une matrice des jours de l'année
avec dans la colonne à gauche des dates le numéro de semaine renvoyé par la
fonction NOSEM (ou autre)
Donc dans la plage de A1 à B366 en colonne A le numéro de semaine, en
colonne B la date
Tu définis un nom pour cette plage, exemple = ZnDates
Dans cette même feuille de C1 à C5 :
la formule = NOSEM(Feuil1!A1) en C1
puis incrément de 1 pour les 4 autres lignes
Tu nommes la plage ZnNoSem
En D1, formule =RECHERCHEV(Feuil1!A2;ZnDates;2)-5
(où Feuil1 correspond à la feuille où tu veux tes listes de validation)
En D2 formule = D1+1 puis tu recopies vers le bas jusqu'à D5
Tu nommes ZnJours la plage D2:D5
Dans ta feuille qui va recevoir les listes :
En A1 formule =MAINTENANT()
En A2, Données Validation, Liste, Source = ZnNoSem
En A3, Données Validation, Liste, Source = ZnJours
Tu formates A3 en jjjj jj mmmm aaaa

Si besoin je peux t'envoyer un classeur exemple.

Cordialement
Pascal




"géjoun." a écrit dans le message de
news:
Bonjour,

Une fois de plus, j'arrive pas à faire ce que je veux! (ça change un peu!
;-) )

En A1, j'ai la date par =MAINTENANT() et à partir de cette date, je
voudrais pouvoir obtenir une liste déroulante en A2 (avec
donnéesvalidation) qui m'affiche dans la liste les 5 semaines qui suivent
par rapport à la date A1 (donc, par exemple pour le 14/10/04, en A2, je
trouverai : 'semaine 42', 'semaine 43', 'semaine 44', 'semaine 45' et
'semaine 46'); et une fois ma semaine sélectionnée en A2, en A3, je
pourrais

choisir le jour qui m'intéresse de la semaine sélectionnée en A2 (par
exemple : 'lundi 18 Octobre 2004', 'mardi 19 Octobre 2004'...etc...
jusqu'au

vendredi de la semaine sélectionnée en A2).

Par exemple :

- en A1 : 14/10/04 que je fige (F9)
- en A2 : je sélectionne 'Semaine 43'
- en A3 : je sélectionne 'Mercredi 20 Octobre 2004'

Et bien sur, que tout ça s'actualise en permanence par rapport à
=MAINTENANT() lorsque j'ouvre lon gabarit.

Ca à l'air compliqué?

Merci! ;-)

--
__________________________
Géjoun.

····················································
Enlevez l'année pour répondre...
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯



Avatar
papou
Heu :
Tu nommes ZnJours la plage D2:D5
D1:D5


Pardon !
Cordialement
Pascal
"papou" a écrit dans le message de
news:e$
Bonjour
Sans macro, au plus simple (?), ce que je ferais (mais ce n'est qu'un
avis)

Dans une feuille de préparation tu saisis une matrice des jours de l'année
avec dans la colonne à gauche des dates le numéro de semaine renvoyé par
la

fonction NOSEM (ou autre)
Donc dans la plage de A1 à B366 en colonne A le numéro de semaine, en
colonne B la date
Tu définis un nom pour cette plage, exemple = ZnDates
Dans cette même feuille de C1 à C5 :
la formule = NOSEM(Feuil1!A1) en C1
puis incrément de 1 pour les 4 autres lignes
Tu nommes la plage ZnNoSem
En D1, formule =RECHERCHEV(Feuil1!A2;ZnDates;2)-5
(où Feuil1 correspond à la feuille où tu veux tes listes de validation)
En D2 formule = D1+1 puis tu recopies vers le bas jusqu'à D5
Tu nommes ZnJours la plage D2:D5
Dans ta feuille qui va recevoir les listes :
En A1 formule =MAINTENANT()
En A2, Données Validation, Liste, Source = ZnNoSem
En A3, Données Validation, Liste, Source = ZnJours
Tu formates A3 en jjjj jj mmmm aaaa

Si besoin je peux t'envoyer un classeur exemple.

Cordialement
Pascal




"géjoun." a écrit dans le message de
news:
Bonjour,

Une fois de plus, j'arrive pas à faire ce que je veux! (ça change un
peu!


;-) )

En A1, j'ai la date par =MAINTENANT() et à partir de cette date, je
voudrais pouvoir obtenir une liste déroulante en A2 (avec
donnéesvalidation) qui m'affiche dans la liste les 5 semaines qui
suivent


par rapport à la date A1 (donc, par exemple pour le 14/10/04, en A2, je
trouverai : 'semaine 42', 'semaine 43', 'semaine 44', 'semaine 45' et
'semaine 46'); et une fois ma semaine sélectionnée en A2, en A3, je
pourrais

choisir le jour qui m'intéresse de la semaine sélectionnée en A2 (par
exemple : 'lundi 18 Octobre 2004', 'mardi 19 Octobre 2004'...etc...
jusqu'au

vendredi de la semaine sélectionnée en A2).

Par exemple :

- en A1 : 14/10/04 que je fige (F9)
- en A2 : je sélectionne 'Semaine 43'
- en A3 : je sélectionne 'Mercredi 20 Octobre 2004'

Et bien sur, que tout ça s'actualise en permanence par rapport à
=MAINTENANT() lorsque j'ouvre lon gabarit.

Ca à l'air compliqué?

Merci! ;-)

--
__________________________
Géjoun.

····················································
Enlevez l'année pour répondre...
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯







Avatar
géjoun.
De ses petits doigts, papou [] a tapoté:

Salut!

Je veux bien un exemple de ton classeur si ça te dérange pas....
Je te dirai si ça me va! ;-)

--
__________________________
Géjoun.

····················································
Enlevez l'année pour répondre...
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯


|| Heu :
||| Tu nommes ZnJours la plage D2:D5
|| D1:D5
||
|| Pardon !
|| Cordialement
|| Pascal
Avatar
papou
Ok c'est parti.
Cordialement
Pascal

"géjoun." a écrit dans le message de
news:%
De ses petits doigts, papou [] a tapoté:

Salut!

Je veux bien un exemple de ton classeur si ça te dérange pas....
Je te dirai si ça me va! ;-)

--
__________________________
Géjoun.

····················································
Enlevez l'année pour répondre...
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯


|| Heu :
||| Tu nommes ZnJours la plage D2:D5
|| D1:D5
||
|| Pardon !
|| Cordialement
|| Pascal





Avatar
papou
Heu n'oublie pas
Tu formates A3 en jjjj jj mmmm aaaa
Parce que dans l'exemple ce n'est pas fait !

Cordialement
Pascal

"papou" a écrit dans le message de
news:
Ok c'est parti.
Cordialement
Pascal

"géjoun." a écrit dans le message de
news:%
De ses petits doigts, papou [] a tapoté:

Salut!

Je veux bien un exemple de ton classeur si ça te dérange pas....
Je te dirai si ça me va! ;-)

--
__________________________
Géjoun.

····················································
Enlevez l'année pour répondre...
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯


|| Heu :
||| Tu nommes ZnJours la plage D2:D5
|| D1:D5
||
|| Pardon !
|| Cordialement
|| Pascal









Avatar
géjoun.
J'ai du mal à comprendre ton exemple...
Ce ne serait pas la version anglaise d'excel que tu as?
Et pourquoi il cherche à mettre à jour des liaisons quand je l'ouvre?
quelles liaisons???

Merci!

--
__________________________
Géjoun.

····················································
Enlevez l'année pour répondre...
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Avatar
papou
Re
Non je n'ai pas une version anglaise.
Remplace la fonction weeknum - que j'ai utilisé sans penser aux conséquence
pour toi :-(( - par la fonction NO.SEMAINE sachant qu'elle n'est disponible
qu'avec la macro complémentaire Utilitaire d'analyse chargée.
Si la fonction NO.SEMAINE ne te convenait pas, va chercher en téléchargement
la macro complémentaire MOREFUN.XLL de Laurent Longre ici :
http://longre.free.fr/index.html
Puis une fois chargée dans Excel, va chercher la fonction NUM.SEMAINE
Cordialement
Pascal

"géjoun." a écrit dans le message de
news:
J'ai du mal à comprendre ton exemple...
Ce ne serait pas la version anglaise d'excel que tu as?
Et pourquoi il cherche à mettre à jour des liaisons quand je l'ouvre?
quelles liaisons???

Merci!

--
__________________________
Géjoun.

····················································
Enlevez l'année pour répondre...
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯



Avatar
AV
Par macros ....
En supposant que tu saisisses une date en A1 ou bien qu'il y ai =aujourdhui() en
A1
Pour avoir ce que tu veux....
Dans le module de la feuille :

Private Sub Worksheet_Change(ByVal zz As Range)
If zz.Address = "$A$1" Then Valid_Sem
If zz.Address = "$B$1" Then valid_Jours
End Sub

Sub Valid_Sem()
xx = NUMSEM_ISO_europ([A1])
For i = xx To xx + 5
tablo = tablo & "Semaine " & i & ","
Next
If tablo = "" Then Exit Sub
Y = Left(tablo, Len(tablo) - 1)
With [B1].Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=Y
End With
[B1] = "Semaine " & xx
End Sub

Sub valid_Jours()
lunD = [(7*substitute(B1,"Semaine
","")+date(year(A1),1,3)-weekday(date(year(A1),1,3)))+1-6]
For i = lunD To lunD + 4
tablo2 = tablo2 & Format(i, "dddd dd mmmm yyyy") & ","
Next
Y2 = Left(tablo2, Len(tablo2) - 1)
With [C1].Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=Y2
End With
[C1] = Format(lunD, "dddd dd mmmm yyyy")
End Sub

Dans un module ordinaire :
Function NUMSEM_ISO_europ(cel As Range) 'av
'bug des dimanches 2 janvier pour les années 2101, 2501 (etc...intervalle 400
ans)
If Day(cel) = 2 And Month(cel) = 1 And Year(cel) Mod 400 = 101 Then
NUMSEM_ISO_europ = 52
Exit Function
End If
If Weekday(cel) = 2 And Month(cel) = 12 And Day(cel) > 28 Then
NUMSEM_ISO_europ = 1
Else: NUMSEM_ISO_europ = DatePart("ww", cel, 2, 2)
End If
End Function

AV
Avatar
géjoun.
De ses petits doigts, papou [] a tapoté:

Re,

C'est bon, je suis arrivé à le faire fonctionner, mais il reste quand même à
gratter un peu plus, car regarde ce que ça donne au niveau des jours lorsque
tu rentres le 15/12/04 en A1 (par exemple) et que tu choisis la semaine 53 :
ça décale la semaine (à moins que ce soit moi qui me soit tromper :-( ).
Et en plus, il faut que je cherches à limiter le tableau au nombre de
semaines piles de l'année choisie, bref, je me mets à checher! :-)

Merci!

--
__________________________
Géjoun.

····················································
Enlevez l'année pour répondre...
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Avatar
géjoun.
De ses petits doigts, AV [] a tapoté:

J'essaie ça dès que j'ai 3 secondes, merci AV!
--
__________________________
Géjoun.

····················································
Enlevez l'année pour répondre...
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯


|| Par macros ....
|| En supposant que tu saisisses une date en A1 ou bien qu'il y ai
|| =aujourdhui() en A1
|| Pour avoir ce que tu veux....
|| Dans le module de la feuille :
||
|| Private Sub Worksheet_Change(ByVal zz As Range)
|| If zz.Address = "$A$1" Then Valid_Sem
|| If zz.Address = "$B$1" Then valid_Jours
|| End Sub
||
|| Sub Valid_Sem()
|| xx = NUMSEM_ISO_europ([A1])
|| For i = xx To xx + 5
|| tablo = tablo & "Semaine " & i & ","
|| Next
|| If tablo = "" Then Exit Sub
|| Y = Left(tablo, Len(tablo) - 1)
|| With [B1].Validation
|| .Delete
|| .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop,
|| Operator:= _ xlBetween, Formula1:=Y
|| End With
|| [B1] = "Semaine " & xx
|| End Sub
||
|| Sub valid_Jours()
|| lunD = [(7*substitute(B1,"Semaine
|| ","")+date(year(A1),1,3)-weekday(date(year(A1),1,3)))+1-6]
|| For i = lunD To lunD + 4
|| tablo2 = tablo2 & Format(i, "dddd dd mmmm yyyy") & ","
|| Next
|| Y2 = Left(tablo2, Len(tablo2) - 1)
|| With [C1].Validation
|| .Delete
|| .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop,
|| Operator:= _ xlBetween, Formula1:=Y2
|| End With
|| [C1] = Format(lunD, "dddd dd mmmm yyyy")
|| End Sub
||
|| Dans un module ordinaire :
|| Function NUMSEM_ISO_europ(cel As Range) 'av
|| 'bug des dimanches 2 janvier pour les années 2101, 2501
|| (etc...intervalle 400 ans)
|| If Day(cel) = 2 And Month(cel) = 1 And Year(cel) Mod 400 = 101 Then
|| NUMSEM_ISO_europ = 52
|| Exit Function
|| End If
|| If Weekday(cel) = 2 And Month(cel) = 12 And Day(cel) > 28 Then
|| NUMSEM_ISO_europ = 1
|| Else: NUMSEM_ISO_europ = DatePart("ww", cel, 2, 2)
|| End If
|| End Function
||
|| AV
1 2