Il y aurait également
If c.Column > 10 And c.Column < 13 And c.Row > Then
Je pense que tu y es presque.
Il reste à t'assurer que les différentes saisies soient bien
interprétées et que
la procédure y réagisse d'une façon appropriée. Pour cela, je te
suggères de te
bâtir une liste des saisies 'autorisées' et des résultats attendus.
Publie-la ici (la liste des différentes saisies et comment elles
devraient être
traduites).
Ainsi, on serait en mesure d'adapter le code initial de Michel pour
tenir compte
de toutes les possibilités que tu auras identifiées.
Salutations,
Daniel M.
"J@@" wrote in message
news:%Bonjour Daniel
en fait mes saisies de dates sont seulement de K13:L13 à Kn:Ln
j'ai retouché une ligne
j'ai aussi retouché le format d/mm/yy h:mm, car j'ai l'impression
que
Excel confond jour et mois quand je n'ai qu'un caractère.
Ce qui reste ennuyeux c'est que la saisie doit-être très attentive :
si
oublie de l'année avant l'espace a ou p, crac. C'est aussi sensible
à la
casse..
Bon maintenant je modifie le code pour qu'il ne s'applique qu'aux
feuilles de saisies.
Merci beaucoup
@+
J@@
"Daniel.M" <> > J'espère juste que vu le nombre de feuilles (environ
100) je n'aurai pasde problèmes de mémoire.
Avec 100 feuilles, j'aurais tendance à utiliser plutôt l'événement
SheetChangedu Workbook. Il te faudra placer ce code au niveau du WorkBook (on
revient audépart :-))).
Vu que le code de Michel te va, je l'ai adapté pour l'événement
SheetChange (etrajouté une vérification sur la colonne, qui doit < 3, donc les
premières).
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target
As
Range)Dim c As Range
For Each c In Target
If c.Column < 3 Then
If Not IsError(CDate(Left(c, Len(c) - 2))) Then
Application.EnableEvents = False
c.NumberFormat = "d/mm/yy h:mm"
Select Case Right(c, 1)
Case "a"
c = CDate(Left(c, Len(c) - 2))
Case "p"
c = CDate(Left(c, Len(c) - 2)) + 0.5
End Select
Application.EnableEvents = True
End If
End If
Next c
End Sub
Salutations,
Daniel M.
Il y aurait également
If c.Column > 10 And c.Column < 13 And c.Row > Then
Je pense que tu y es presque.
Il reste à t'assurer que les différentes saisies soient bien
interprétées et que
la procédure y réagisse d'une façon appropriée. Pour cela, je te
suggères de te
bâtir une liste des saisies 'autorisées' et des résultats attendus.
Publie-la ici (la liste des différentes saisies et comment elles
devraient être
traduites).
Ainsi, on serait en mesure d'adapter le code initial de Michel pour
tenir compte
de toutes les possibilités que tu auras identifiées.
Salutations,
Daniel M.
"J@@" <jipivert@-ifrance.com> wrote in message
news:%23kREyqm0DHA.2388@TK2MSFTNGP09.phx.gbl...
Bonjour Daniel
en fait mes saisies de dates sont seulement de K13:L13 à Kn:Ln
j'ai retouché une ligne
j'ai aussi retouché le format d/mm/yy h:mm, car j'ai l'impression
que
Excel confond jour et mois quand je n'ai qu'un caractère.
Ce qui reste ennuyeux c'est que la saisie doit-être très attentive :
si
oublie de l'année avant l'espace a ou p, crac. C'est aussi sensible
à la
casse..
Bon maintenant je modifie le code pour qu'il ne s'applique qu'aux
feuilles de saisies.
Merci beaucoup
@+
J@@
"Daniel.M" <> > J'espère juste que vu le nombre de feuilles (environ
100) je n'aurai pas
de problèmes de mémoire.
Avec 100 feuilles, j'aurais tendance à utiliser plutôt l'événement
SheetChange
du Workbook. Il te faudra placer ce code au niveau du WorkBook (on
revient au
départ :-))).
Vu que le code de Michel te va, je l'ai adapté pour l'événement
SheetChange (et
rajouté une vérification sur la colonne, qui doit < 3, donc les
premières).
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target
As
Range)
Dim c As Range
For Each c In Target
If c.Column < 3 Then
If Not IsError(CDate(Left(c, Len(c) - 2))) Then
Application.EnableEvents = False
c.NumberFormat = "d/mm/yy h:mm"
Select Case Right(c, 1)
Case "a"
c = CDate(Left(c, Len(c) - 2))
Case "p"
c = CDate(Left(c, Len(c) - 2)) + 0.5
End Select
Application.EnableEvents = True
End If
End If
Next c
End Sub
Salutations,
Daniel M.
Il y aurait également
If c.Column > 10 And c.Column < 13 And c.Row > Then
Je pense que tu y es presque.
Il reste à t'assurer que les différentes saisies soient bien
interprétées et que
la procédure y réagisse d'une façon appropriée. Pour cela, je te
suggères de te
bâtir une liste des saisies 'autorisées' et des résultats attendus.
Publie-la ici (la liste des différentes saisies et comment elles
devraient être
traduites).
Ainsi, on serait en mesure d'adapter le code initial de Michel pour
tenir compte
de toutes les possibilités que tu auras identifiées.
Salutations,
Daniel M.
"J@@" wrote in message
news:%Bonjour Daniel
en fait mes saisies de dates sont seulement de K13:L13 à Kn:Ln
j'ai retouché une ligne
j'ai aussi retouché le format d/mm/yy h:mm, car j'ai l'impression
que
Excel confond jour et mois quand je n'ai qu'un caractère.
Ce qui reste ennuyeux c'est que la saisie doit-être très attentive :
si
oublie de l'année avant l'espace a ou p, crac. C'est aussi sensible
à la
casse..
Bon maintenant je modifie le code pour qu'il ne s'applique qu'aux
feuilles de saisies.
Merci beaucoup
@+
J@@
"Daniel.M" <> > J'espère juste que vu le nombre de feuilles (environ
100) je n'aurai pasde problèmes de mémoire.
Avec 100 feuilles, j'aurais tendance à utiliser plutôt l'événement
SheetChangedu Workbook. Il te faudra placer ce code au niveau du WorkBook (on
revient audépart :-))).
Vu que le code de Michel te va, je l'ai adapté pour l'événement
SheetChange (etrajouté une vérification sur la colonne, qui doit < 3, donc les
premières).
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target
As
Range)Dim c As Range
For Each c In Target
If c.Column < 3 Then
If Not IsError(CDate(Left(c, Len(c) - 2))) Then
Application.EnableEvents = False
c.NumberFormat = "d/mm/yy h:mm"
Select Case Right(c, 1)
Case "a"
c = CDate(Left(c, Len(c) - 2))
Case "p"
c = CDate(Left(c, Len(c) - 2)) + 0.5
End Select
Application.EnableEvents = True
End If
End If
Next c
End Sub
Salutations,
Daniel M.
Bonjour Daniel
j'ai retenu ta dernière proposition
Pardonnes-moi, mais ma femme vient de me demander de participer au
tirage de la galette des rois
Bonjour Daniel
j'ai retenu ta dernière proposition
Pardonnes-moi, mais ma femme vient de me demander de participer au
tirage de la galette des rois
Bonjour Daniel
j'ai retenu ta dernière proposition
Pardonnes-moi, mais ma femme vient de me demander de participer au
tirage de la galette des rois
"J@@" <> Alors, j'attends que tu identifies ici les manières abrégées
d'inscription des
entrées et les résultats finaux (i.e. des dates qui pourront ensuite
être
traités par une macro qui fait des compilation).
Cette liste comprend :
Types d'inscription DÉSIRÉES (pas celles qu'elles faisaient
auparavant, celles
qu'elles doivent faire selon TOI) et les transformations attendues
(comment les
nouvelles entrées sont interprétées pour donner des dates)
Les exemples que tu donnes sont DÉJÀ des dates. Si tu veux simplifier
la saisie,
tu t'attends à ce qu'on soit bref dans la saisie.
1 1 A ==> 1 jan 2004 0:00 AM ' par exemple
4 5 P ==> 4 mai 2004 12:00 PM ' par exemple
C'est juste des exemples, j'attends les tiens.Pardonnes-moi, mais ma femme vient de me demander de participer au
tirage de la galette des rois
QUOI ???@@@@???
S'il faut que nos femmes s'en mêlent: on n'est pas sorti du bois. :-))
Salutations,
Daniel M.
"J@@" <> Alors, j'attends que tu identifies ici les manières abrégées
d'inscription des
entrées et les résultats finaux (i.e. des dates qui pourront ensuite
être
traités par une macro qui fait des compilation).
Cette liste comprend :
Types d'inscription DÉSIRÉES (pas celles qu'elles faisaient
auparavant, celles
qu'elles doivent faire selon TOI) et les transformations attendues
(comment les
nouvelles entrées sont interprétées pour donner des dates)
Les exemples que tu donnes sont DÉJÀ des dates. Si tu veux simplifier
la saisie,
tu t'attends à ce qu'on soit bref dans la saisie.
1 1 A ==> 1 jan 2004 0:00 AM ' par exemple
4 5 P ==> 4 mai 2004 12:00 PM ' par exemple
C'est juste des exemples, j'attends les tiens.
Pardonnes-moi, mais ma femme vient de me demander de participer au
tirage de la galette des rois
QUOI ???@@@@???
S'il faut que nos femmes s'en mêlent: on n'est pas sorti du bois. :-))
Salutations,
Daniel M.
"J@@" <> Alors, j'attends que tu identifies ici les manières abrégées
d'inscription des
entrées et les résultats finaux (i.e. des dates qui pourront ensuite
être
traités par une macro qui fait des compilation).
Cette liste comprend :
Types d'inscription DÉSIRÉES (pas celles qu'elles faisaient
auparavant, celles
qu'elles doivent faire selon TOI) et les transformations attendues
(comment les
nouvelles entrées sont interprétées pour donner des dates)
Les exemples que tu donnes sont DÉJÀ des dates. Si tu veux simplifier
la saisie,
tu t'attends à ce qu'on soit bref dans la saisie.
1 1 A ==> 1 jan 2004 0:00 AM ' par exemple
4 5 P ==> 4 mai 2004 12:00 PM ' par exemple
C'est juste des exemples, j'attends les tiens.Pardonnes-moi, mais ma femme vient de me demander de participer au
tirage de la galette des rois
QUOI ???@@@@???
S'il faut que nos femmes s'en mêlent: on n'est pas sorti du bois. :-))
Salutations,
Daniel M.
**situation:
jours 1 à 31 => saisir 2 chiffres
mois 1 à 12 => saisir 2 chiffres
pour les jours entiers, il n'est pas nécessaire de préciser A,
le pb se pose si le matin seulement est concerné, donc la saisie de la
date de reprise contient P.
saisie:
20 01 (option 04) (option p ou P)
possibilité d'ajouter l'année quand risque d'ambiguïté 04 05 ...
ou P ou p pour être insensible à la casse)
omettre le slash / gagne du temps mais cela ne risque t il pas de
perturber les utilisateurs??
résultat:
20/01/04 0:00
20/01/04 12:00
ce qui est l'heure du début de l'action (arrêt ou reprise), c'est bien
visuel, et cela se calcule.
"Daniel.M" <...
"J@@" <> Alors, j'attends que tu identifies ici les manières
abrégées
d'inscription desentrées et les résultats finaux (i.e. des dates qui pourront ensuite
être traités par une macro qui fait des compilation).Cette liste comprend :
Types d'inscription DÉSIRÉES (pas celles qu'elles faisaient
auparavant, cellesqu'elles doivent faire selon TOI) et les transformations attendues
(comment lesnouvelles entrées sont interprétées pour donner des dates)
Les exemples que tu donnes sont DÉJÀ des dates. Si tu veux
simplifier
la saisie,tu t'attends à ce qu'on soit bref dans la saisie.
1 1 A ==> 1 jan 2004 0:00 AM ' par exemple
4 5 P ==> 4 mai 2004 12:00 PM ' par exemple
C'est juste des exemples, j'attends les tiens.
Daniel M.
**situation:
jours 1 à 31 => saisir 2 chiffres
mois 1 à 12 => saisir 2 chiffres
pour les jours entiers, il n'est pas nécessaire de préciser A,
le pb se pose si le matin seulement est concerné, donc la saisie de la
date de reprise contient P.
saisie:
20 01 (option 04) (option p ou P)
possibilité d'ajouter l'année quand risque d'ambiguïté 04 05 ...
ou P ou p pour être insensible à la casse)
omettre le slash / gagne du temps mais cela ne risque t il pas de
perturber les utilisateurs??
résultat:
20/01/04 0:00
20/01/04 12:00
ce qui est l'heure du début de l'action (arrêt ou reprise), c'est bien
visuel, et cela se calcule.
"Daniel.M" <...
"J@@" <> Alors, j'attends que tu identifies ici les manières
abrégées
d'inscription des
entrées et les résultats finaux (i.e. des dates qui pourront ensuite
être traités par une macro qui fait des compilation).
Cette liste comprend :
Types d'inscription DÉSIRÉES (pas celles qu'elles faisaient
auparavant, celles
qu'elles doivent faire selon TOI) et les transformations attendues
(comment les
nouvelles entrées sont interprétées pour donner des dates)
Les exemples que tu donnes sont DÉJÀ des dates. Si tu veux
simplifier
la saisie,
tu t'attends à ce qu'on soit bref dans la saisie.
1 1 A ==> 1 jan 2004 0:00 AM ' par exemple
4 5 P ==> 4 mai 2004 12:00 PM ' par exemple
C'est juste des exemples, j'attends les tiens.
Daniel M.
**situation:
jours 1 à 31 => saisir 2 chiffres
mois 1 à 12 => saisir 2 chiffres
pour les jours entiers, il n'est pas nécessaire de préciser A,
le pb se pose si le matin seulement est concerné, donc la saisie de la
date de reprise contient P.
saisie:
20 01 (option 04) (option p ou P)
possibilité d'ajouter l'année quand risque d'ambiguïté 04 05 ...
ou P ou p pour être insensible à la casse)
omettre le slash / gagne du temps mais cela ne risque t il pas de
perturber les utilisateurs??
résultat:
20/01/04 0:00
20/01/04 12:00
ce qui est l'heure du début de l'action (arrêt ou reprise), c'est bien
visuel, et cela se calcule.
"Daniel.M" <...
"J@@" <> Alors, j'attends que tu identifies ici les manières
abrégées
d'inscription desentrées et les résultats finaux (i.e. des dates qui pourront ensuite
être traités par une macro qui fait des compilation).Cette liste comprend :
Types d'inscription DÉSIRÉES (pas celles qu'elles faisaient
auparavant, cellesqu'elles doivent faire selon TOI) et les transformations attendues
(comment lesnouvelles entrées sont interprétées pour donner des dates)
Les exemples que tu donnes sont DÉJÀ des dates. Si tu veux
simplifier
la saisie,tu t'attends à ce qu'on soit bref dans la saisie.
1 1 A ==> 1 jan 2004 0:00 AM ' par exemple
4 5 P ==> 4 mai 2004 12:00 PM ' par exemple
C'est juste des exemples, j'attends les tiens.
Daniel M.
Bonsoir Daniel (coucher de soleil ici)
après une bonne galette et un coup de cidre (je suis le roi, je ne
dirais pas de quoi.. et puis ils mettent plusieurs fèves)
**situation:
jours 1 à 31 => saisir 2 chiffres
mois 1 à 12 => saisir 2 chiffres
pour les jours entiers, il n'est pas nécessaire de préciser A,
le pb se pose si le matin seulement est concerné, donc la saisie de la
date de reprise contient P.
saisie:
20 01 (option 04) (option p ou P)
possibilité d'ajouter l'année quand risque d'ambiguïté 04 05 ...
ou P ou p pour être insensible à la casse)
omettre le slash / gagne du temps mais cela ne risque t il pas de
perturber les utilisateurs??
résultat:
20/01/04 0:00
20/01/04 12:00
ce qui est l'heure du début de l'action (arrêt ou reprise), c'est bien
visuel, et cela se calcule.
**Autre point,j'ai dû casser mon Excel, la proc de réalise plus les
actions souhaitées. Alors que j'y arrivais tout à l'heure (et avec F9,
je ne vois rien)
Me faudra des siècles de travail pour progresser sérieusement...
Merci pour ton aide
J@@
"Daniel.M" <...
"J@@" <> Alors, j'attends que tu identifies ici les manières abrégées
d'inscription desentrées et les résultats finaux (i.e. des dates qui pourront ensuite
êtretraités par une macro qui fait des compilation).
Cette liste comprend :
Types d'inscription DÉSIRÉES (pas celles qu'elles faisaient
auparavant, cellesqu'elles doivent faire selon TOI) et les transformations attendues
(comment lesnouvelles entrées sont interprétées pour donner des dates)
Les exemples que tu donnes sont DÉJÀ des dates. Si tu veux simplifier
la saisie,tu t'attends à ce qu'on soit bref dans la saisie.
1 1 A ==> 1 jan 2004 0:00 AM ' par exemple
4 5 P ==> 4 mai 2004 12:00 PM ' par exemple
C'est juste des exemples, j'attends les tiens.Pardonnes-moi, mais ma femme vient de me demander de participer au
tirage de la galette des rois
QUOI ???@@@@???
S'il faut que nos femmes s'en mêlent: on n'est pas sorti du bois. :-))
Salutations,
Daniel M.
Bonsoir Daniel (coucher de soleil ici)
après une bonne galette et un coup de cidre (je suis le roi, je ne
dirais pas de quoi.. et puis ils mettent plusieurs fèves)
**situation:
jours 1 à 31 => saisir 2 chiffres
mois 1 à 12 => saisir 2 chiffres
pour les jours entiers, il n'est pas nécessaire de préciser A,
le pb se pose si le matin seulement est concerné, donc la saisie de la
date de reprise contient P.
saisie:
20 01 (option 04) (option p ou P)
possibilité d'ajouter l'année quand risque d'ambiguïté 04 05 ...
ou P ou p pour être insensible à la casse)
omettre le slash / gagne du temps mais cela ne risque t il pas de
perturber les utilisateurs??
résultat:
20/01/04 0:00
20/01/04 12:00
ce qui est l'heure du début de l'action (arrêt ou reprise), c'est bien
visuel, et cela se calcule.
**Autre point,j'ai dû casser mon Excel, la proc de réalise plus les
actions souhaitées. Alors que j'y arrivais tout à l'heure (et avec F9,
je ne vois rien)
Me faudra des siècles de travail pour progresser sérieusement...
Merci pour ton aide
J@@
"Daniel.M" <...
"J@@" <> Alors, j'attends que tu identifies ici les manières abrégées
d'inscription des
entrées et les résultats finaux (i.e. des dates qui pourront ensuite
être
traités par une macro qui fait des compilation).
Cette liste comprend :
Types d'inscription DÉSIRÉES (pas celles qu'elles faisaient
auparavant, celles
qu'elles doivent faire selon TOI) et les transformations attendues
(comment les
nouvelles entrées sont interprétées pour donner des dates)
Les exemples que tu donnes sont DÉJÀ des dates. Si tu veux simplifier
la saisie,
tu t'attends à ce qu'on soit bref dans la saisie.
1 1 A ==> 1 jan 2004 0:00 AM ' par exemple
4 5 P ==> 4 mai 2004 12:00 PM ' par exemple
C'est juste des exemples, j'attends les tiens.
Pardonnes-moi, mais ma femme vient de me demander de participer au
tirage de la galette des rois
QUOI ???@@@@???
S'il faut que nos femmes s'en mêlent: on n'est pas sorti du bois. :-))
Salutations,
Daniel M.
Bonsoir Daniel (coucher de soleil ici)
après une bonne galette et un coup de cidre (je suis le roi, je ne
dirais pas de quoi.. et puis ils mettent plusieurs fèves)
**situation:
jours 1 à 31 => saisir 2 chiffres
mois 1 à 12 => saisir 2 chiffres
pour les jours entiers, il n'est pas nécessaire de préciser A,
le pb se pose si le matin seulement est concerné, donc la saisie de la
date de reprise contient P.
saisie:
20 01 (option 04) (option p ou P)
possibilité d'ajouter l'année quand risque d'ambiguïté 04 05 ...
ou P ou p pour être insensible à la casse)
omettre le slash / gagne du temps mais cela ne risque t il pas de
perturber les utilisateurs??
résultat:
20/01/04 0:00
20/01/04 12:00
ce qui est l'heure du début de l'action (arrêt ou reprise), c'est bien
visuel, et cela se calcule.
**Autre point,j'ai dû casser mon Excel, la proc de réalise plus les
actions souhaitées. Alors que j'y arrivais tout à l'heure (et avec F9,
je ne vois rien)
Me faudra des siècles de travail pour progresser sérieusement...
Merci pour ton aide
J@@
"Daniel.M" <...
"J@@" <> Alors, j'attends que tu identifies ici les manières abrégées
d'inscription desentrées et les résultats finaux (i.e. des dates qui pourront ensuite
êtretraités par une macro qui fait des compilation).
Cette liste comprend :
Types d'inscription DÉSIRÉES (pas celles qu'elles faisaient
auparavant, cellesqu'elles doivent faire selon TOI) et les transformations attendues
(comment lesnouvelles entrées sont interprétées pour donner des dates)
Les exemples que tu donnes sont DÉJÀ des dates. Si tu veux simplifier
la saisie,tu t'attends à ce qu'on soit bref dans la saisie.
1 1 A ==> 1 jan 2004 0:00 AM ' par exemple
4 5 P ==> 4 mai 2004 12:00 PM ' par exemple
C'est juste des exemples, j'attends les tiens.Pardonnes-moi, mais ma femme vient de me demander de participer au
tirage de la galette des rois
QUOI ???@@@@???
S'il faut que nos femmes s'en mêlent: on n'est pas sorti du bois. :-))
Salutations,
Daniel M.
Bonjour J@@,
J'étais absent depuis vendredi soir ; c'est pour cela que je n'ai pas réagi depuis.
A nouveau à ta disposition pour finaliser la procédure si nécessaire ;-))Salut J@@,
La procédure suivante considère le premier nombre comme le Jour, le 2e comme le
Mois, le 3e comme l'Année.
L'omission d'un des 3 nombres retourne l'entrée courante (jour courant, mois
courant, année courante).
Donc 3 nombres ==> le jour + le mois + l'année
Donc 2 nombres ==> le jour + le mois, puis année courante
Donc 1 nombre ==> le jour, puis mois et année courante
Si tu mets un A: c'est une entrée AM. Si tu mets un P, c'est une entrée PM.
Exemples:
A ==> 4 jan 2004 0:00 AM
P ==> 4 jan 2004 12:00 PM
6 A ==> 6 jan 2004 0:00 AM
7P ==> 7 jan 2004 12:00 PM
7 2P ==> 7 fév 2004 12:00 PM
... etc
Le code suivante utilise Split() disponible depuis Excel 2000. Si tu as un Excel
plus vieux, remplace par Split97() que tu vas récupérer sur le site de Frédéric
Sigonneau.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim C As Range, s As String, V As Variant
Dim Valide As Boolean, AM As Boolean, i As Integer
Dim lAn As Integer, leMois As Integer, leJour As Integer
For Each C In Target
If C.Column > 10 And C.Column < 13 And C.Row >= 13 Then
If Len(Application.Substitute(C.Text, " ", "")) < 6 Then
' une entrée abbréviée, qu'on doit convertir
s = Application.Substitute(UCase(C.Text), "A", " A")
s = Application.Substitute(s, "B", " B")
V = Split(s, " ")
Valide = True
For i = LBound(V) To UBound(V)
If IsNumeric(V(i)) Then ' Un chiffre
If leJour = 0 Then
leJour = V(i)
ElseIf leMois = 0 Then
leMois = V(i)
ElseIf lAn = 0 Then
lAn = V(i)
Else
Valide = False
End If
Else ' indicateur AM ou PM
If V(i) = "A" Then
AM = True
ElseIf V(i) = "P" Then
AM = False
ElseIf V(i) <> "" Then 'autre chose==> erreur!
Valide = False
End If
End If
Next i
' mets les entrées par défaut (i.e. le jour courant)
' pour celles qui ne sont pas saisies
If leJour = 0 Then leJour = Day(Date)
If leMois = 0 Then leMois = Month(Date)
If lAn = 0 Then lAn = Year(Date)
'Si pas valide, on ne touche à rien
If Valide Then
Application.EnableEvents = False
C = DateSerial(lAn, leMois, leJour) + IIf(AM, 0, 0.5)
Application.EnableEvents = True
' on devrait mettre le bon format ici
'C.NumberFormat = "le format qu'on veut"
End If
End If
End If
Next C
End Sub
Salutations,
Daniel M.
"J@@" wrote in message
news:%Bonsoir Daniel (coucher de soleil ici)
après une bonne galette et un coup de cidre (je suis le roi, je ne
dirais pas de quoi.. et puis ils mettent plusieurs fèves)
**situation:
jours 1 à 31 => saisir 2 chiffres
mois 1 à 12 => saisir 2 chiffres
pour les jours entiers, il n'est pas nécessaire de préciser A,
le pb se pose si le matin seulement est concerné, donc la saisie de la
date de reprise contient P.
saisie:
20 01 (option 04) (option p ou P)
possibilité d'ajouter l'année quand risque d'ambiguïté 04 05 ...
ou P ou p pour être insensible à la casse)
omettre le slash / gagne du temps mais cela ne risque t il pas de
perturber les utilisateurs??
résultat:
20/01/04 0:00
20/01/04 12:00
ce qui est l'heure du début de l'action (arrêt ou reprise), c'est bien
visuel, et cela se calcule.
**Autre point,j'ai dû casser mon Excel, la proc de réalise plus les
actions souhaitées. Alors que j'y arrivais tout à l'heure (et avec F9,
je ne vois rien)
Me faudra des siècles de travail pour progresser sérieusement...
Merci pour ton aide
J@@
"Daniel.M" <...
"J@@" <> Alors, j'attends que tu identifies ici les manières abrégées
d'inscription desentrées et les résultats finaux (i.e. des dates qui pourront ensuite
êtretraités par une macro qui fait des compilation).
Cette liste comprend :
Types d'inscription DÉSIRÉES (pas celles qu'elles faisaient
auparavant, cellesqu'elles doivent faire selon TOI) et les transformations attendues
(comment lesnouvelles entrées sont interprétées pour donner des dates)
Les exemples que tu donnes sont DÉJÀ des dates. Si tu veux simplifier
la saisie,tu t'attends à ce qu'on soit bref dans la saisie.
1 1 A ==> 1 jan 2004 0:00 AM ' par exemple
4 5 P ==> 4 mai 2004 12:00 PM ' par exemple
C'est juste des exemples, j'attends les tiens.Pardonnes-moi, mais ma femme vient de me demander de participer au
tirage de la galette des rois
QUOI ???@@@@???
S'il faut que nos femmes s'en mêlent: on n'est pas sorti du bois. :-))
Salutations,
Daniel M.
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Bonjour J@@,
J'étais absent depuis vendredi soir ; c'est pour cela que je n'ai pas réagi depuis.
A nouveau à ta disposition pour finaliser la procédure si nécessaire ;-))
Salut J@@,
La procédure suivante considère le premier nombre comme le Jour, le 2e comme le
Mois, le 3e comme l'Année.
L'omission d'un des 3 nombres retourne l'entrée courante (jour courant, mois
courant, année courante).
Donc 3 nombres ==> le jour + le mois + l'année
Donc 2 nombres ==> le jour + le mois, puis année courante
Donc 1 nombre ==> le jour, puis mois et année courante
Si tu mets un A: c'est une entrée AM. Si tu mets un P, c'est une entrée PM.
Exemples:
A ==> 4 jan 2004 0:00 AM
P ==> 4 jan 2004 12:00 PM
6 A ==> 6 jan 2004 0:00 AM
7P ==> 7 jan 2004 12:00 PM
7 2P ==> 7 fév 2004 12:00 PM
... etc
Le code suivante utilise Split() disponible depuis Excel 2000. Si tu as un Excel
plus vieux, remplace par Split97() que tu vas récupérer sur le site de Frédéric
Sigonneau.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim C As Range, s As String, V As Variant
Dim Valide As Boolean, AM As Boolean, i As Integer
Dim lAn As Integer, leMois As Integer, leJour As Integer
For Each C In Target
If C.Column > 10 And C.Column < 13 And C.Row >= 13 Then
If Len(Application.Substitute(C.Text, " ", "")) < 6 Then
' une entrée abbréviée, qu'on doit convertir
s = Application.Substitute(UCase(C.Text), "A", " A")
s = Application.Substitute(s, "B", " B")
V = Split(s, " ")
Valide = True
For i = LBound(V) To UBound(V)
If IsNumeric(V(i)) Then ' Un chiffre
If leJour = 0 Then
leJour = V(i)
ElseIf leMois = 0 Then
leMois = V(i)
ElseIf lAn = 0 Then
lAn = V(i)
Else
Valide = False
End If
Else ' indicateur AM ou PM
If V(i) = "A" Then
AM = True
ElseIf V(i) = "P" Then
AM = False
ElseIf V(i) <> "" Then 'autre chose==> erreur!
Valide = False
End If
End If
Next i
' mets les entrées par défaut (i.e. le jour courant)
' pour celles qui ne sont pas saisies
If leJour = 0 Then leJour = Day(Date)
If leMois = 0 Then leMois = Month(Date)
If lAn = 0 Then lAn = Year(Date)
'Si pas valide, on ne touche à rien
If Valide Then
Application.EnableEvents = False
C = DateSerial(lAn, leMois, leJour) + IIf(AM, 0, 0.5)
Application.EnableEvents = True
' on devrait mettre le bon format ici
'C.NumberFormat = "le format qu'on veut"
End If
End If
End If
Next C
End Sub
Salutations,
Daniel M.
"J@@" <jipivert@-ifrance.com> wrote in message
news:%238zFMnn0DHA.1916@TK2MSFTNGP10.phx.gbl...
Bonsoir Daniel (coucher de soleil ici)
après une bonne galette et un coup de cidre (je suis le roi, je ne
dirais pas de quoi.. et puis ils mettent plusieurs fèves)
**situation:
jours 1 à 31 => saisir 2 chiffres
mois 1 à 12 => saisir 2 chiffres
pour les jours entiers, il n'est pas nécessaire de préciser A,
le pb se pose si le matin seulement est concerné, donc la saisie de la
date de reprise contient P.
saisie:
20 01 (option 04) (option p ou P)
possibilité d'ajouter l'année quand risque d'ambiguïté 04 05 ...
ou P ou p pour être insensible à la casse)
omettre le slash / gagne du temps mais cela ne risque t il pas de
perturber les utilisateurs??
résultat:
20/01/04 0:00
20/01/04 12:00
ce qui est l'heure du début de l'action (arrêt ou reprise), c'est bien
visuel, et cela se calcule.
**Autre point,j'ai dû casser mon Excel, la proc de réalise plus les
actions souhaitées. Alors que j'y arrivais tout à l'heure (et avec F9,
je ne vois rien)
Me faudra des siècles de travail pour progresser sérieusement...
Merci pour ton aide
J@@
"Daniel.M" <...
"J@@" <> Alors, j'attends que tu identifies ici les manières abrégées
d'inscription des
entrées et les résultats finaux (i.e. des dates qui pourront ensuite
être
traités par une macro qui fait des compilation).
Cette liste comprend :
Types d'inscription DÉSIRÉES (pas celles qu'elles faisaient
auparavant, celles
qu'elles doivent faire selon TOI) et les transformations attendues
(comment les
nouvelles entrées sont interprétées pour donner des dates)
Les exemples que tu donnes sont DÉJÀ des dates. Si tu veux simplifier
la saisie,
tu t'attends à ce qu'on soit bref dans la saisie.
1 1 A ==> 1 jan 2004 0:00 AM ' par exemple
4 5 P ==> 4 mai 2004 12:00 PM ' par exemple
C'est juste des exemples, j'attends les tiens.
Pardonnes-moi, mais ma femme vient de me demander de participer au
tirage de la galette des rois
QUOI ???@@@@???
S'il faut que nos femmes s'en mêlent: on n'est pas sorti du bois. :-))
Salutations,
Daniel M.
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Bonjour J@@,
J'étais absent depuis vendredi soir ; c'est pour cela que je n'ai pas réagi depuis.
A nouveau à ta disposition pour finaliser la procédure si nécessaire ;-))Salut J@@,
La procédure suivante considère le premier nombre comme le Jour, le 2e comme le
Mois, le 3e comme l'Année.
L'omission d'un des 3 nombres retourne l'entrée courante (jour courant, mois
courant, année courante).
Donc 3 nombres ==> le jour + le mois + l'année
Donc 2 nombres ==> le jour + le mois, puis année courante
Donc 1 nombre ==> le jour, puis mois et année courante
Si tu mets un A: c'est une entrée AM. Si tu mets un P, c'est une entrée PM.
Exemples:
A ==> 4 jan 2004 0:00 AM
P ==> 4 jan 2004 12:00 PM
6 A ==> 6 jan 2004 0:00 AM
7P ==> 7 jan 2004 12:00 PM
7 2P ==> 7 fév 2004 12:00 PM
... etc
Le code suivante utilise Split() disponible depuis Excel 2000. Si tu as un Excel
plus vieux, remplace par Split97() que tu vas récupérer sur le site de Frédéric
Sigonneau.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim C As Range, s As String, V As Variant
Dim Valide As Boolean, AM As Boolean, i As Integer
Dim lAn As Integer, leMois As Integer, leJour As Integer
For Each C In Target
If C.Column > 10 And C.Column < 13 And C.Row >= 13 Then
If Len(Application.Substitute(C.Text, " ", "")) < 6 Then
' une entrée abbréviée, qu'on doit convertir
s = Application.Substitute(UCase(C.Text), "A", " A")
s = Application.Substitute(s, "B", " B")
V = Split(s, " ")
Valide = True
For i = LBound(V) To UBound(V)
If IsNumeric(V(i)) Then ' Un chiffre
If leJour = 0 Then
leJour = V(i)
ElseIf leMois = 0 Then
leMois = V(i)
ElseIf lAn = 0 Then
lAn = V(i)
Else
Valide = False
End If
Else ' indicateur AM ou PM
If V(i) = "A" Then
AM = True
ElseIf V(i) = "P" Then
AM = False
ElseIf V(i) <> "" Then 'autre chose==> erreur!
Valide = False
End If
End If
Next i
' mets les entrées par défaut (i.e. le jour courant)
' pour celles qui ne sont pas saisies
If leJour = 0 Then leJour = Day(Date)
If leMois = 0 Then leMois = Month(Date)
If lAn = 0 Then lAn = Year(Date)
'Si pas valide, on ne touche à rien
If Valide Then
Application.EnableEvents = False
C = DateSerial(lAn, leMois, leJour) + IIf(AM, 0, 0.5)
Application.EnableEvents = True
' on devrait mettre le bon format ici
'C.NumberFormat = "le format qu'on veut"
End If
End If
End If
Next C
End Sub
Salutations,
Daniel M.
"J@@" wrote in message
news:%Bonsoir Daniel (coucher de soleil ici)
après une bonne galette et un coup de cidre (je suis le roi, je ne
dirais pas de quoi.. et puis ils mettent plusieurs fèves)
**situation:
jours 1 à 31 => saisir 2 chiffres
mois 1 à 12 => saisir 2 chiffres
pour les jours entiers, il n'est pas nécessaire de préciser A,
le pb se pose si le matin seulement est concerné, donc la saisie de la
date de reprise contient P.
saisie:
20 01 (option 04) (option p ou P)
possibilité d'ajouter l'année quand risque d'ambiguïté 04 05 ...
ou P ou p pour être insensible à la casse)
omettre le slash / gagne du temps mais cela ne risque t il pas de
perturber les utilisateurs??
résultat:
20/01/04 0:00
20/01/04 12:00
ce qui est l'heure du début de l'action (arrêt ou reprise), c'est bien
visuel, et cela se calcule.
**Autre point,j'ai dû casser mon Excel, la proc de réalise plus les
actions souhaitées. Alors que j'y arrivais tout à l'heure (et avec F9,
je ne vois rien)
Me faudra des siècles de travail pour progresser sérieusement...
Merci pour ton aide
J@@
"Daniel.M" <...
"J@@" <> Alors, j'attends que tu identifies ici les manières abrégées
d'inscription desentrées et les résultats finaux (i.e. des dates qui pourront ensuite
êtretraités par une macro qui fait des compilation).
Cette liste comprend :
Types d'inscription DÉSIRÉES (pas celles qu'elles faisaient
auparavant, cellesqu'elles doivent faire selon TOI) et les transformations attendues
(comment lesnouvelles entrées sont interprétées pour donner des dates)
Les exemples que tu donnes sont DÉJÀ des dates. Si tu veux simplifier
la saisie,tu t'attends à ce qu'on soit bref dans la saisie.
1 1 A ==> 1 jan 2004 0:00 AM ' par exemple
4 5 P ==> 4 mai 2004 12:00 PM ' par exemple
C'est juste des exemples, j'attends les tiens.Pardonnes-moi, mais ma femme vient de me demander de participer au
tirage de la galette des rois
QUOI ???@@@@???
S'il faut que nos femmes s'en mêlent: on n'est pas sorti du bois. :-))
Salutations,
Daniel M.
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Salut J@@,
La procédure suivante considère le premier nombre comme le Jour, le 2e comme le
Mois, le 3e comme l'Année.
L'omission d'un des 3 nombres retourne l'entrée courante (jour courant, mois
courant, année courante).
Donc 3 nombres ==> le jour + le mois + l'année
Donc 2 nombres ==> le jour + le mois, puis année courante
Donc 1 nombre ==> le jour, puis mois et année courante
Si tu mets un A: c'est une entrée AM. Si tu mets un P, c'est une entrée PM.
Exemples:
A ==> 4 jan 2004 0:00 AM
P ==> 4 jan 2004 12:00 PM
6 A ==> 6 jan 2004 0:00 AM
7P ==> 7 jan 2004 12:00 PM
7 2P ==> 7 fév 2004 12:00 PM
... etc
Le code suivante utilise Split() disponible depuis Excel 2000. Si tu as un Excel
plus vieux, remplace par Split97() que tu vas récupérer sur le site de Frédéric
Sigonneau.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim C As Range, s As String, V As Variant
Dim Valide As Boolean, AM As Boolean, i As Integer
Dim lAn As Integer, leMois As Integer, leJour As Integer
For Each C In Target
If C.Column > 10 And C.Column < 13 And C.Row >= 13 Then
If Len(Application.Substitute(C.Text, " ", "")) < 6 Then
' une entrée abbréviée, qu'on doit convertir
s = Application.Substitute(UCase(C.Text), "A", " A")
s = Application.Substitute(s, "B", " B")
V = Split(s, " ")
Valide = True
For i = LBound(V) To UBound(V)
If IsNumeric(V(i)) Then ' Un chiffre
If leJour = 0 Then
leJour = V(i)
ElseIf leMois = 0 Then
leMois = V(i)
ElseIf lAn = 0 Then
lAn = V(i)
Else
Valide = False
End If
Else ' indicateur AM ou PM
If V(i) = "A" Then
AM = True
ElseIf V(i) = "P" Then
AM = False
ElseIf V(i) <> "" Then 'autre chose==> erreur!
Valide = False
End If
End If
Next i
' mets les entrées par défaut (i.e. le jour courant)
' pour celles qui ne sont pas saisies
If leJour = 0 Then leJour = Day(Date)
If leMois = 0 Then leMois = Month(Date)
If lAn = 0 Then lAn = Year(Date)
'Si pas valide, on ne touche à rien
If Valide Then
Application.EnableEvents = False
C = DateSerial(lAn, leMois, leJour) + IIf(AM, 0, 0.5)
Application.EnableEvents = True
' on devrait mettre le bon format ici
'C.NumberFormat = "le format qu'on veut"
End If
End If
End If
Next C
End Sub
Salutations,
Daniel M.
"J@@" wrote in message
news:%Bonsoir Daniel (coucher de soleil ici)
après une bonne galette et un coup de cidre (je suis le roi, je ne
dirais pas de quoi.. et puis ils mettent plusieurs fèves)
**situation:
jours 1 à 31 => saisir 2 chiffres
mois 1 à 12 => saisir 2 chiffres
pour les jours entiers, il n'est pas nécessaire de préciser A,
le pb se pose si le matin seulement est concerné, donc la saisie de la
date de reprise contient P.
saisie:
20 01 (option 04) (option p ou P)
possibilité d'ajouter l'année quand risque d'ambiguïté 04 05 ...
ou P ou p pour être insensible à la casse)
omettre le slash / gagne du temps mais cela ne risque t il pas de
perturber les utilisateurs??
résultat:
20/01/04 0:00
20/01/04 12:00
ce qui est l'heure du début de l'action (arrêt ou reprise), c'est bien
visuel, et cela se calcule.
**Autre point,j'ai dû casser mon Excel, la proc de réalise plus les
actions souhaitées. Alors que j'y arrivais tout à l'heure (et avec F9,
je ne vois rien)
Me faudra des siècles de travail pour progresser sérieusement...
Merci pour ton aide
J@@
"Daniel.M" <...
"J@@" <> Alors, j'attends que tu identifies ici les manières abrégées
d'inscription desentrées et les résultats finaux (i.e. des dates qui pourront ensuite
êtretraités par une macro qui fait des compilation).
Cette liste comprend :
Types d'inscription DÉSIRÉES (pas celles qu'elles faisaient
auparavant, cellesqu'elles doivent faire selon TOI) et les transformations attendues
(comment lesnouvelles entrées sont interprétées pour donner des dates)
Les exemples que tu donnes sont DÉJÀ des dates. Si tu veux simplifier
la saisie,tu t'attends à ce qu'on soit bref dans la saisie.
1 1 A ==> 1 jan 2004 0:00 AM ' par exemple
4 5 P ==> 4 mai 2004 12:00 PM ' par exemple
C'est juste des exemples, j'attends les tiens.Pardonnes-moi, mais ma femme vient de me demander de participer au
tirage de la galette des rois
QUOI ???@@@@???
S'il faut que nos femmes s'en mêlent: on n'est pas sorti du bois. :-))
Salutations,
Daniel M.
Salut J@@,
La procédure suivante considère le premier nombre comme le Jour, le 2e comme le
Mois, le 3e comme l'Année.
L'omission d'un des 3 nombres retourne l'entrée courante (jour courant, mois
courant, année courante).
Donc 3 nombres ==> le jour + le mois + l'année
Donc 2 nombres ==> le jour + le mois, puis année courante
Donc 1 nombre ==> le jour, puis mois et année courante
Si tu mets un A: c'est une entrée AM. Si tu mets un P, c'est une entrée PM.
Exemples:
A ==> 4 jan 2004 0:00 AM
P ==> 4 jan 2004 12:00 PM
6 A ==> 6 jan 2004 0:00 AM
7P ==> 7 jan 2004 12:00 PM
7 2P ==> 7 fév 2004 12:00 PM
... etc
Le code suivante utilise Split() disponible depuis Excel 2000. Si tu as un Excel
plus vieux, remplace par Split97() que tu vas récupérer sur le site de Frédéric
Sigonneau.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim C As Range, s As String, V As Variant
Dim Valide As Boolean, AM As Boolean, i As Integer
Dim lAn As Integer, leMois As Integer, leJour As Integer
For Each C In Target
If C.Column > 10 And C.Column < 13 And C.Row >= 13 Then
If Len(Application.Substitute(C.Text, " ", "")) < 6 Then
' une entrée abbréviée, qu'on doit convertir
s = Application.Substitute(UCase(C.Text), "A", " A")
s = Application.Substitute(s, "B", " B")
V = Split(s, " ")
Valide = True
For i = LBound(V) To UBound(V)
If IsNumeric(V(i)) Then ' Un chiffre
If leJour = 0 Then
leJour = V(i)
ElseIf leMois = 0 Then
leMois = V(i)
ElseIf lAn = 0 Then
lAn = V(i)
Else
Valide = False
End If
Else ' indicateur AM ou PM
If V(i) = "A" Then
AM = True
ElseIf V(i) = "P" Then
AM = False
ElseIf V(i) <> "" Then 'autre chose==> erreur!
Valide = False
End If
End If
Next i
' mets les entrées par défaut (i.e. le jour courant)
' pour celles qui ne sont pas saisies
If leJour = 0 Then leJour = Day(Date)
If leMois = 0 Then leMois = Month(Date)
If lAn = 0 Then lAn = Year(Date)
'Si pas valide, on ne touche à rien
If Valide Then
Application.EnableEvents = False
C = DateSerial(lAn, leMois, leJour) + IIf(AM, 0, 0.5)
Application.EnableEvents = True
' on devrait mettre le bon format ici
'C.NumberFormat = "le format qu'on veut"
End If
End If
End If
Next C
End Sub
Salutations,
Daniel M.
"J@@" <jipivert@-ifrance.com> wrote in message
news:%238zFMnn0DHA.1916@TK2MSFTNGP10.phx.gbl...
Bonsoir Daniel (coucher de soleil ici)
après une bonne galette et un coup de cidre (je suis le roi, je ne
dirais pas de quoi.. et puis ils mettent plusieurs fèves)
**situation:
jours 1 à 31 => saisir 2 chiffres
mois 1 à 12 => saisir 2 chiffres
pour les jours entiers, il n'est pas nécessaire de préciser A,
le pb se pose si le matin seulement est concerné, donc la saisie de la
date de reprise contient P.
saisie:
20 01 (option 04) (option p ou P)
possibilité d'ajouter l'année quand risque d'ambiguïté 04 05 ...
ou P ou p pour être insensible à la casse)
omettre le slash / gagne du temps mais cela ne risque t il pas de
perturber les utilisateurs??
résultat:
20/01/04 0:00
20/01/04 12:00
ce qui est l'heure du début de l'action (arrêt ou reprise), c'est bien
visuel, et cela se calcule.
**Autre point,j'ai dû casser mon Excel, la proc de réalise plus les
actions souhaitées. Alors que j'y arrivais tout à l'heure (et avec F9,
je ne vois rien)
Me faudra des siècles de travail pour progresser sérieusement...
Merci pour ton aide
J@@
"Daniel.M" <...
"J@@" <> Alors, j'attends que tu identifies ici les manières abrégées
d'inscription des
entrées et les résultats finaux (i.e. des dates qui pourront ensuite
être
traités par une macro qui fait des compilation).
Cette liste comprend :
Types d'inscription DÉSIRÉES (pas celles qu'elles faisaient
auparavant, celles
qu'elles doivent faire selon TOI) et les transformations attendues
(comment les
nouvelles entrées sont interprétées pour donner des dates)
Les exemples que tu donnes sont DÉJÀ des dates. Si tu veux simplifier
la saisie,
tu t'attends à ce qu'on soit bref dans la saisie.
1 1 A ==> 1 jan 2004 0:00 AM ' par exemple
4 5 P ==> 4 mai 2004 12:00 PM ' par exemple
C'est juste des exemples, j'attends les tiens.
Pardonnes-moi, mais ma femme vient de me demander de participer au
tirage de la galette des rois
QUOI ???@@@@???
S'il faut que nos femmes s'en mêlent: on n'est pas sorti du bois. :-))
Salutations,
Daniel M.
Salut J@@,
La procédure suivante considère le premier nombre comme le Jour, le 2e comme le
Mois, le 3e comme l'Année.
L'omission d'un des 3 nombres retourne l'entrée courante (jour courant, mois
courant, année courante).
Donc 3 nombres ==> le jour + le mois + l'année
Donc 2 nombres ==> le jour + le mois, puis année courante
Donc 1 nombre ==> le jour, puis mois et année courante
Si tu mets un A: c'est une entrée AM. Si tu mets un P, c'est une entrée PM.
Exemples:
A ==> 4 jan 2004 0:00 AM
P ==> 4 jan 2004 12:00 PM
6 A ==> 6 jan 2004 0:00 AM
7P ==> 7 jan 2004 12:00 PM
7 2P ==> 7 fév 2004 12:00 PM
... etc
Le code suivante utilise Split() disponible depuis Excel 2000. Si tu as un Excel
plus vieux, remplace par Split97() que tu vas récupérer sur le site de Frédéric
Sigonneau.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim C As Range, s As String, V As Variant
Dim Valide As Boolean, AM As Boolean, i As Integer
Dim lAn As Integer, leMois As Integer, leJour As Integer
For Each C In Target
If C.Column > 10 And C.Column < 13 And C.Row >= 13 Then
If Len(Application.Substitute(C.Text, " ", "")) < 6 Then
' une entrée abbréviée, qu'on doit convertir
s = Application.Substitute(UCase(C.Text), "A", " A")
s = Application.Substitute(s, "B", " B")
V = Split(s, " ")
Valide = True
For i = LBound(V) To UBound(V)
If IsNumeric(V(i)) Then ' Un chiffre
If leJour = 0 Then
leJour = V(i)
ElseIf leMois = 0 Then
leMois = V(i)
ElseIf lAn = 0 Then
lAn = V(i)
Else
Valide = False
End If
Else ' indicateur AM ou PM
If V(i) = "A" Then
AM = True
ElseIf V(i) = "P" Then
AM = False
ElseIf V(i) <> "" Then 'autre chose==> erreur!
Valide = False
End If
End If
Next i
' mets les entrées par défaut (i.e. le jour courant)
' pour celles qui ne sont pas saisies
If leJour = 0 Then leJour = Day(Date)
If leMois = 0 Then leMois = Month(Date)
If lAn = 0 Then lAn = Year(Date)
'Si pas valide, on ne touche à rien
If Valide Then
Application.EnableEvents = False
C = DateSerial(lAn, leMois, leJour) + IIf(AM, 0, 0.5)
Application.EnableEvents = True
' on devrait mettre le bon format ici
'C.NumberFormat = "le format qu'on veut"
End If
End If
End If
Next C
End Sub
Salutations,
Daniel M.
"J@@" wrote in message
news:%Bonsoir Daniel (coucher de soleil ici)
après une bonne galette et un coup de cidre (je suis le roi, je ne
dirais pas de quoi.. et puis ils mettent plusieurs fèves)
**situation:
jours 1 à 31 => saisir 2 chiffres
mois 1 à 12 => saisir 2 chiffres
pour les jours entiers, il n'est pas nécessaire de préciser A,
le pb se pose si le matin seulement est concerné, donc la saisie de la
date de reprise contient P.
saisie:
20 01 (option 04) (option p ou P)
possibilité d'ajouter l'année quand risque d'ambiguïté 04 05 ...
ou P ou p pour être insensible à la casse)
omettre le slash / gagne du temps mais cela ne risque t il pas de
perturber les utilisateurs??
résultat:
20/01/04 0:00
20/01/04 12:00
ce qui est l'heure du début de l'action (arrêt ou reprise), c'est bien
visuel, et cela se calcule.
**Autre point,j'ai dû casser mon Excel, la proc de réalise plus les
actions souhaitées. Alors que j'y arrivais tout à l'heure (et avec F9,
je ne vois rien)
Me faudra des siècles de travail pour progresser sérieusement...
Merci pour ton aide
J@@
"Daniel.M" <...
"J@@" <> Alors, j'attends que tu identifies ici les manières abrégées
d'inscription desentrées et les résultats finaux (i.e. des dates qui pourront ensuite
êtretraités par une macro qui fait des compilation).
Cette liste comprend :
Types d'inscription DÉSIRÉES (pas celles qu'elles faisaient
auparavant, cellesqu'elles doivent faire selon TOI) et les transformations attendues
(comment lesnouvelles entrées sont interprétées pour donner des dates)
Les exemples que tu donnes sont DÉJÀ des dates. Si tu veux simplifier
la saisie,tu t'attends à ce qu'on soit bref dans la saisie.
1 1 A ==> 1 jan 2004 0:00 AM ' par exemple
4 5 P ==> 4 mai 2004 12:00 PM ' par exemple
C'est juste des exemples, j'attends les tiens.Pardonnes-moi, mais ma femme vient de me demander de participer au
tirage de la galette des rois
QUOI ???@@@@???
S'il faut que nos femmes s'en mêlent: on n'est pas sorti du bois. :-))
Salutations,
Daniel M.
La procédure suivante considère le premier nombre comme le Jour, le 2e
comme le
Mois, le 3e comme l'Année.
L'omission d'un des 3 nombres retourne l'entrée courante (jour
courant, mois
courant, année courante).
Donc 3 nombres ==> le jour + le mois + l'année
Donc 2 nombres ==> le jour + le mois, puis année courante
Donc 1 nombre ==> le jour, puis mois et année courante
Si tu mets un A: c'est une entrée AM. Si tu mets un P, c'est une
entrée PM.
Exemples:
A ==> 4 jan 2004 0:00 AM
P ==> 4 jan 2004 12:00 PM
6 A ==> 6 jan 2004 0:00 AM
7P ==> 7 jan 2004 12:00 PM
7 2P ==> 7 fév 2004 12:00 PM
... etc
Le code suivante utilise Split() disponible depuis Excel 2000. Si tu
as un Excel
plus vieux, remplace par Split97() que tu vas récupérer sur le site de
Frédéric
Sigonneau.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As
Range)
Dim C As Range, s As String, V As Variant
Dim Valide As Boolean, AM As Boolean, i As Integer
Dim lAn As Integer, leMois As Integer, leJour As Integer
For Each C In Target
If C.Column > 10 And C.Column < 13 And C.Row >= 13 Then
If Len(Application.Substitute(C.Text, " ", "")) < 6 Then
' une entrée abbréviée, qu'on doit convertir
s = Application.Substitute(UCase(C.Text), "A", " A")
s = Application.Substitute(s, "B", " B")
V = Split(s, " ")
Valide = True
For i = LBound(V) To UBound(V)
If IsNumeric(V(i)) Then ' Un chiffre
If leJour = 0 Then
leJour = V(i)
ElseIf leMois = 0 Then
leMois = V(i)
ElseIf lAn = 0 Then
lAn = V(i)
Else
Valide = False
End If
Else ' indicateur AM ou PM
If V(i) = "A" Then
AM = True
ElseIf V(i) = "P" Then
AM = False
ElseIf V(i) <> "" Then 'autre chose==> erreur!
Valide = False
End If
End If
Next i
' mets les entrées par défaut (i.e. le jour courant)
' pour celles qui ne sont pas saisies
If leJour = 0 Then leJour = Day(Date)
If leMois = 0 Then leMois = Month(Date)
If lAn = 0 Then lAn = Year(Date)
'Si pas valide, on ne touche à rien
If Valide Then
Application.EnableEvents = False
C = DateSerial(lAn, leMois, leJour) + IIf(AM, 0, 0.5)
Application.EnableEvents = True
' on devrait mettre le bon format ici
'C.NumberFormat = "le format qu'on veut"
End If
End If
End If
Next C
End Sub
Salutations,
Daniel M.
"J@@" <> > **situation:jours 1 à 31 => saisir 2 chiffres
mois 1 à 12 => saisir 2 chiffres
pour les jours entiers, il n'est pas nécessaire de préciser A,
le pb se pose si le matin seulement est concerné, donc la saisie de
la
date de reprise contient P.
saisie:
20 01 (option 04) (option p ou P)
possibilité d'ajouter l'année quand risque d'ambiguïté 04 05 ...
ou P ou p pour être insensible à la casse)
omettre le slash / gagne du temps mais cela ne risque t il pas de
perturber les utilisateurs??
résultat:
20/01/04 0:00
20/01/04 12:00
ce qui est l'heure du début de l'action (arrêt ou reprise), c'est
bien
visuel, et cela se calcule.
J@@
"Daniel.M" <...
"J@@" <> Alors, j'attends que tu identifies ici les manières
abrégées
d'inscription desentrées et les résultats finaux (i.e. des dates qui pourront
ensuite
êtretraités par une macro qui fait des compilation).
Cette liste comprend :
Types d'inscription DÉSIRÉES (pas celles qu'elles faisaient
auparavant, cellesqu'elles doivent faire selon TOI) et les transformations attendues
(comment lesnouvelles entrées sont interprétées pour donner des dates)
Les exemples que tu donnes sont DÉJÀ des dates. Si tu veux
simplifier
la saisie,tu t'attends à ce qu'on soit bref dans la saisie.
1 1 A ==> 1 jan 2004 0:00 AM ' par exemple
4 5 P ==> 4 mai 2004 12:00 PM ' par exemple
C'est juste des exemples, j'attends les tiens.
Daniel M.
La procédure suivante considère le premier nombre comme le Jour, le 2e
comme le
Mois, le 3e comme l'Année.
L'omission d'un des 3 nombres retourne l'entrée courante (jour
courant, mois
courant, année courante).
Donc 3 nombres ==> le jour + le mois + l'année
Donc 2 nombres ==> le jour + le mois, puis année courante
Donc 1 nombre ==> le jour, puis mois et année courante
Si tu mets un A: c'est une entrée AM. Si tu mets un P, c'est une
entrée PM.
Exemples:
A ==> 4 jan 2004 0:00 AM
P ==> 4 jan 2004 12:00 PM
6 A ==> 6 jan 2004 0:00 AM
7P ==> 7 jan 2004 12:00 PM
7 2P ==> 7 fév 2004 12:00 PM
... etc
Le code suivante utilise Split() disponible depuis Excel 2000. Si tu
as un Excel
plus vieux, remplace par Split97() que tu vas récupérer sur le site de
Frédéric
Sigonneau.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As
Range)
Dim C As Range, s As String, V As Variant
Dim Valide As Boolean, AM As Boolean, i As Integer
Dim lAn As Integer, leMois As Integer, leJour As Integer
For Each C In Target
If C.Column > 10 And C.Column < 13 And C.Row >= 13 Then
If Len(Application.Substitute(C.Text, " ", "")) < 6 Then
' une entrée abbréviée, qu'on doit convertir
s = Application.Substitute(UCase(C.Text), "A", " A")
s = Application.Substitute(s, "B", " B")
V = Split(s, " ")
Valide = True
For i = LBound(V) To UBound(V)
If IsNumeric(V(i)) Then ' Un chiffre
If leJour = 0 Then
leJour = V(i)
ElseIf leMois = 0 Then
leMois = V(i)
ElseIf lAn = 0 Then
lAn = V(i)
Else
Valide = False
End If
Else ' indicateur AM ou PM
If V(i) = "A" Then
AM = True
ElseIf V(i) = "P" Then
AM = False
ElseIf V(i) <> "" Then 'autre chose==> erreur!
Valide = False
End If
End If
Next i
' mets les entrées par défaut (i.e. le jour courant)
' pour celles qui ne sont pas saisies
If leJour = 0 Then leJour = Day(Date)
If leMois = 0 Then leMois = Month(Date)
If lAn = 0 Then lAn = Year(Date)
'Si pas valide, on ne touche à rien
If Valide Then
Application.EnableEvents = False
C = DateSerial(lAn, leMois, leJour) + IIf(AM, 0, 0.5)
Application.EnableEvents = True
' on devrait mettre le bon format ici
'C.NumberFormat = "le format qu'on veut"
End If
End If
End If
Next C
End Sub
Salutations,
Daniel M.
"J@@" <> > **situation:
jours 1 à 31 => saisir 2 chiffres
mois 1 à 12 => saisir 2 chiffres
pour les jours entiers, il n'est pas nécessaire de préciser A,
le pb se pose si le matin seulement est concerné, donc la saisie de
la
date de reprise contient P.
saisie:
20 01 (option 04) (option p ou P)
possibilité d'ajouter l'année quand risque d'ambiguïté 04 05 ...
ou P ou p pour être insensible à la casse)
omettre le slash / gagne du temps mais cela ne risque t il pas de
perturber les utilisateurs??
résultat:
20/01/04 0:00
20/01/04 12:00
ce qui est l'heure du début de l'action (arrêt ou reprise), c'est
bien
visuel, et cela se calcule.
J@@
"Daniel.M" <...
"J@@" <> Alors, j'attends que tu identifies ici les manières
abrégées
d'inscription des
entrées et les résultats finaux (i.e. des dates qui pourront
ensuite
être
traités par une macro qui fait des compilation).
Cette liste comprend :
Types d'inscription DÉSIRÉES (pas celles qu'elles faisaient
auparavant, celles
qu'elles doivent faire selon TOI) et les transformations attendues
(comment les
nouvelles entrées sont interprétées pour donner des dates)
Les exemples que tu donnes sont DÉJÀ des dates. Si tu veux
simplifier
la saisie,
tu t'attends à ce qu'on soit bref dans la saisie.
1 1 A ==> 1 jan 2004 0:00 AM ' par exemple
4 5 P ==> 4 mai 2004 12:00 PM ' par exemple
C'est juste des exemples, j'attends les tiens.
Daniel M.
La procédure suivante considère le premier nombre comme le Jour, le 2e
comme le
Mois, le 3e comme l'Année.
L'omission d'un des 3 nombres retourne l'entrée courante (jour
courant, mois
courant, année courante).
Donc 3 nombres ==> le jour + le mois + l'année
Donc 2 nombres ==> le jour + le mois, puis année courante
Donc 1 nombre ==> le jour, puis mois et année courante
Si tu mets un A: c'est une entrée AM. Si tu mets un P, c'est une
entrée PM.
Exemples:
A ==> 4 jan 2004 0:00 AM
P ==> 4 jan 2004 12:00 PM
6 A ==> 6 jan 2004 0:00 AM
7P ==> 7 jan 2004 12:00 PM
7 2P ==> 7 fév 2004 12:00 PM
... etc
Le code suivante utilise Split() disponible depuis Excel 2000. Si tu
as un Excel
plus vieux, remplace par Split97() que tu vas récupérer sur le site de
Frédéric
Sigonneau.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As
Range)
Dim C As Range, s As String, V As Variant
Dim Valide As Boolean, AM As Boolean, i As Integer
Dim lAn As Integer, leMois As Integer, leJour As Integer
For Each C In Target
If C.Column > 10 And C.Column < 13 And C.Row >= 13 Then
If Len(Application.Substitute(C.Text, " ", "")) < 6 Then
' une entrée abbréviée, qu'on doit convertir
s = Application.Substitute(UCase(C.Text), "A", " A")
s = Application.Substitute(s, "B", " B")
V = Split(s, " ")
Valide = True
For i = LBound(V) To UBound(V)
If IsNumeric(V(i)) Then ' Un chiffre
If leJour = 0 Then
leJour = V(i)
ElseIf leMois = 0 Then
leMois = V(i)
ElseIf lAn = 0 Then
lAn = V(i)
Else
Valide = False
End If
Else ' indicateur AM ou PM
If V(i) = "A" Then
AM = True
ElseIf V(i) = "P" Then
AM = False
ElseIf V(i) <> "" Then 'autre chose==> erreur!
Valide = False
End If
End If
Next i
' mets les entrées par défaut (i.e. le jour courant)
' pour celles qui ne sont pas saisies
If leJour = 0 Then leJour = Day(Date)
If leMois = 0 Then leMois = Month(Date)
If lAn = 0 Then lAn = Year(Date)
'Si pas valide, on ne touche à rien
If Valide Then
Application.EnableEvents = False
C = DateSerial(lAn, leMois, leJour) + IIf(AM, 0, 0.5)
Application.EnableEvents = True
' on devrait mettre le bon format ici
'C.NumberFormat = "le format qu'on veut"
End If
End If
End If
Next C
End Sub
Salutations,
Daniel M.
"J@@" <> > **situation:jours 1 à 31 => saisir 2 chiffres
mois 1 à 12 => saisir 2 chiffres
pour les jours entiers, il n'est pas nécessaire de préciser A,
le pb se pose si le matin seulement est concerné, donc la saisie de
la
date de reprise contient P.
saisie:
20 01 (option 04) (option p ou P)
possibilité d'ajouter l'année quand risque d'ambiguïté 04 05 ...
ou P ou p pour être insensible à la casse)
omettre le slash / gagne du temps mais cela ne risque t il pas de
perturber les utilisateurs??
résultat:
20/01/04 0:00
20/01/04 12:00
ce qui est l'heure du début de l'action (arrêt ou reprise), c'est
bien
visuel, et cela se calcule.
J@@
"Daniel.M" <...
"J@@" <> Alors, j'attends que tu identifies ici les manières
abrégées
d'inscription desentrées et les résultats finaux (i.e. des dates qui pourront
ensuite
êtretraités par une macro qui fait des compilation).
Cette liste comprend :
Types d'inscription DÉSIRÉES (pas celles qu'elles faisaient
auparavant, cellesqu'elles doivent faire selon TOI) et les transformations attendues
(comment lesnouvelles entrées sont interprétées pour donner des dates)
Les exemples que tu donnes sont DÉJÀ des dates. Si tu veux
simplifier
la saisie,tu t'attends à ce qu'on soit bref dans la saisie.
1 1 A ==> 1 jan 2004 0:00 AM ' par exemple
4 5 P ==> 4 mai 2004 12:00 PM ' par exemple
C'est juste des exemples, j'attends les tiens.
Daniel M.
'tain, qu'est ce qu'on est choyé quand on est à dache...tu devrais
pousser jusqu'à
Eiao, J@@, là tu es sûr que le trop rare ttigre serait archi battu
quant à la
construction de cette proc qui n'en finit pas de finir...
jps
Michel Gaboly wrote:Bonjour J@@,
J'étais absent depuis vendredi soir ; c'est pour cela que je n'ai
pas réagi depuis.
A nouveau à ta disposition pour finaliser la procédure si nécessaire
;-))
La procédure suivante considère le premier nombre comme le Jour,
le 2e comme le
Mois, le 3e comme l'Année.
L'omission d'un des 3 nombres retourne l'entrée courante (jour
courant, mois
courant, année courante).
Donc 3 nombres ==> le jour + le mois + l'année
Donc 2 nombres ==> le jour + le mois, puis année courante
Donc 1 nombre ==> le jour, puis mois et année courante
Si tu mets un A: c'est une entrée AM. Si tu mets un P, c'est une
entrée PM.
Exemples:
A ==> 4 jan 2004 0:00 AM
P ==> 4 jan 2004 12:00 PM
6 A ==> 6 jan 2004 0:00 AM
7P ==> 7 jan 2004 12:00 PM
7 2P ==> 7 fév 2004 12:00 PM
... etc
Le code suivante utilise Split() disponible depuis Excel 2000. Si
tu as un Excel
plus vieux, remplace par Split97() que tu vas récupérer sur le
site de Frédéric
Sigonneau.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target
As Range)
Dim C As Range, s As String, V As Variant
Dim Valide As Boolean, AM As Boolean, i As Integer
Dim lAn As Integer, leMois As Integer, leJour As Integer
For Each C In Target
If C.Column > 10 And C.Column < 13 And C.Row >= 13 Then
If Len(Application.Substitute(C.Text, " ", "")) < 6 Then
' une entrée abbréviée, qu'on doit convertir
s = Application.Substitute(UCase(C.Text), "A", " A")
s = Application.Substitute(s, "B", " B")
V = Split(s, " ")
Valide = True
For i = LBound(V) To UBound(V)
If IsNumeric(V(i)) Then ' Un chiffre
If leJour = 0 Then
leJour = V(i)
ElseIf leMois = 0 Then
leMois = V(i)
ElseIf lAn = 0 Then
lAn = V(i)
Else
Valide = False
End If
Else ' indicateur AM ou PM
If V(i) = "A" Then
AM = True
ElseIf V(i) = "P" Then
AM = False
ElseIf V(i) <> "" Then 'autre chose==> erreur!
Valide = False
End If
End If
Next i
' mets les entrées par défaut (i.e. le jour courant)
' pour celles qui ne sont pas saisies
If leJour = 0 Then leJour = Day(Date)
If leMois = 0 Then leMois = Month(Date)
If lAn = 0 Then lAn = Year(Date)
'Si pas valide, on ne touche à rien
If Valide Then
Application.EnableEvents = False
C = DateSerial(lAn, leMois, leJour) + IIf(AM, 0,
0.5)
Application.EnableEvents = True
' on devrait mettre le bon format ici
'C.NumberFormat = "le format qu'on veut"
End If
End If
End If
Next C
End Sub
Daniel M.
"J@@" <> > > > **situation:jours 1 à 31 => saisir 2 chiffres
mois 1 à 12 => saisir 2 chiffres
pour les jours entiers, il n'est pas nécessaire de préciser A,
le pb se pose si le matin seulement est concerné, donc la saisie
de la
date de reprise contient P.
saisie:
20 01 (option 04) (option p ou P)
possibilité d'ajouter l'année quand risque d'ambiguïté 04 05 ...
ou P ou p pour être insensible à la casse)
omettre le slash / gagne du temps mais cela ne risque t il pas
de
perturber les utilisateurs??
résultat:
20/01/04 0:00
20/01/04 12:00
ce qui est l'heure du début de l'action (arrêt ou reprise),
c'est bien
visuel, et cela se calcule.
J@@
"Daniel.M" <..."J@@" <> Alors, j'attends que tu identifies ici les manières
abrégées
d'inscription desentrées et les résultats finaux (i.e. des dates qui pourront
ensuite
êtretraités par une macro qui fait des compilation).
Cette liste comprend :
Types d'inscription DÉSIRÉES (pas celles qu'elles faisaient
auparavant, cellesqu'elles doivent faire selon TOI) et les transformations
attendues
(comment lesnouvelles entrées sont interprétées pour donner des dates)
Les exemples que tu donnes sont DÉJÀ des dates. Si tu veux
simplifier
la saisie,tu t'attends à ce qu'on soit bref dans la saisie.
1 1 A ==> 1 jan 2004 0:00 AM ' par exemple
4 5 P ==> 4 mai 2004 12:00 PM ' par exemple
C'est juste des exemples, j'attends les tiens.
Daniel M.
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
'tain, qu'est ce qu'on est choyé quand on est à dache...tu devrais
pousser jusqu'à
Eiao, J@@, là tu es sûr que le trop rare ttigre serait archi battu
quant à la
construction de cette proc qui n'en finit pas de finir...
jps
Michel Gaboly wrote:
Bonjour J@@,
J'étais absent depuis vendredi soir ; c'est pour cela que je n'ai
pas réagi depuis.
A nouveau à ta disposition pour finaliser la procédure si nécessaire
;-))
La procédure suivante considère le premier nombre comme le Jour,
le 2e comme le
Mois, le 3e comme l'Année.
L'omission d'un des 3 nombres retourne l'entrée courante (jour
courant, mois
courant, année courante).
Donc 3 nombres ==> le jour + le mois + l'année
Donc 2 nombres ==> le jour + le mois, puis année courante
Donc 1 nombre ==> le jour, puis mois et année courante
Si tu mets un A: c'est une entrée AM. Si tu mets un P, c'est une
entrée PM.
Exemples:
A ==> 4 jan 2004 0:00 AM
P ==> 4 jan 2004 12:00 PM
6 A ==> 6 jan 2004 0:00 AM
7P ==> 7 jan 2004 12:00 PM
7 2P ==> 7 fév 2004 12:00 PM
... etc
Le code suivante utilise Split() disponible depuis Excel 2000. Si
tu as un Excel
plus vieux, remplace par Split97() que tu vas récupérer sur le
site de Frédéric
Sigonneau.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target
As Range)
Dim C As Range, s As String, V As Variant
Dim Valide As Boolean, AM As Boolean, i As Integer
Dim lAn As Integer, leMois As Integer, leJour As Integer
For Each C In Target
If C.Column > 10 And C.Column < 13 And C.Row >= 13 Then
If Len(Application.Substitute(C.Text, " ", "")) < 6 Then
' une entrée abbréviée, qu'on doit convertir
s = Application.Substitute(UCase(C.Text), "A", " A")
s = Application.Substitute(s, "B", " B")
V = Split(s, " ")
Valide = True
For i = LBound(V) To UBound(V)
If IsNumeric(V(i)) Then ' Un chiffre
If leJour = 0 Then
leJour = V(i)
ElseIf leMois = 0 Then
leMois = V(i)
ElseIf lAn = 0 Then
lAn = V(i)
Else
Valide = False
End If
Else ' indicateur AM ou PM
If V(i) = "A" Then
AM = True
ElseIf V(i) = "P" Then
AM = False
ElseIf V(i) <> "" Then 'autre chose==> erreur!
Valide = False
End If
End If
Next i
' mets les entrées par défaut (i.e. le jour courant)
' pour celles qui ne sont pas saisies
If leJour = 0 Then leJour = Day(Date)
If leMois = 0 Then leMois = Month(Date)
If lAn = 0 Then lAn = Year(Date)
'Si pas valide, on ne touche à rien
If Valide Then
Application.EnableEvents = False
C = DateSerial(lAn, leMois, leJour) + IIf(AM, 0,
0.5)
Application.EnableEvents = True
' on devrait mettre le bon format ici
'C.NumberFormat = "le format qu'on veut"
End If
End If
End If
Next C
End Sub
Daniel M.
"J@@" <> > > > **situation:
jours 1 à 31 => saisir 2 chiffres
mois 1 à 12 => saisir 2 chiffres
pour les jours entiers, il n'est pas nécessaire de préciser A,
le pb se pose si le matin seulement est concerné, donc la saisie
de la
date de reprise contient P.
saisie:
20 01 (option 04) (option p ou P)
possibilité d'ajouter l'année quand risque d'ambiguïté 04 05 ...
ou P ou p pour être insensible à la casse)
omettre le slash / gagne du temps mais cela ne risque t il pas
de
perturber les utilisateurs??
résultat:
20/01/04 0:00
20/01/04 12:00
ce qui est l'heure du début de l'action (arrêt ou reprise),
c'est bien
visuel, et cela se calcule.
J@@
"Daniel.M" <...
"J@@" <> Alors, j'attends que tu identifies ici les manières
abrégées
d'inscription des
entrées et les résultats finaux (i.e. des dates qui pourront
ensuite
être
traités par une macro qui fait des compilation).
Cette liste comprend :
Types d'inscription DÉSIRÉES (pas celles qu'elles faisaient
auparavant, celles
qu'elles doivent faire selon TOI) et les transformations
attendues
(comment les
nouvelles entrées sont interprétées pour donner des dates)
Les exemples que tu donnes sont DÉJÀ des dates. Si tu veux
simplifier
la saisie,
tu t'attends à ce qu'on soit bref dans la saisie.
1 1 A ==> 1 jan 2004 0:00 AM ' par exemple
4 5 P ==> 4 mai 2004 12:00 PM ' par exemple
C'est juste des exemples, j'attends les tiens.
Daniel M.
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
'tain, qu'est ce qu'on est choyé quand on est à dache...tu devrais
pousser jusqu'à
Eiao, J@@, là tu es sûr que le trop rare ttigre serait archi battu
quant à la
construction de cette proc qui n'en finit pas de finir...
jps
Michel Gaboly wrote:Bonjour J@@,
J'étais absent depuis vendredi soir ; c'est pour cela que je n'ai
pas réagi depuis.
A nouveau à ta disposition pour finaliser la procédure si nécessaire
;-))
La procédure suivante considère le premier nombre comme le Jour,
le 2e comme le
Mois, le 3e comme l'Année.
L'omission d'un des 3 nombres retourne l'entrée courante (jour
courant, mois
courant, année courante).
Donc 3 nombres ==> le jour + le mois + l'année
Donc 2 nombres ==> le jour + le mois, puis année courante
Donc 1 nombre ==> le jour, puis mois et année courante
Si tu mets un A: c'est une entrée AM. Si tu mets un P, c'est une
entrée PM.
Exemples:
A ==> 4 jan 2004 0:00 AM
P ==> 4 jan 2004 12:00 PM
6 A ==> 6 jan 2004 0:00 AM
7P ==> 7 jan 2004 12:00 PM
7 2P ==> 7 fév 2004 12:00 PM
... etc
Le code suivante utilise Split() disponible depuis Excel 2000. Si
tu as un Excel
plus vieux, remplace par Split97() que tu vas récupérer sur le
site de Frédéric
Sigonneau.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target
As Range)
Dim C As Range, s As String, V As Variant
Dim Valide As Boolean, AM As Boolean, i As Integer
Dim lAn As Integer, leMois As Integer, leJour As Integer
For Each C In Target
If C.Column > 10 And C.Column < 13 And C.Row >= 13 Then
If Len(Application.Substitute(C.Text, " ", "")) < 6 Then
' une entrée abbréviée, qu'on doit convertir
s = Application.Substitute(UCase(C.Text), "A", " A")
s = Application.Substitute(s, "B", " B")
V = Split(s, " ")
Valide = True
For i = LBound(V) To UBound(V)
If IsNumeric(V(i)) Then ' Un chiffre
If leJour = 0 Then
leJour = V(i)
ElseIf leMois = 0 Then
leMois = V(i)
ElseIf lAn = 0 Then
lAn = V(i)
Else
Valide = False
End If
Else ' indicateur AM ou PM
If V(i) = "A" Then
AM = True
ElseIf V(i) = "P" Then
AM = False
ElseIf V(i) <> "" Then 'autre chose==> erreur!
Valide = False
End If
End If
Next i
' mets les entrées par défaut (i.e. le jour courant)
' pour celles qui ne sont pas saisies
If leJour = 0 Then leJour = Day(Date)
If leMois = 0 Then leMois = Month(Date)
If lAn = 0 Then lAn = Year(Date)
'Si pas valide, on ne touche à rien
If Valide Then
Application.EnableEvents = False
C = DateSerial(lAn, leMois, leJour) + IIf(AM, 0,
0.5)
Application.EnableEvents = True
' on devrait mettre le bon format ici
'C.NumberFormat = "le format qu'on veut"
End If
End If
End If
Next C
End Sub
Daniel M.
"J@@" <> > > > **situation:jours 1 à 31 => saisir 2 chiffres
mois 1 à 12 => saisir 2 chiffres
pour les jours entiers, il n'est pas nécessaire de préciser A,
le pb se pose si le matin seulement est concerné, donc la saisie
de la
date de reprise contient P.
saisie:
20 01 (option 04) (option p ou P)
possibilité d'ajouter l'année quand risque d'ambiguïté 04 05 ...
ou P ou p pour être insensible à la casse)
omettre le slash / gagne du temps mais cela ne risque t il pas
de
perturber les utilisateurs??
résultat:
20/01/04 0:00
20/01/04 12:00
ce qui est l'heure du début de l'action (arrêt ou reprise),
c'est bien
visuel, et cela se calcule.
J@@
"Daniel.M" <..."J@@" <> Alors, j'attends que tu identifies ici les manières
abrégées
d'inscription desentrées et les résultats finaux (i.e. des dates qui pourront
ensuite
êtretraités par une macro qui fait des compilation).
Cette liste comprend :
Types d'inscription DÉSIRÉES (pas celles qu'elles faisaient
auparavant, cellesqu'elles doivent faire selon TOI) et les transformations
attendues
(comment lesnouvelles entrées sont interprétées pour donner des dates)
Les exemples que tu donnes sont DÉJÀ des dates. Si tu veux
simplifier
la saisie,tu t'attends à ce qu'on soit bref dans la saisie.
1 1 A ==> 1 jan 2004 0:00 AM ' par exemple
4 5 P ==> 4 mai 2004 12:00 PM ' par exemple
C'est juste des exemples, j'attends les tiens.
Daniel M.
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
j'ai remplacé B par P ici:
s = Application.Substitute(s, "P", " P")
et mis un format détaillé pour mieux suivre:
C.NumberFormat = "dd/mm/yyyy h:mm"
OK.
* evolution des tests:
...
C'est LE problème FONDAMENTAL et tes tests le prouvent.
*= l'espace entre les chiffres est impératif sous peine d'erreur.
Ne devrait on pas l'imposer, ou imposer le / ??
Oui, il faut imposer l'espace.
*= impossible de vider une cellule ou de copier le format (pour
Corrigé en testant sur len()> 0
rallonger la feuille par exemple): la cellue contient automatiquement
04/01/2004 12:00 (et tjrs 12 !§?)
Décidément ce n'est pas simple
En effet, le problème fondamental demeure.
j'ai remplacé B par P ici:
s = Application.Substitute(s, "P", " P")
et mis un format détaillé pour mieux suivre:
C.NumberFormat = "dd/mm/yyyy h:mm"
OK.
* evolution des tests:
...
C'est LE problème FONDAMENTAL et tes tests le prouvent.
*= l'espace entre les chiffres est impératif sous peine d'erreur.
Ne devrait on pas l'imposer, ou imposer le / ??
Oui, il faut imposer l'espace.
*= impossible de vider une cellule ou de copier le format (pour
Corrigé en testant sur len()> 0
rallonger la feuille par exemple): la cellue contient automatiquement
04/01/2004 12:00 (et tjrs 12 !§?)
Décidément ce n'est pas simple
En effet, le problème fondamental demeure.
j'ai remplacé B par P ici:
s = Application.Substitute(s, "P", " P")
et mis un format détaillé pour mieux suivre:
C.NumberFormat = "dd/mm/yyyy h:mm"
OK.
* evolution des tests:
...
C'est LE problème FONDAMENTAL et tes tests le prouvent.
*= l'espace entre les chiffres est impératif sous peine d'erreur.
Ne devrait on pas l'imposer, ou imposer le / ??
Oui, il faut imposer l'espace.
*= impossible de vider une cellule ou de copier le format (pour
Corrigé en testant sur len()> 0
rallonger la feuille par exemple): la cellue contient automatiquement
04/01/2004 12:00 (et tjrs 12 !§?)
Décidément ce n'est pas simple
En effet, le problème fondamental demeure.