Bonjour à tous et bienvenue dans cette nouvelle année
J'ai un problème de calcul de congés:
en A: date du jour de début de l'arrêt, actuellement 01/01/04
en B: date du jour de fin de l'arrêt
ensuite j'ai un calcul C=B-A
Mais l'arrêt peut être seulement de la matinée, ou de l'après-midi, ou 3
jours 1/2...
Avec le format jj/mm/aa h: AM/PM , la saisie est très lourde (détail de
l'heure), et l'affichage encombrant.
Or la 1/2 journée n'est pas divisible, donc pas besoin de l'heure.
Pourrait-on saisir seulement 01/01 A (et encore seulement lorsque des
1/2 journées sont concernées) et obtenir 01/01/04 AM tout en permettant
le calcul sur cette donnée????
Je veux éviter que les gentilles secrétaires abîment leurs beaux ongles
vernis en tapant des tonnes de trucs impossibles à exploiter ensuite.
Merci Clément. Un jour, j'aurai accès à une version française du logiciel ...
Salutations,
Daniel M.
"Clément Marcotte" wrote in message news:
Bonjour,
'breakpoint' (c'est quoi la traduction en français? :-( ).
Point d'arrêt
J
Bonjour Daniel et Clément, une fois de plus à la rescousse :-))) Le code de Michel était parfait, mais stupide que je suis, je l'avais test dans Thisworkbook, dans un module normal, bref n'importe où sauf dans le code de la feuille.
J'espère juste que vu le nombre de feuilles (environ 100) je n'aurai pas de problèmes de mémoire.
encore merci , pour le point d'arrêt aussi :-) @+ J@@
"Daniel.M" <
Pour tout dire, j'ai testé ta proc mais je ne vois rien sauf quand je
fais des calculs sur les dates comportant A ou B : #VALEUR! Et je ne sais, pas comment faire de pas à pas sur ce type de proc (que
j'ai bien sûr mise dans ThisWorkbook) Peut - tu m'orienter??
Très important: Mets-là dans le code de ta _FEUILLE_ (pas le code du classeur).
Pour faire du pas à pas, insère un 'breakpoint' (c'est quoi la traduction en
français? :-( ). On peut l'insérer par la touche F9 (trouve une ligne au début
de ta proc.
Pour le reste, j'ai pas suivi.
Salutations,
Daniel M.
Bonjour Daniel et Clément,
une fois de plus à la rescousse :-)))
Le code de Michel était parfait, mais stupide que je suis, je l'avais
test dans Thisworkbook, dans un module normal, bref n'importe où sauf
dans le code de la feuille.
J'espère juste que vu le nombre de feuilles (environ 100) je n'aurai pas
de problèmes de mémoire.
encore merci , pour le point d'arrêt aussi :-)
@+
J@@
"Daniel.M" <
Pour tout dire, j'ai testé ta proc mais je ne vois rien sauf quand
je
fais des calculs sur les dates comportant A ou B : #VALEUR!
Et je ne sais, pas comment faire de pas à pas sur ce type de proc
(que
j'ai bien sûr mise dans ThisWorkbook)
Peut - tu m'orienter??
Très important: Mets-là dans le code de ta _FEUILLE_ (pas le code du
classeur).
Pour faire du pas à pas, insère un 'breakpoint' (c'est quoi la
traduction en
français? :-( ). On peut l'insérer par la touche F9 (trouve une ligne
au début
Bonjour Daniel et Clément, une fois de plus à la rescousse :-))) Le code de Michel était parfait, mais stupide que je suis, je l'avais test dans Thisworkbook, dans un module normal, bref n'importe où sauf dans le code de la feuille.
J'espère juste que vu le nombre de feuilles (environ 100) je n'aurai pas de problèmes de mémoire.
encore merci , pour le point d'arrêt aussi :-) @+ J@@
"Daniel.M" <
Pour tout dire, j'ai testé ta proc mais je ne vois rien sauf quand je
fais des calculs sur les dates comportant A ou B : #VALEUR! Et je ne sais, pas comment faire de pas à pas sur ce type de proc (que
j'ai bien sûr mise dans ThisWorkbook) Peut - tu m'orienter??
Très important: Mets-là dans le code de ta _FEUILLE_ (pas le code du classeur).
Pour faire du pas à pas, insère un 'breakpoint' (c'est quoi la traduction en
français? :-( ). On peut l'insérer par la touche F9 (trouve une ligne au début
de ta proc.
Pour le reste, j'ai pas suivi.
Salutations,
Daniel M.
Daniel.M
Bonsoir J@@,
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/m/yy h:mm" Select Case Right(c, 1) Case "A" c = CDate(Left(c, Len(c) - 2)) Case "B" 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.
Bonsoir J@@,
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/m/yy h:mm"
Select Case Right(c, 1)
Case "A"
c = CDate(Left(c, Len(c) - 2))
Case "B"
c = CDate(Left(c, Len(c) - 2)) + 0.5
End Select
Application.EnableEvents = True
End If
End If
Next c
End Sub
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/m/yy h:mm" Select Case Right(c, 1) Case "A" c = CDate(Left(c, Len(c) - 2)) Case "B" 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.
J
Bonjour à tous maintenant (merci Daniel de m'avoir ouvert les yeux) que la proc suivante est dans la feuille, elle fonctionne c'est à dire: saisie de 1/01 A donne 1/01/04 0:00 2/01/04 B donne 2/01/04 12:00
**Mais comment réduire l'action de cette macro à la *range K13:Lnn* (il s'agit d'une feuille de congés individuelle, il ne devrait pas y avoir 65536 saisies) car j'ai plantage dès qu'une donnée est entrée ailleurs dans la feuille. J'ai essayé ceci en y ajoutant/retirant des "", mais c'est nul 'Dim c("k13", "L65536") As Range 'dim c as Range("k13","L65536")
Merci pour le coup de main @+ J@@
"Michel Gaboly" <> Tu peux utiliser l'événement Change de la feuille concernée :
Private Sub Worksheet_Change(ByVal Target As Excel.Range) Dim c As Range For Each c In Target If Not IsError(CDate(Left(c, Len(c) - 2))) Then Application.EnableEvents = False c.NumberFormat = "d/m/yy h:mm" Select Case Right(c, 1) Case "A" c = CDate(Left(c, Len(c) - 2)) Case "B" c = CDate(Left(c, Len(c) - 2)) + 0.5 End Select Application.EnableEvents = True End If Next c End Sub
Dans cet exemple j'ai utilisé A pour le matin et B pour l'après-midi (Case "A" et Case "B").
Le principe est le suivant : quand une ou plusieurs cellules sont modi-
fiées, on les examine une par une (Boucle For Each c In Target).
Pour chaque cellule, on teste si la conversion en date après avoir éliminé les 2 derniers caractères (Espace + "A" ou "B" en l'occurrence)
n'aboutit pas une erreur.
On remplace alors espace + "A" par rien, ce qui correspond à la date à 0 heure et espace + "B" par 0,5, ce qui correspond à la date à midi.
Les calculs sur les 1/2 journées sonr alors possibles.
problème de calcul de congés:
en A: date du jour de début de l'arrêt, actuellement 1/01/04 en B: date du jour de fin de l'arrêt, ensuite calcul C=B-A
l'arrêt peut être seulement de la matinée, ou de l'après-midi, ou 3 jours 1/2...
Pourrait-on saisir seulement 1/01 A (et encore seulement lorsque des 1/2 journées sont concernées) et obtenir 1/01/04 AM tout en permettant le calcul sur cette donnée????
Bonjour à tous
maintenant (merci Daniel de m'avoir ouvert les yeux) que la proc
suivante est dans la feuille, elle fonctionne
c'est à dire: saisie de
1/01 A donne 1/01/04 0:00
2/01/04 B donne 2/01/04 12:00
**Mais comment réduire l'action de cette macro à la *range K13:Lnn* (il
s'agit d'une feuille de congés individuelle, il ne devrait pas y avoir
65536 saisies)
car j'ai plantage dès qu'une donnée est entrée ailleurs dans la feuille.
J'ai essayé ceci en y ajoutant/retirant des "", mais c'est nul
'Dim c("k13", "L65536") As Range
'dim c as Range("k13","L65536")
Merci pour le coup de main
@+
J@@
"Michel Gaboly" <> Tu peux utiliser l'événement Change de la feuille
concernée :
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim c As Range
For Each c In Target
If Not IsError(CDate(Left(c, Len(c) - 2))) Then
Application.EnableEvents = False
c.NumberFormat = "d/m/yy h:mm"
Select Case Right(c, 1)
Case "A"
c = CDate(Left(c, Len(c) - 2))
Case "B"
c = CDate(Left(c, Len(c) - 2)) + 0.5
End Select
Application.EnableEvents = True
End If
Next c
End Sub
Dans cet exemple j'ai utilisé A pour le matin et B pour l'après-midi
(Case "A" et Case "B").
Le principe est le suivant : quand une ou plusieurs cellules sont
modi-
fiées, on les examine une par une (Boucle For Each c In Target).
Pour chaque cellule, on teste si la conversion en date après avoir
éliminé les 2 derniers caractères (Espace + "A" ou "B" en
l'occurrence)
n'aboutit pas une erreur.
On remplace alors espace + "A" par rien, ce qui correspond à la date à
0 heure et espace + "B" par 0,5, ce qui correspond à la date à midi.
Les calculs sur les 1/2 journées sonr alors possibles.
problème de calcul de congés:
en A: date du jour de début de l'arrêt, actuellement 1/01/04
en B: date du jour de fin de l'arrêt, ensuite calcul C=B-A
l'arrêt peut être seulement de la matinée, ou de l'après-midi,
ou 3 jours 1/2...
Pourrait-on saisir seulement 1/01 A (et encore seulement lorsque des
1/2 journées sont concernées) et obtenir 1/01/04 AM tout en
permettant le calcul sur cette donnée????
Bonjour à tous maintenant (merci Daniel de m'avoir ouvert les yeux) que la proc suivante est dans la feuille, elle fonctionne c'est à dire: saisie de 1/01 A donne 1/01/04 0:00 2/01/04 B donne 2/01/04 12:00
**Mais comment réduire l'action de cette macro à la *range K13:Lnn* (il s'agit d'une feuille de congés individuelle, il ne devrait pas y avoir 65536 saisies) car j'ai plantage dès qu'une donnée est entrée ailleurs dans la feuille. J'ai essayé ceci en y ajoutant/retirant des "", mais c'est nul 'Dim c("k13", "L65536") As Range 'dim c as Range("k13","L65536")
Merci pour le coup de main @+ J@@
"Michel Gaboly" <> Tu peux utiliser l'événement Change de la feuille concernée :
Private Sub Worksheet_Change(ByVal Target As Excel.Range) Dim c As Range For Each c In Target If Not IsError(CDate(Left(c, Len(c) - 2))) Then Application.EnableEvents = False c.NumberFormat = "d/m/yy h:mm" Select Case Right(c, 1) Case "A" c = CDate(Left(c, Len(c) - 2)) Case "B" c = CDate(Left(c, Len(c) - 2)) + 0.5 End Select Application.EnableEvents = True End If Next c End Sub
Dans cet exemple j'ai utilisé A pour le matin et B pour l'après-midi (Case "A" et Case "B").
Le principe est le suivant : quand une ou plusieurs cellules sont modi-
fiées, on les examine une par une (Boucle For Each c In Target).
Pour chaque cellule, on teste si la conversion en date après avoir éliminé les 2 derniers caractères (Espace + "A" ou "B" en l'occurrence)
n'aboutit pas une erreur.
On remplace alors espace + "A" par rien, ce qui correspond à la date à 0 heure et espace + "B" par 0,5, ce qui correspond à la date à midi.
Les calculs sur les 1/2 journées sonr alors possibles.
problème de calcul de congés:
en A: date du jour de début de l'arrêt, actuellement 1/01/04 en B: date du jour de fin de l'arrêt, ensuite calcul C=B-A
l'arrêt peut être seulement de la matinée, ou de l'après-midi, ou 3 jours 1/2...
Pourrait-on saisir seulement 1/01 A (et encore seulement lorsque des 1/2 journées sont concernées) et obtenir 1/01/04 AM tout en permettant le calcul sur cette donnée????
Daniel.M
Bonsoir J@@,
**Mais comment réduire l'action de cette macro à la *range K13:Lnn* (il s'agit d'une feuille de congés individuelle, il ne devrait pas y avoir 65536 saisies)
Dans la toute dernière réponse que je t'ai fournie, remplace If c.Column < 3 Then par If Not InterSect(c,sh.Range("K13:L"&nn)) is nothing Then
Ceci dit, je suppose que tu connais Lnn (moi ça ne me dit rien ;-)).
Salutations,
Daniel M.
Bonsoir J@@,
**Mais comment réduire l'action de cette macro à la *range K13:Lnn* (il
s'agit d'une feuille de congés individuelle, il ne devrait pas y avoir
65536 saisies)
Dans la toute dernière réponse que je t'ai fournie, remplace
If c.Column < 3 Then
par
If Not InterSect(c,sh.Range("K13:L"&nn)) is nothing Then
Ceci dit, je suppose que tu connais Lnn (moi ça ne me dit rien ;-)).
**Mais comment réduire l'action de cette macro à la *range K13:Lnn* (il s'agit d'une feuille de congés individuelle, il ne devrait pas y avoir 65536 saisies)
Dans la toute dernière réponse que je t'ai fournie, remplace If c.Column < 3 Then par If Not InterSect(c,sh.Range("K13:L"&nn)) is nothing Then
Ceci dit, je suppose que tu connais Lnn (moi ça ne me dit rien ;-)).
Salutations,
Daniel M.
J
Bonjour Daniel en fait mes saisies de dates sont seulement de K13:L13 à Kn:Ln j'ai retouché une ligne If c.Column > 10 And c.Column < 13 Then
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.
Bonjour Daniel
en fait mes saisies de dates sont seulement de K13:L13 à Kn:Ln
j'ai retouché une ligne
If c.Column > 10 And c.Column < 13 Then
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
Bonjour Daniel en fait mes saisies de dates sont seulement de K13:L13 à Kn:Ln j'ai retouché une ligne If c.Column > 10 And c.Column < 13 Then
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.
J
Bonsoir Daniel (j'ai 16:36 à ma montre :-))
If Not Intersect(c, Sh.Range("K13:L" & nn)) Is Nothing Then **Erreur 1004 J'envoie tout de même le bonjour à Lnn :-)) J@@
"Daniel.M" <>
**Mais comment réduire l'action de cette macro à la *range K13:Lnn* (il
s'agit d'une feuille de congés individuelle, il ne devrait pas y avoir
65536 saisies)
Dans la toute dernière réponse que je t'ai fournie, remplace If c.Column < 3 Then par If Not InterSect(c,sh.Range("K13:L"&nn)) is nothing Then
Ceci dit, je suppose que tu connais Lnn (moi ça ne me dit rien ;-)).
Salutations,
Daniel M.
Bonsoir Daniel (j'ai 16:36 à ma montre :-))
If Not Intersect(c, Sh.Range("K13:L" & nn)) Is Nothing Then
**Erreur 1004
J'envoie tout de même le bonjour à Lnn
:-))
J@@
"Daniel.M" <>
**Mais comment réduire l'action de cette macro à la *range K13:Lnn*
(il
s'agit d'une feuille de congés individuelle, il ne devrait pas y
avoir
65536 saisies)
Dans la toute dernière réponse que je t'ai fournie, remplace
If c.Column < 3 Then
par
If Not InterSect(c,sh.Range("K13:L"&nn)) is nothing Then
Ceci dit, je suppose que tu connais Lnn (moi ça ne me dit rien ;-)).
If Not Intersect(c, Sh.Range("K13:L" & nn)) Is Nothing Then **Erreur 1004 J'envoie tout de même le bonjour à Lnn :-)) J@@
"Daniel.M" <>
**Mais comment réduire l'action de cette macro à la *range K13:Lnn* (il
s'agit d'une feuille de congés individuelle, il ne devrait pas y avoir
65536 saisies)
Dans la toute dernière réponse que je t'ai fournie, remplace If c.Column < 3 Then par If Not InterSect(c,sh.Range("K13:L"&nn)) is nothing Then
Ceci dit, je suppose que tu connais Lnn (moi ça ne me dit rien ;-)).
Salutations,
Daniel M.
Daniel.M
Salut J@@,
If c.Column > 10 And c.Column < 13 Then
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 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.
Salut J@@,
If c.Column > 10 And c.Column < 13 Then
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
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 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.
Daniel.M
"J@@" wrote in message news:
Bonsoir Daniel (j'ai 16:36 à ma montre :-)) Et moi 21:47 :-)
If Not Intersect(c, Sh.Range("K13:L" & nn)) Is Nothing Then **Erreur 1004
Il faudrait que nn soit défini quelque part! C'est pas grave: j'ai vu dans l'autre sous-ficelle que tu as résolu ce petit problème en comparant la valeur des colonnes : perfecto.
Salutations,
Daniel M.
"J@@" <jipivert@-ifrance.com> wrote in message
news:OvGAeum0DHA.2396@TK2MSFTNGP09.phx.gbl...
Bonsoir Daniel (j'ai 16:36 à ma montre :-))
Et moi 21:47 :-)
If Not Intersect(c, Sh.Range("K13:L" & nn)) Is Nothing Then
**Erreur 1004
Il faudrait que nn soit défini quelque part!
C'est pas grave: j'ai vu dans l'autre sous-ficelle que tu as résolu ce petit
problème en comparant la valeur des colonnes : perfecto.
Bonsoir Daniel (j'ai 16:36 à ma montre :-)) Et moi 21:47 :-)
If Not Intersect(c, Sh.Range("K13:L" & nn)) Is Nothing Then **Erreur 1004
Il faudrait que nn soit défini quelque part! C'est pas grave: j'ai vu dans l'autre sous-ficelle que tu as résolu ce petit problème en comparant la valeur des colonnes : perfecto.