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

proc évènementielle sur cellule contenant plusieurs paires de chiffres

13 réponses
Avatar
J
Bonjour à tous

Dans une proc évènementielle, je peux alerter si une valeur dans une
cellule est excessive :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Value > "40" 'etc

Ce qui fonctionne bien.
Malheureusement, les cellules concernées sont susceptibles de renfermer
plusieurs séries de 2 chiffres, au maximum 4, sous le format :
nn
nn nn
nn nn nn
nn nn nn nn

qui peuvent avoir une valeur quelconque, ex :
12 15 25 55

Est-il possible de faire, et comment :
If Target.Value contient une valeur > "40" 'etc

Merci pour les idées
@+
J@@

10 réponses

1 2
Avatar
isabelle
bonjour J@@,

For i = 1 To Len(Target) Step 3
If Val(Mid(Target, i, 3)) > 40 Then MsgBox "plus grand que 40"
Next

isabelle

Bonjour à tous

Dans une proc évènementielle, je peux alerter si une valeur dans une
cellule est excessive :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Value > "40" 'etc

Ce qui fonctionne bien.
Malheureusement, les cellules concernées sont susceptibles de renfermer
plusieurs séries de 2 chiffres, au maximum 4, sous le format :
nn
nn nn
nn nn nn
nn nn nn nn

qui peuvent avoir une valeur quelconque, ex :
12 15 25 55

Est-il possible de faire, et comment :
If Target.Value contient une valeur > "40" 'etc

Merci pour les idées
@+
J@@


Avatar
Philippe.R
Bon{j,s}o{u,i}r J@@,
Je tenterai quelque chose comme ci :
détecter le nombre d'espaces séparant les groupes de 2 chiffres dans la
cellule et le stocker dans une variable, nommée ici "nbgrp" :

nbgrp = Len(Target) - Len(Application.WorksheetFunction.Substitute(Target, "
", ""))

puis tester les groupes en partant de la gauche et en les convertissant en
numérique, à l'aide de combinaisons de cdbl(left(target,2)) et
cdbl(right(target,2))
--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
"J@@" a écrit dans le message de
news:u$
Bonjour à tous

Dans une proc évènementielle, je peux alerter si une valeur dans une
cellule est excessive :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Value > "40" 'etc

Ce qui fonctionne bien.
Malheureusement, les cellules concernées sont susceptibles de renfermer
plusieurs séries de 2 chiffres, au maximum 4, sous le format :
nn
nn nn
nn nn nn
nn nn nn nn

qui peuvent avoir une valeur quelconque, ex :
12 15 25 55

Est-il possible de faire, et comment :
If Target.Value contient une valeur > "40" 'etc

Merci pour les idées
@+
J@@


Avatar
JB
Bonjour,

Private Sub Worksheet_Change(ByVal Target As Range)
a = Split(Target, " ")
For i = LBound(a) To UBound(a)
If Val(a(i)) > 40 Then MsgBox "Erreur:" & a(i)
Next i
End Sub

JB


On 6 fév, 06:07, "J@@" wrote:
Bonjour à tous

Dans une proc évènementielle, je peux alerter si une valeur dans une
cellule est excessive :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Value > "40" 'etc

Ce qui fonctionne bien.
Malheureusement, les cellules concernées sont susceptibles de renfermer
plusieurs séries de 2 chiffres, au maximum 4, sous le format :
nn
nn nn
nn nn nn
nn nn nn nn

qui peuvent avoir une valeur quelconque, ex :
12 15 25 55

Est-il possible de faire, et comment :
If Target.Value contient une valeur > "40" 'etc

Merci pour les idées
@+
J@@


Avatar
MichDenis
ça met la cellule en "rouge" si la donnée entrée dans la cellule
ne respecte pas une série de chiffre tel que tu as énoncé.


Private Sub Worksheet_Change(ByVal Target As Range)

Dim S As String, X As String
Dim Rg As Range, C As Range
Set Rg = Intersect(Target, Range("A1:A10"))
If Not Rg Is Nothing Then
For Each C In Rg
C.Interior.ColorIndex = xlNone
If C <> "" Then
Application.EnableEvents = False
S = Replace(C.Text, " ", "")
C.NumberFormat = "## ## ## ##"
X = Trim(C.Text)
If X = Trim(Left(S, 2) & " " & Mid(S, 3, 2) & _
" " & Mid(S, 5, 2) & " " & Mid(S, 7, 2)) Then
Else
C.Interior.ColorIndex = 3
End If
Application.EnableEvents = True
End If
Next
End If
End Sub





"J@@" a écrit dans le message de news: u$
Bonjour à tous

Dans une proc évènementielle, je peux alerter si une valeur dans une
cellule est excessive :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Value > "40" 'etc

Ce qui fonctionne bien.
Malheureusement, les cellules concernées sont susceptibles de renfermer
plusieurs séries de 2 chiffres, au maximum 4, sous le format :
nn
nn nn
nn nn nn
nn nn nn nn

qui peuvent avoir une valeur quelconque, ex :
12 15 25 55

Est-il possible de faire, et comment :
If Target.Value contient une valeur > "40" 'etc

Merci pour les idées
@+
J@@
Avatar
MichDenis
Une légère correction :


Private Sub Worksheet_Change(ByVal Target As Range)

Dim S As String, X As String
Dim Rg As Range, C As Range
Set Rg = Intersect(Target, Range("A1:A10"))
If Not Rg Is Nothing Then
For Each C In Rg
C.Interior.ColorIndex = xlNone
If C <> "" Then
Application.EnableEvents = False
S = Replace(C.Text, " ", "")
C.NumberFormat = "## ## ## ##"
X = Trim(C.Text)
If Len(X) < 2 Or IsNumeric(X) = False Then
C.Interior.ColorIndex = 3
ElseIf X = Trim(Left(S, 2) & " " & Mid(S, 3, 2) & _
" " & Mid(S, 5, 2) & " " & Mid(S, 7, 2)) Then
Else
C.Interior.ColorIndex = 3
End If
Application.EnableEvents = True
End If
Next
End If
End Sub





"MichDenis" a écrit dans le message de news:

ça met la cellule en "rouge" si la donnée entrée dans la cellule
ne respecte pas une série de chiffre tel que tu as énoncé.


Private Sub Worksheet_Change(ByVal Target As Range)

Dim S As String, X As String
Dim Rg As Range, C As Range
Set Rg = Intersect(Target, Range("A1:A10"))
If Not Rg Is Nothing Then
For Each C In Rg
C.Interior.ColorIndex = xlNone
If C <> "" Then
Application.EnableEvents = False
S = Replace(C.Text, " ", "")
C.NumberFormat = "## ## ## ##"
X = Trim(C.Text)
If X = Trim(Left(S, 2) & " " & Mid(S, 3, 2) & _
" " & Mid(S, 5, 2) & " " & Mid(S, 7, 2)) Then
Else
C.Interior.ColorIndex = 3
End If
Application.EnableEvents = True
End If
Next
End If
End Sub





"J@@" a écrit dans le message de news: u$
Bonjour à tous

Dans une proc évènementielle, je peux alerter si une valeur dans une
cellule est excessive :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Value > "40" 'etc

Ce qui fonctionne bien.
Malheureusement, les cellules concernées sont susceptibles de renfermer
plusieurs séries de 2 chiffres, au maximum 4, sous le format :
nn
nn nn
nn nn nn
nn nn nn nn

qui peuvent avoir une valeur quelconque, ex :
12 15 25 55

Est-il possible de faire, et comment :
If Target.Value contient une valeur > "40" 'etc

Merci pour les idées
@+
J@@
Avatar
MichDenis
En passant, il faut adapter la plage de cellule où cela doit s'appliquer
dans mon exemple, j'ai choisi : Range("A1:A10")



"MichDenis" a écrit dans le message de news:

ça met la cellule en "rouge" si la donnée entrée dans la cellule
ne respecte pas une série de chiffre tel que tu as énoncé.


Private Sub Worksheet_Change(ByVal Target As Range)

Dim S As String, X As String
Dim Rg As Range, C As Range
Set Rg = Intersect(Target, Range("A1:A10"))
If Not Rg Is Nothing Then
For Each C In Rg
C.Interior.ColorIndex = xlNone
If C <> "" Then
Application.EnableEvents = False
S = Replace(C.Text, " ", "")
C.NumberFormat = "## ## ## ##"
X = Trim(C.Text)
If X = Trim(Left(S, 2) & " " & Mid(S, 3, 2) & _
" " & Mid(S, 5, 2) & " " & Mid(S, 7, 2)) Then
Else
C.Interior.ColorIndex = 3
End If
Application.EnableEvents = True
End If
Next
End If
End Sub





"J@@" a écrit dans le message de news: u$
Bonjour à tous

Dans une proc évènementielle, je peux alerter si une valeur dans une
cellule est excessive :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Value > "40" 'etc

Ce qui fonctionne bien.
Malheureusement, les cellules concernées sont susceptibles de renfermer
plusieurs séries de 2 chiffres, au maximum 4, sous le format :
nn
nn nn
nn nn nn
nn nn nn nn

qui peuvent avoir une valeur quelconque, ex :
12 15 25 55

Est-il possible de faire, et comment :
If Target.Value contient une valeur > "40" 'etc

Merci pour les idées
@+
J@@
Avatar
J
Bonjour isabelle
Impeccable
cela fonctionne au poil :-)
j'ai encore (beaucoup) de marge avant de trouver des solutions comme cela.
Bonjour à la Belle Province
amicalement
J@@


bonjour J@@,

For i = 1 To Len(Target) Step 3
If Val(Mid(Target, i, 3)) > 40 Then MsgBox "plus grand que 40"
Next

isabelle

Bonjour à tous

Dans une proc évènementielle, je peux alerter si une valeur dans une
cellule est excessive :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Value > "40" 'etc

Ce qui fonctionne bien.
Malheureusement, les cellules concernées sont susceptibles de
renfermer plusieurs séries de 2 chiffres, au maximum 4, sous le format :
nn
nn nn
nn nn nn
nn nn nn nn

qui peuvent avoir une valeur quelconque, ex :
12 15 25 55

Est-il possible de faire, et comment :
If Target.Value contient une valeur > "40" 'etc

Merci pour les idées
@+
J@@




Avatar
J
Bonsoir Philippe
Merci pour la piste. Je vais fouiller cela, et sans doute grâce à toi je
vais finir polytechnicien, la place d'évêque étant déjà prise. ;-)
@+
J@@

Bon{j,s}o{u,i}r J@@,
Je tenterai quelque chose comme ci :
détecter le nombre d'espaces séparant les groupes de 2 chiffres dans la
cellule et le stocker dans une variable, nommée ici "nbgrp" :

nbgrp = Len(Target) -
Len(Application.WorksheetFunction.Substitute(Target, " ", ""))

puis tester les groupes en partant de la gauche et en les convertissant
en numérique, à l'aide de combinaisons de cdbl(left(target,2)) et
cdbl(right(target,2))


Avatar
J
Bonjour JB
cela marche au poil.
J'aime bien le Msgbox qui pointe le fautif.
Merci
@+
J@@

Bonjour,

Private Sub Worksheet_Change(ByVal Target As Range)
a = Split(Target, " ")
For i = LBound(a) To UBound(a)
If Val(a(i)) > 40 Then MsgBox "Erreur:" & a(i)
Next i
End Sub

JB


On 6 fév, 06:07, "J@@" wrote:
Bonjour à tous

Dans une proc évènementielle, je peux alerter si une valeur dans une
cellule est excessive :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Value > "40" 'etc

Ce qui fonctionne bien.
Malheureusement, les cellules concernées sont susceptibles de renfermer
plusieurs séries de 2 chiffres, au maximum 4, sous le format :
nn
nn nn
nn nn nn
nn nn nn nn

qui peuvent avoir une valeur quelconque, ex :
12 15 25 55

Est-il possible de faire, et comment :
If Target.Value contient une valeur > "40" 'etc

Merci pour les idées
@+
J@@





Avatar
J
Bonjour MichDenis
Merci pour ton aide
ton code facilite la saisie, mais ne réagit pas à des saisies fausses.
Par exemple :
12 12 12 58 => le 58 est faux
45 55 23 => le 45 et le 55 sont faux.
En fait je souhaite attirer l'attention de celui qui saisit sur la
saisie à revoir.
Ton code est encore trop compliqué pour que j'arrive à y retoucher...
Merci
@+
J@@


Une légère correction :


Private Sub Worksheet_Change(ByVal Target As Range)

Dim S As String, X As String
Dim Rg As Range, C As Range
Set Rg = Intersect(Target, Range("A1:A10"))
If Not Rg Is Nothing Then
For Each C In Rg
C.Interior.ColorIndex = xlNone
If C <> "" Then
Application.EnableEvents = False
S = Replace(C.Text, " ", "")
C.NumberFormat = "## ## ## ##"
X = Trim(C.Text)
If Len(X) < 2 Or IsNumeric(X) = False Then
C.Interior.ColorIndex = 3
ElseIf X = Trim(Left(S, 2) & " " & Mid(S, 3, 2) & _
" " & Mid(S, 5, 2) & " " & Mid(S, 7, 2)) Then
Else
C.Interior.ColorIndex = 3
End If
Application.EnableEvents = True
End If
Next
End If
End Sub





"MichDenis" a écrit dans le message de news:

ça met la cellule en "rouge" si la donnée entrée dans la cellule
ne respecte pas une série de chiffre tel que tu as énoncé.


Private Sub Worksheet_Change(ByVal Target As Range)

Dim S As String, X As String
Dim Rg As Range, C As Range
Set Rg = Intersect(Target, Range("A1:A10"))
If Not Rg Is Nothing Then
For Each C In Rg
C.Interior.ColorIndex = xlNone
If C <> "" Then
Application.EnableEvents = False
S = Replace(C.Text, " ", "")
C.NumberFormat = "## ## ## ##"
X = Trim(C.Text)
If X = Trim(Left(S, 2) & " " & Mid(S, 3, 2) & _
" " & Mid(S, 5, 2) & " " & Mid(S, 7, 2)) Then
Else
C.Interior.ColorIndex = 3
End If
Application.EnableEvents = True
End If
Next
End If
End Sub





"J@@" a écrit dans le message de news: u$
Bonjour à tous

Dans une proc évènementielle, je peux alerter si une valeur dans une
cellule est excessive :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Value > "40" 'etc

Ce qui fonctionne bien.
Malheureusement, les cellules concernées sont susceptibles de renfermer
plusieurs séries de 2 chiffres, au maximum 4, sous le format :
nn
nn nn
nn nn nn
nn nn nn nn

qui peuvent avoir une valeur quelconque, ex :
12 15 25 55

Est-il possible de faire, et comment :
If Target.Value contient une valeur > "40" 'etc

Merci pour les idées
@+
J@@





1 2