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

Le
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@@
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
isabelle
Le #5282391
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@@


Philippe.R
Le #5282381
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@@" 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@@


JB
Le #5282361
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@@"
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@@


MichDenis
Le #5282321
ç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@@" 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@@
MichDenis
Le #5282311
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 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@@" 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@@
MichDenis
Le #5282301
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 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@@" 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@@
J
Le #5282291
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@@




J
Le #5282281
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))


J
Le #5282271
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@@"
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@@





J
Le #5282261
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 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@@" 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@@





Publicité
Poster une réponse
Anonyme