Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

select case

14 réponses
Avatar
J
Bonjour à tous
En g13:d50 je saisis un nombre de 2 chiffres. Si ce chiffre est >70, la
macro y ajoute 1900, sinon elle ajoute 2000.

Voici mon code initial
****
If Not Intersect(Target, [D13:D50]) Is Nothing Then
Select Case Target.Value
Case Is = ""
Target.Value = ""
Case Is > 70
Target.Value = Target.Value + "1900"
Case Else
Target.Value = Target.Value + "2000"
End Select
End If
****
Et là il y a qqchose de bizarre :
Si je tape par erreur 1995, la validation de saisie me refuse cela,
*mais si* alors je resaisis 95, le résultat est "5795" au lieu de 1995.
Que se passe-t-il?

*J'ai modifié le code* comme suit, mais comment si la saisie est sup à
99 simplement demander de resaisir et non seulement me vider la saisie?
****
Select Case Target.Value
Case Is = ""
Target.Value = ""
Case Is < 70
Target.Value = Target.Value + "2000"
Case 70 To 99
Target.Value = Target.Value + "1900"
Case Is > 99
Target.Value = "" 'ligne à modifier
End Select
****

Merci pour l'aide.
Cordialement
J@@

10 réponses

1 2
Avatar
garnote
Bonjour,

Si tu ne modifies qu'une donnée à la fois dans D13:D50,
ceci devrait convenir :

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Target, [D13:D50]) Is Nothing _
And Target.Count = 1 Then
Select Case Target.Value
Case Is = ""
Target.Value = ""
Case Is > 70
Target.Value = Target.Value + 1900
Case Else
Target.Value = Target.Value + 2000
End Select
End If
Application.EnableEvents = True
End Sub

Serge




Bonjour à tous
En D13:D50 je saisis un nombre de 2 chiffres. Si ce chiffre est >70, la
macro y ajoute 1900, sinon elle ajoute 2000.

Voici mon code initial
****
If Not Intersect(Target, [D13:D50]) Is Nothing Then
Select Case Target.Value
Case Is = ""
Target.Value = ""
Case Is > 70
Target.Value = Target.Value + "1900"
Case Else
Target.Value = Target.Value + "2000"
End Select
End If
****
Et là il y a qqchose de bizarre :
Si je tape par erreur 1995, la validation de saisie me refuse cela, *mais
si* alors je resaisis 95, le résultat est "5795" au lieu de 1995. Que se
passe-t-il?


Avatar
Jacky
Bonjour,
Rajoute:
Target.Value = Right(Target, 2)
au code de Serge
'---------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Target, [D13:D50]) Is Nothing And Target.Count = 1 Then
Target.Value = Right(Target, 2)
Select Case Target.Value
Case Is = ""
Target.Value = ""
Case Is > 70
Target.Value = Target.Value + 1900
Case Else
Target.Value = Target.Value + 2000
End Select
End If
Application.EnableEvents = True
End Sub
'--------------------

--
Salutations
JJ


"J@@" a écrit dans le message de news:
OZNH$
Bonjour à tous
En g13:d50 je saisis un nombre de 2 chiffres. Si ce chiffre est >70, la
macro y ajoute 1900, sinon elle ajoute 2000.

Voici mon code initial
****
If Not Intersect(Target, [D13:D50]) Is Nothing Then
Select Case Target.Value
Case Is = ""
Target.Value = ""
Case Is > 70
Target.Value = Target.Value + "1900"
Case Else
Target.Value = Target.Value + "2000"
End Select
End If
****
Et là il y a qqchose de bizarre :
Si je tape par erreur 1995, la validation de saisie me refuse cela, *mais
si* alors je resaisis 95, le résultat est "5795" au lieu de 1995. Que se
passe-t-il?

*J'ai modifié le code* comme suit, mais comment si la saisie est sup à 99
simplement demander de resaisir et non seulement me vider la saisie?
****
Select Case Target.Value
Case Is = ""
Target.Value = ""
Case Is < 70
Target.Value = Target.Value + "2000"
Case 70 To 99
Target.Value = Target.Value + "1900"
Case Is > 99
Target.Value = "" 'ligne à modifier
End Select
****

Merci pour l'aide.
Cordialement
J@@


Avatar
J
Bonjour Serge
et merci
Mais là je reviens à mon code initial qui me transforme 95 en 5795 après
une saisie erronée de 1995.
L'ajout de Target.Value = Right(Target, 2)
de Jacky résoud le problème.
Merci encore.
Bonne journée
@+
J@@

garnote a écrit :
Bonjour,

Si tu ne modifies qu'une donnée à la fois dans D13:D50,
ceci devrait convenir :

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Target, [D13:D50]) Is Nothing _
And Target.Count = 1 Then
Select Case Target.Value
Case Is = ""
Target.Value = ""
Case Is > 70
Target.Value = Target.Value + 1900
Case Else
Target.Value = Target.Value + 2000
End Select
End If
Application.EnableEvents = True
End Sub

Serge




Bonjour à tous
En D13:D50 je saisis un nombre de 2 chiffres. Si ce chiffre est >70, la
macro y ajoute 1900, sinon elle ajoute 2000.

Voici mon code initial
****
If Not Intersect(Target, [D13:D50]) Is Nothing Then
Select Case Target.Value
Case Is = ""
Target.Value = ""
Case Is > 70
Target.Value = Target.Value + "1900"
Case Else
Target.Value = Target.Value + "2000"
End Select
End If
****
Et là il y a qqchose de bizarre :
Si je tape par erreur 1995, la validation de saisie me refuse cela, *mais
si* alors je resaisis 95, le résultat est "5795" au lieu de 1995. Que se
passe-t-il?






Avatar
J
Bonjour Jacky
super cet ajout. Cela fonctionne comme souhaité.
Mais que veut dire au juste Right(Target,2) ?
=>"ne prendre en compte que les 2 chiffres de droite"?

C'est vraiment magique ces histoires de Target ...

Encore merci
et bonne journée
cordialement
J@@

Jacky a écrit :
Bonjour,
Rajoute:
Target.Value = Right(Target, 2)
au code de Serge
'---------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Target, [D13:D50]) Is Nothing And Target.Count = 1 Then
Target.Value = Right(Target, 2)
Select Case Target.Value
Case Is = ""
Target.Value = ""
Case Is > 70
Target.Value = Target.Value + 1900
Case Else
Target.Value = Target.Value + 2000
End Select
End If
Application.EnableEvents = True
End Sub
'--------------------


Avatar
garnote
> Mais que veut dire au juste Right(Target,2) ?
=>"ne prendre en compte que les 2 chiffres de droite"?


Ne prendre que les deux caractères de droite.

Exemple :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then Target.Offset(0, 1) = Right(Target, 2)
End Sub

Serge




"J@@" a écrit dans le message de news:
%
Bonjour Jacky
super cet ajout. Cela fonctionne comme souhaité.
Mais que veut dire au juste Right(Target,2) ?
=>"ne prendre en compte que les 2 chiffres de droite"?

C'est vraiment magique ces histoires de Target ...

Encore merci
et bonne journée
cordialement
J@@

Jacky a écrit :
Bonjour,
Rajoute:
Target.Value = Right(Target, 2)
au code de Serge
'---------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Target, [D13:D50]) Is Nothing And Target.Count = 1
Then
Target.Value = Right(Target, 2)
Select Case Target.Value
Case Is = ""
Target.Value = ""
Case Is > 70
Target.Value = Target.Value + 1900
Case Else
Target.Value = Target.Value + 2000
End Select
End If
Application.EnableEvents = True
End Sub
'--------------------




Avatar
J
Excellent
merci Serge
Il y a une richesse dans ces commandes...
la limite semble être l'imagination.
@+
Bonne journée
J@@

garnote a écrit :
Mais que veut dire au juste Right(Target,2) ?
=>"ne prendre en compte que les 2 chiffres de droite"?


Ne prendre que les deux caractères de droite.

Exemple :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then Target.Offset(0, 1) = Right(Target, 2)
End Sub

Serge


>
"J@@"
Bonjour Jacky
super cet ajout. Cela fonctionne comme souhaité.
Mais que veut dire au juste Right(Target,2) ?
=>"ne prendre en compte que les 2 chiffres de droite"?

C'est vraiment magique ces histoires de Target ...

Jacky a écrit :
Bonjour,
Rajoute:
Target.Value = Right(Target, 2)
au code de Serge
'---------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Target, [D13:D50]) Is Nothing And Target.Count = 1
Then
Target.Value = Right(Target, 2)
Select Case Target.Value
Case Is = ""
Target.Value = ""
Case Is > 70
Target.Value = Target.Value + 1900
Case Else
Target.Value = Target.Value + 2000
End Select
End If
Application.EnableEvents = True
End Sub
'--------------------






Avatar
garnote
Pour le plaisir.
On peut même se permettre de franciser Target :-)

Private Sub Worksheet_Change(ByVal Cible As Range)
If Cible.Address = "$A$1" Then Cible.Offset(0, 1) = Right(Cible, 2)
End Sub

Serge




"J@@" a écrit dans le message de news:

Excellent
merci Serge
Il y a une richesse dans ces commandes...
la limite semble être l'imagination.
@+
Bonne journée
J@@

garnote a écrit :
Mais que veut dire au juste Right(Target,2) ?
=>"ne prendre en compte que les 2 chiffres de droite"?


Ne prendre que les deux caractères de droite.

Exemple :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then Target.Offset(0, 1) = Right(Target,
2)
End Sub

Serge


>
"J@@"
Bonjour Jacky
super cet ajout. Cela fonctionne comme souhaité.
Mais que veut dire au juste Right(Target,2) ?
=>"ne prendre en compte que les 2 chiffres de droite"?

C'est vraiment magique ces histoires de Target ...

Jacky a écrit :
Bonjour,
Rajoute:
Target.Value = Right(Target, 2)
au code de Serge
'---------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Target, [D13:D50]) Is Nothing And Target.Count = 1
Then
Target.Value = Right(Target, 2)
Select Case Target.Value
Case Is = ""
Target.Value = ""
Case Is > 70
Target.Value = Target.Value + 1900
Case Else
Target.Value = Target.Value + 2000
End Select
End If
Application.EnableEvents = True
End Sub
'--------------------








Avatar
Jacky
Re..
C'est vraiment magique ces histoires de Target ...


Le problème dans ce cas n'était pas vraiment "target" mais
Case Is > 70
Target.Value = Target.Value + 1900
Si comme tu le précises, tu entres une saisie erronée de "1995"
1995 est plus grand que 70 donc ajout de 1900
1900+1995895
Alors que Target.Value = Right(Target, 2) • (même si tu ne saisis que 2
chiffres)
1900+9595

Ps: Méfies toi des dates dont l'année est calculée sur 2 chiffres, sinon tu
ré-inventes le bug de l'an 2000.
;o))
--
Salutations
JJ


"J@@" a écrit dans le message de news:
%
Bonjour Jacky
super cet ajout. Cela fonctionne comme souhaité.
Mais que veut dire au juste Right(Target,2) ?
=>"ne prendre en compte que les 2 chiffres de droite"?

C'est vraiment magique ces histoires de Target ...

Encore merci
et bonne journée
cordialement
J@@

Jacky a écrit :
Bonjour,
Rajoute:
Target.Value = Right(Target, 2)
au code de Serge
'---------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Target, [D13:D50]) Is Nothing And Target.Count = 1
Then
Target.Value = Right(Target, 2)
Select Case Target.Value
Case Is = ""
Target.Value = ""
Case Is > 70
Target.Value = Target.Value + 1900
Case Else
Target.Value = Target.Value + 2000
End Select
End If
Application.EnableEvents = True
End Sub
'--------------------




Avatar
J
Bonjour Jacky
> Ps: Méfies toi des dates dont l'année est calculée sur 2 chiffres,
sinon tu
> ré-inventes le bug de l'an 2000.

:-))
pour une fois que j'aurai inventé quelque chose ;-)

En fait il s'agit d'un format imposé :

Saisie périodes :
Début - Fin // Calcul auto durée
J M A J M A // A M J
09 03 2007 31 03 2007 // 0 0 23

Les utilisateurs saisissant souvent les années bizarrement, j'ai mis
cette pro événementielle pour que la saisie se fasse en 2 chiffres.
Mais il faudra que je modifie cela en 2070. Si Excel et moi sommes
encore à la page...

Mais mon problème me donnait 5795 :
saisie erronée 1995
contrôle de validation bloque, demande ressaisie,
OK, nouvelle saisie 95 => résultat 5795.

je pense que l'aller-retour par le contrôle de validation doit me
chambouler le bastringue, mais comment?

Un petit point :

Pourquoi 1900 plutôt que "1900" ?

@+
J@@


Jacky a écrit :
Re..
C'est vraiment magique ces histoires de Target ...


Le problème dans ce cas n'était pas vraiment "target" mais
Case Is > 70
Target.Value = Target.Value + 1900
Si comme tu le précises, tu entres une saisie erronée de "1995"
1995 est plus grand que 70 donc ajout de 1900
1900+1995895
Alors que Target.Value = Right(Target, 2) • (même si tu ne saisis que 2
chiffres)
1900+9595

Ps: Méfies toi des dates dont l'année est calculée sur 2 chiffres, sinon tu
ré-inventes le bug de l'an 2000.
;o))


Avatar
J
:-)
Là on devient puriste
J@@

garnote a écrit :
Pour le plaisir.
On peut même se permettre de franciser Target :-)

Private Sub Worksheet_Change(ByVal Cible As Range)
If Cible.Address = "$A$1" Then Cible.Offset(0, 1) = Right(Cible, 2)
End Sub

Serge

"J@@" .
Excellent
merci Serge

garnote a écrit :
Mais que veut dire au juste Right(Target,2) ?
=>"ne prendre en compte que les 2 chiffres de droite"?


Ne prendre que les deux caractères de droite.

Exemple :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then Target.Offset(0, 1) = Right(Target,
2)
End Sub

Serge


>
"J@@"
Bonjour Jacky
super cet ajout. Cela fonctionne comme souhaité.
Mais que veut dire au juste Right(Target,2) ?
=>"ne prendre en compte que les 2 chiffres de droite"?

Jacky a écrit :
Rajoute:
Target.Value = Right(Target, 2)
au code de Serge
'---------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Target, [D13:D50]) Is Nothing And Target.Count = 1
Then
Target.Value = Right(Target, 2)
Select Case Target.Value
Case Is = ""
Target.Value = ""
Case Is > 70
Target.Value = Target.Value + 1900
Case Else
Target.Value = Target.Value + 2000
End Select
End If
Application.EnableEvents = True
End Sub
'--------------------










1 2