sub évenementielle qui plante si saisie hors target autorisé
6 réponses
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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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é
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
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é
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é
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
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é
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 '*****
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
'*****
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 '*****
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 '*****
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
'*****
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 '*****
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 '*****
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
'*****
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 '*****
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 '*****
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
'*****
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 '*****