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

sub évenementielle qui plante si saisie hors target autorisé

6 réponses
Avatar
J
Bonjour à tous
J'ai une saisie de 1 ou 2 chiffres qui doit se transformer en 4 chiffres:
*si saisie > 70 la valeur se transforme en s'ajoutant 1900,
*sinon la valeur se transforme en s'ajoutant 2000.

Cela semble bien fonctionner, MAIS :
si il y a une saisie multiple, ou une saisie hors de la colonne E:E,
alors c'est fini la belle macro ne fonctionne plus.

Qui pourrait me dire ce qui est faux (et donc ce qui serait juste)?
Merci
@+
J@@ (en panne de target)

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Application.EnableEvents = False

If Target.Count > 1 Or Target.Column <> 5 Then Exit Sub
If Target.Value > "70" Then
Target.Value = Target.Value + "1900"
Else: Target.Value = Target.Value + "2000"
End If

Application.EnableEvents = True
End Sub

6 réponses

Avatar
FFO
Salut à toi

La ligne :

If Target.Count > 1 Or Target.Column <> 5 Then Exit Sub

détermine les conditions d'application de l'évennement

Target.Count > 1 exclue les saisies multiples
Target.Column <> 5 exclue les saisies en dehors de la colonne 5 (colonne E)

Tu peux étendre les colonnes en modifiant sa condition mais à ma
connaissance tu ne peux pas élargir la saisie à plusieurs cellules à la fois
La saisie pour cette évennement ne doit sauf erreur de ma part être réalisée
cellule par cellule
Je laisse des plus férus que moi confirmer ou infirmer mes propos

Espérant avoir répondu à ta curiosité
Avatar
J
Bonjour FFO
Merci à toi pour ton aide.

Je me suis mal expliqué :
C'est exact, c'est dans le but de réduire les conditions d'application
de l'évènement que j'ai mis la ligne "...Count etc"

Mais mon problème :
une fois qu'il y a eu 1 saisie multiple ou hors E:E, *plus jamais* la
sub ne marche.
Or, j'ai d'autres saisies en E:E ...

ex de saisies :
E1 saisie 2 => 2002 OK
E3 saisie 80 =>1980 OK
G3 saisie 5 => 5 OK
E4 saisie 3 => 3 Pas OK, fallait 2003 !!

Après qq essais, voici un code qui m'a l'air de fonctionner :

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, [E1:E150]) Is Nothing Then
Select Case 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

Ce code a-t-il l'air correct?
merci
@+
J@@



FFO a écrit :
Salut à toi

La ligne :

If Target.Count > 1 Or Target.Column <> 5 Then Exit Sub

détermine les conditions d'application de l'évennement

Target.Count > 1 exclue les saisies multiples
Target.Column <> 5 exclue les saisies en dehors de la colonne 5 (colonne E)

Tu peux étendre les colonnes en modifiant sa condition mais à ma
connaissance tu ne peux pas élargir la saisie à plusieurs cellules à la fois
La saisie pour cette évennement ne doit sauf erreur de ma part être réalisée
cellule par cellule
Je laisse des plus férus que moi confirmer ou infirmer mes propos

Espérant avoir répondu à ta curiosité



Avatar
J
Bonjour à tous(tes)
Le code en bas a l'air de fonctionner comme je souhaite.
Mais si je sélectionne une plage multiple, ex: d1:d5, pour la vider
ensuite cette sub ne s'exécute plus.

Ex :
**avant
D1 saisie 2 => 2002 OK
D3 saisie 80 =>1980 OK
**si je sélectionne puis vide [d1:d5], ensuite :
D1 saisie 2 => 2 Pas OK, fallait 2002 !!

Qui aurait la bonté de m'expliquer où je me plante, svp
Merci bcp
@+
J@@
'*****
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, [d1: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
End Sub
'*****
Avatar
J
J@@ a écrit :
Bonjour à tous
j'avais oublié de le préciser :-=)
c'est du 2000.

re le message
*******
Le code en bas a l'air de fonctionner comme je souhaite.
Mais si je sélectionne une plage multiple, ex: d1:d5, pour la vider
ensuite cette sub ne s'exécute plus.

Ex :
**avant
D1 saisie 2 => 2002 OK
D3 saisie 80 =>1980 OK
**si je sélectionne puis vide [d1:d5], ensuite :
D1 saisie 2 => 2 Pas OK, fallait 2002 !!

Qui aurait la bonté de m'expliquer où je me plante, svp
Merci bcp
@+
J@@
'*****
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, [d1: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
End Sub
'*****
Avatar
isabelle
bonjour J@@,

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Count > 1 Then
Application.EnableEvents = True
Exit Sub
End If
If Not Intersect(Target, [d1: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
Application.EnableEvents = True
End Sub

isabelle

J@@ a écrit :
Bonjour à tous(tes)
Le code en bas a l'air de fonctionner comme je souhaite.
Mais si je sélectionne une plage multiple, ex: d1:d5, pour la vider
ensuite cette sub ne s'exécute plus.

Ex :
**avant
D1 saisie 2 => 2002 OK
D3 saisie 80 =>1980 OK
**si je sélectionne puis vide [d1:d5], ensuite :
D1 saisie 2 => 2 Pas OK, fallait 2002 !!

Qui aurait la bonté de m'expliquer où je me plante, svp
Merci bcp
@+
J@@
'*****
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, [d1: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
End Sub
'*****


Avatar
J
Bonjour Isabelle
Ah ben voilà!
J'avais bien essayer d'en mettre partout de ces lignes, mais sans y arriver.
Grâce à toi mes cheveux vont gagner en durée de vie : je vais arrêter de
me les arracher.
Merci et bonjour au Canada.
Bises à toi :-)
Amitiés
J@@


isabelle a écrit :
bonjour J@@,

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Count > 1 Then
Application.EnableEvents = True
Exit Sub
End If
If Not Intersect(Target, [d1: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
Application.EnableEvents = True
End Sub

isabelle

J@@ a écrit :
Bonjour à tous(tes)
Le code en bas a l'air de fonctionner comme je souhaite.
Mais si je sélectionne une plage multiple, ex: d1:d5, pour la vider
ensuite cette sub ne s'exécute plus.

Ex :
**avant
D1 saisie 2 => 2002 OK
D3 saisie 80 =>1980 OK
**si je sélectionne puis vide [d1:d5], ensuite :
D1 saisie 2 => 2 Pas OK, fallait 2002 !!

Qui aurait la bonté de m'expliquer où je me plante, svp
Merci bcp
@+
J@@
'*****
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, [d1: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
End Sub
'*****