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

Obliger la saisie de valeur numérique

6 réponses
Avatar
Jean-Pierre
Bonjour,

J'ai écris cette procédure pour obliger la saisie de valeur numérique en A1,
ça marche très bien mais lorsque je remplace (Target = Range("A10")) par
(Target = Range("A10 : B20")) cela interdit la saisie de texte dans toute la
feuille.
Pouvez-vous me dire pourquoi ?

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If IsNumeric(Target) = False Then
If (Target = Range("A10")) Then
MsgBox "Valeur numérique obligatoire"
Target.Clear
Target.Select
End If
End If
End Sub

Merci d'avance.

JP

6 réponses

Avatar
Jacques93
Bonjour Jean-Pierre
Jean-Pierre a écrit :
Bonjour,

J'ai écris cette procédure pour obliger la saisie de valeur numérique en A1,
ça marche très bien mais lorsque je remplace (Target = Range("A10")) par
(Target = Range("A10 : B20")) cela interdit la saisie de texte dans toute la
feuille.
Pouvez-vous me dire pourquoi ?

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If IsNumeric(Target) = False Then
If (Target = Range("A10")) Then
MsgBox "Valeur numérique obligatoire"
Target.Clear
Target.Select
End If
End If
End Sub

Merci d'avance.

JP



Essaie :

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, Range("A10:B20")) Is Nothing Then
If IsNumeric(Target) = False Then
MsgBox "Valeur numérique obligatoire"
Target.Clear
Target.Select
End If
End If
End Sub

PS : le forum approprié serait plus microsoft.public.fr.excel

--
Cordialement,

Jacques.
Avatar
Jean-Pierre
Bonjour,

OK merci ça marche mais puis-je avoir des infos sur cette ligne :
If Not Intersect(Target, Range("A10:B20")) Is Nothing Then


Merci
JP

"Jacques93" a écrit dans le message de
news:
Bonjour Jean-Pierre
Jean-Pierre a écrit :
Bonjour,

J'ai écris cette procédure pour obliger la saisie de valeur numérique en
A1, ça marche très bien mais lorsque je remplace (Target = Range("A10"))
par (Target = Range("A10 : B20")) cela interdit la saisie de texte dans
toute la feuille.
Pouvez-vous me dire pourquoi ?

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If IsNumeric(Target) = False Then
If (Target = Range("A10")) Then
MsgBox "Valeur numérique obligatoire"
Target.Clear
Target.Select
End If
End If
End Sub

Merci d'avance.

JP



Essaie :

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, Range("A10:B20")) Is Nothing Then
If IsNumeric(Target) = False Then
MsgBox "Valeur numérique obligatoire"
Target.Clear
Target.Select
End If
End If
End Sub

PS : le forum approprié serait plus microsoft.public.fr.excel

--
Cordialement,

Jacques.


Avatar
Jacques93
Bonsoir Jean-Pierre,
Jean-Pierre a écrit :
Bonjour,

OK merci ça marche mais puis-je avoir des infos sur cette ligne :
If Not Intersect(Target, Range("A10:B20")) Is Nothing Then




Intersect (Rg1, Rg2) renvoie un objet range représentant l'intersection
rectangulaire des deux plages (en gros, les cellules qui sont communes
aux eux plages).

Par ex:

-----
! !
! Rg1 !
! !
! !
-----

-----
! !
! Rg2 !
! !
! !
-----

Pas d'intersection, donc Intersect(Rg1, Rg2) Is Nothing est vrai.
Par contre :


-------
! !
! Rg1 !
! !
! --- !
! !Rg2! !
! --- !
! !
-------

Il y a intersection, vu que Rg2 est inclus dans Rg1, donc
Intersect (Rg1, Rg2) Is Nothing est faux, c'est le cas que tu cherche
(cellule modifiée dans la plage ("A10:B20"). Et il y au moins deux
manière de l'écrire :

If Intersect(Target, Range("A10:B20")) Is Nothing = False Then

ou

If Not Intersect(Target, Range("A10:B20")) Is Nothing Then

Ce qui revient au même. Mais certains "puristes" (que je ne nommerai
pas) trouvent que la seconde syntaxe est plus élégante ;-)

J'espère avoir été clair. Tu peux aussi jeter un coup d'oeil sur l'aide
Excel concernat Intersect. La syntaxe quand à elle est commune à VBA et VB6.

--
Cordialement,

Jacques.
Avatar
Patrice Henrio
effectivement la bonne utilisation des booléens permet une programmation
plus lisible te surtout transportable.

If <prédicat> then nécessite l'évaluation du prédicat qui doit renvoyer Vrai
ou faux

Donc If booléen=true then
nécessite l'évaluation de booléen puis l'évaluation de booléen=true, alors
qu'on a exactement le même résultat avec l'évaluation directe de booléen.
De même avec Not, false ....
cela reviendrait à écrire par exemple

If ((x=1)= true) then

au lieu de

If (x=1) then

...
"Jacques93" a écrit dans le message de
news:
Bonsoir Jean-Pierre,
Jean-Pierre a écrit :
Bonjour,

OK merci ça marche mais puis-je avoir des infos sur cette ligne :
If Not Intersect(Target, Range("A10:B20")) Is Nothing Then




Intersect (Rg1, Rg2) renvoie un objet range représentant l'intersection
rectangulaire des deux plages (en gros, les cellules qui sont communes aux
eux plages).

Par ex:

-----
! !
! Rg1 !
! !
! !
-----

-----
! !
! Rg2 !
! !
! !
-----

Pas d'intersection, donc Intersect(Rg1, Rg2) Is Nothing est vrai.
Par contre :


-------
! !
! Rg1 !
! !
! --- !
! !Rg2! !
! --- !
! !
-------

Il y a intersection, vu que Rg2 est inclus dans Rg1, donc
Intersect (Rg1, Rg2) Is Nothing est faux, c'est le cas que tu cherche
(cellule modifiée dans la plage ("A10:B20"). Et il y au moins deux manière
de l'écrire :

If Intersect(Target, Range("A10:B20")) Is Nothing = False Then

ou

If Not Intersect(Target, Range("A10:B20")) Is Nothing Then

Ce qui revient au même. Mais certains "puristes" (que je ne nommerai pas)
trouvent que la seconde syntaxe est plus élégante ;-)

J'espère avoir été clair. Tu peux aussi jeter un coup d'oeil sur l'aide
Excel concernat Intersect. La syntaxe quand à elle est commune à VBA et
VB6.

--
Cordialement,

Jacques.


Avatar
Jean-Pierre
Bonsoir,

OK merci de ces explications très clair.

JP

"Jacques93" a écrit dans le message de
news:
Bonsoir Jean-Pierre,
Jean-Pierre a écrit :
Bonjour,

OK merci ça marche mais puis-je avoir des infos sur cette ligne :
If Not Intersect(Target, Range("A10:B20")) Is Nothing Then




Intersect (Rg1, Rg2) renvoie un objet range représentant l'intersection
rectangulaire des deux plages (en gros, les cellules qui sont communes aux
eux plages).

Par ex:

-----
! !
! Rg1 !
! !
! !
-----

-----
! !
! Rg2 !
! !
! !
-----

Pas d'intersection, donc Intersect(Rg1, Rg2) Is Nothing est vrai.
Par contre :


-------
! !
! Rg1 !
! !
! --- !
! !Rg2! !
! --- !
! !
-------

Il y a intersection, vu que Rg2 est inclus dans Rg1, donc
Intersect (Rg1, Rg2) Is Nothing est faux, c'est le cas que tu cherche
(cellule modifiée dans la plage ("A10:B20"). Et il y au moins deux manière
de l'écrire :

If Intersect(Target, Range("A10:B20")) Is Nothing = False Then

ou

If Not Intersect(Target, Range("A10:B20")) Is Nothing Then

Ce qui revient au même. Mais certains "puristes" (que je ne nommerai pas)
trouvent que la seconde syntaxe est plus élégante ;-)

J'espère avoir été clair. Tu peux aussi jeter un coup d'oeil sur l'aide
Excel concernat Intersect. La syntaxe quand à elle est commune à VBA et
VB6.

--
Cordialement,

Jacques.



Avatar
Zoury
Bonjour Jean-Pierre ! :O)

If IsNumeric(Target) = False Then



Juste une p'tite mise en garde concernant IsNumeric()
http://groups.google.com/groups?selm=uvk9PbzHFHA.580%40TK2MSFTNGP15.phx.gbl


--
Cordialement
Yanick
MVP pour Visual Basic