OVH Cloud OVH Cloud

Nombre de caractères dans une cellule

8 réponses
Avatar
Flac
Bonjour,
Excel 2000,
J'ai dans une colonne le format suivant:
1234-5678-9012-3456
Il y a donc 16 caractères dans la cellule (en excluant les traits d'union
qui s'inscrivent automatiquement).
Je voudrais une procédure qui vérifie que le nombre de caractères inscrits
dans une cellule de la colonne 10 soit égal à 16 et que les caractères
soient tous numériques.
Ce serait du genre:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Column = 10 Then
if "si le nombre de caractères numériques est différent de
16" then
msgbox "Vous n'avez pas inscrit un numéro valide"
activecell.ClearContents
End If
End Sub

Merci

Flac

8 réponses

Avatar
Jacky
Bonsoir,

Ceci peut-être
'--------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 10 Then
Application.EnableEvents = False
On Error GoTo erreur
x = Application.Substitute(Target.Value, "-", "")
If Len(x) <> 16 Or Len(Target) <> (19) Then GoTo erreur
x = x * 1
Application.EnableEvents = True
Exit Sub
erreur:
MsgBox "Vous n'avez pas inscrit un numéro valide"
Target.Select
Target.ClearContents
Application.EnableEvents = True
End If
End Sub
'------------------

--
Salutations
JJ


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

Bonjour,
Excel 2000,
J'ai dans une colonne le format suivant:
1234-5678-9012-3456
Il y a donc 16 caractères dans la cellule (en excluant les traits d'union
qui s'inscrivent automatiquement).
Je voudrais une procédure qui vérifie que le nombre de caractères inscrits
dans une cellule de la colonne 10 soit égal à 16 et que les caractères
soient tous numériques.
Ce serait du genre:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Column = 10 Then
if "si le nombre de caractères numériques est différent de
16" then
msgbox "Vous n'avez pas inscrit un numéro valide"
activecell.ClearContents
End If
End Sub

Merci

Flac



Avatar
Flac
Bonjour,
Merci pour la réponse. La macro fonctionne bien, mais il y a un petit
inconvénient. Je dois inscrire un trait d'union entre les 4 groupes de
caractères. Y aurait-il une façon d'éviter d'écrire les traits d'union,
seulement les 16 caractères numériques.

Merci

Flac



"Jacky" a écrit dans le message de news:
%
Bonsoir,

Ceci peut-être
'--------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 10 Then
Application.EnableEvents = False
On Error GoTo erreur
x = Application.Substitute(Target.Value, "-", "")
If Len(x) <> 16 Or Len(Target) <> (19) Then GoTo erreur
x = x * 1
Application.EnableEvents = True
Exit Sub
erreur:
MsgBox "Vous n'avez pas inscrit un numéro valide"
Target.Select
Target.ClearContents
Application.EnableEvents = True
End If
End Sub
'------------------

--
Salutations
JJ


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

Bonjour,
Excel 2000,
J'ai dans une colonne le format suivant:
1234-5678-9012-3456
Il y a donc 16 caractères dans la cellule (en excluant les traits d'union
qui s'inscrivent automatiquement).
Je voudrais une procédure qui vérifie que le nombre de caractères
inscrits dans une cellule de la colonne 10 soit égal à 16 et que les
caractères soient tous numériques.
Ce serait du genre:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Column = 10 Then
if "si le nombre de caractères numériques est différent de
16" then
msgbox "Vous n'avez pas inscrit un numéro valide"
activecell.ClearContents
End If
End Sub

Merci

Flac







Avatar
CAP2
Salut,

tu sélectionnes ta colonne, puis clic-droit --> Format de
cellule-->Nombre-->Personnalisé et tu mets ça :

0000-0000-0000-0000

Rq: ca ne fait que 3 traits d'union pour séparer 4 groupes ;o)

Ca marche ?

CAP2

"Flac" a écrit dans le message de news:
%
Bonjour,
Merci pour la réponse. La macro fonctionne bien, mais il y a un petit
inconvénient. Je dois inscrire un trait d'union entre les 4 groupes de
caractères. Y aurait-il une façon d'éviter d'écrire les traits d'union,
seulement les 16 caractères numériques.

Merci

Flac



"Jacky" a écrit dans le message de news:
%
Bonsoir,

Ceci peut-être
'--------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 10 Then
Application.EnableEvents = False
On Error GoTo erreur
x = Application.Substitute(Target.Value, "-", "")
If Len(x) <> 16 Or Len(Target) <> (19) Then GoTo erreur
x = x * 1
Application.EnableEvents = True
Exit Sub
erreur:
MsgBox "Vous n'avez pas inscrit un numéro valide"
Target.Select
Target.ClearContents
Application.EnableEvents = True
End If
End Sub
'------------------

--
Salutations
JJ


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

Bonjour,
Excel 2000,
J'ai dans une colonne le format suivant:
1234-5678-9012-3456
Il y a donc 16 caractères dans la cellule (en excluant les traits
d'union qui s'inscrivent automatiquement).
Je voudrais une procédure qui vérifie que le nombre de caractères
inscrits dans une cellule de la colonne 10 soit égal à 16 et que les
caractères soient tous numériques.
Ce serait du genre:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Column = 10 Then
if "si le nombre de caractères numériques est différent de
16" then
msgbox "Vous n'avez pas inscrit un numéro valide"
activecell.ClearContents
End If
End Sub

Merci

Flac











Avatar
Jacky
Re
Y aurait-il une façon d'éviter d'écrire les traits d'union, seulement les
16 caractères numériques



Avec ceci je pensais (a tort) que c'était déjà fait
(en excluant les traits d'union qui s'inscrivent automatiquement).


je pensais (a tort) que c'était déjà fait


Essaie avec
'------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 10 Then
Application.EnableEvents = False
On Error GoTo erreur
x = Application.Substitute(Target.Value, "-", "")
If Len(x) <> 16 Then GoTo erreur
x = x * 1
Target.NumberFormat = "0000-0000-0000-0000"
Application.EnableEvents = True
Exit Sub
erreur:
MsgBox "Vous n'avez pas inscrit un numéro valide"
Target.Select
Target.ClearContents
Application.EnableEvents = True
End If
End Sub
'---------------

--
Salutations
JJ


"Flac" a écrit dans le message de news:
%
Bonjour,
Merci pour la réponse. La macro fonctionne bien, mais il y a un petit
inconvénient. Je dois inscrire un trait d'union entre les 4 groupes de
caractères. Y aurait-il une façon d'éviter d'écrire les traits d'union,
seulement les 16 caractères numériques.

Merci

Flac



"Jacky" a écrit dans le message de news:
%
Bonsoir,

Ceci peut-être
'--------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 10 Then
Application.EnableEvents = False
On Error GoTo erreur
x = Application.Substitute(Target.Value, "-", "")
If Len(x) <> 16 Or Len(Target) <> (19) Then GoTo erreur
x = x * 1
Application.EnableEvents = True
Exit Sub
erreur:
MsgBox "Vous n'avez pas inscrit un numéro valide"
Target.Select
Target.ClearContents
Application.EnableEvents = True
End If
End Sub
'------------------

--
Salutations
JJ


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

Bonjour,
Excel 2000,
J'ai dans une colonne le format suivant:
1234-5678-9012-3456
Il y a donc 16 caractères dans la cellule (en excluant les traits
d'union qui s'inscrivent automatiquement).
Je voudrais une procédure qui vérifie que le nombre de caractères
inscrits dans une cellule de la colonne 10 soit égal à 16 et que les
caractères soient tous numériques.
Ce serait du genre:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Column = 10 Then
if "si le nombre de caractères numériques est différent de
16" then
msgbox "Vous n'avez pas inscrit un numéro valide"
activecell.ClearContents
End If
End Sub

Merci

Flac











Avatar
CAP2
Excuse-moi Jacky, j'avais pas regardé ton code avant de répondre ;o))

Et du coup, j'ai bien l'impression que Flac a fait pareil que moi !!

;o)))

CAP2

"Jacky" a écrit dans le message de news:
%
Re
Y aurait-il une façon d'éviter d'écrire les traits d'union, seulement les
16 caractères numériques



Avec ceci je pensais (a tort) que c'était déjà fait
(en excluant les traits d'union qui s'inscrivent automatiquement).


je pensais (a tort) que c'était déjà fait


Essaie avec
'------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 10 Then
Application.EnableEvents = False
On Error GoTo erreur
x = Application.Substitute(Target.Value, "-", "")
If Len(x) <> 16 Then GoTo erreur
x = x * 1
Target.NumberFormat = "0000-0000-0000-0000"
Application.EnableEvents = True
Exit Sub
erreur:
MsgBox "Vous n'avez pas inscrit un numéro valide"
Target.Select
Target.ClearContents
Application.EnableEvents = True
End If
End Sub
'---------------

--
Salutations
JJ


"Flac" a écrit dans le message de news:
%
Bonjour,
Merci pour la réponse. La macro fonctionne bien, mais il y a un petit
inconvénient. Je dois inscrire un trait d'union entre les 4 groupes de
caractères. Y aurait-il une façon d'éviter d'écrire les traits d'union,
seulement les 16 caractères numériques.

Merci

Flac



"Jacky" a écrit dans le message de news:
%
Bonsoir,

Ceci peut-être
'--------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 10 Then
Application.EnableEvents = False
On Error GoTo erreur
x = Application.Substitute(Target.Value, "-", "")
If Len(x) <> 16 Or Len(Target) <> (19) Then GoTo erreur
x = x * 1
Application.EnableEvents = True
Exit Sub
erreur:
MsgBox "Vous n'avez pas inscrit un numéro valide"
Target.Select
Target.ClearContents
Application.EnableEvents = True
End If
End Sub
'------------------

--
Salutations
JJ


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

Bonjour,
Excel 2000,
J'ai dans une colonne le format suivant:
1234-5678-9012-3456
Il y a donc 16 caractères dans la cellule (en excluant les traits
d'union qui s'inscrivent automatiquement).
Je voudrais une procédure qui vérifie que le nombre de caractères
inscrits dans une cellule de la colonne 10 soit égal à 16 et que les
caractères soient tous numériques.
Ce serait du genre:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Column = 10 Then
if "si le nombre de caractères numériques est différent de
16" then
msgbox "Vous n'avez pas inscrit un numéro valide"
activecell.ClearContents
End If
End Sub

Merci

Flac















Avatar
Jacky
Re...

J'ai bien peur qu'il faille employer une autre stratégie.
Le format avec 16 chiffres ne passe pas
J'ai pas trouver mieux.
'--------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 10 Then
Application.EnableEvents = False
On Error GoTo erreur
x = Application.Substitute(Target, "-", "")
If Len(x) <> 16 Then GoTo erreur
Target = Left(x, 4) & "-" & Mid(x, 5, 4) & "-" & Mid(x, 9, 4) & "-" &
Right(x, 4)
x = x * 1
Application.EnableEvents = True
Exit Sub
erreur:
MsgBox Target & Chr(10) & "N'est pas un numéro valide." & Chr(10) & Chr(10)
& "Recommencez."
Target.Select
Target.ClearContents
Application.EnableEvents = True
End If
End Sub
'-----------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 10 Then
Target.NumberFormat = "@"
End If
End Sub
'---------------

--
Salutations
JJ


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

Excuse-moi Jacky, j'avais pas regardé ton code avant de répondre ;o))

Et du coup, j'ai bien l'impression que Flac a fait pareil que moi !!

;o)))

CAP2

"Jacky" a écrit dans le message de news:
%
Re
Y aurait-il une façon d'éviter d'écrire les traits d'union, seulement les
16 caractères numériques



Avec ceci je pensais (a tort) que c'était déjà fait
(en excluant les traits d'union qui s'inscrivent automatiquement).


je pensais (a tort) que c'était déjà fait


Essaie avec
'------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 10 Then
Application.EnableEvents = False
On Error GoTo erreur
x = Application.Substitute(Target.Value, "-", "")
If Len(x) <> 16 Then GoTo erreur
x = x * 1
Target.NumberFormat = "0000-0000-0000-0000"
Application.EnableEvents = True
Exit Sub
erreur:
MsgBox "Vous n'avez pas inscrit un numéro valide"
Target.Select
Target.ClearContents
Application.EnableEvents = True
End If
End Sub
'---------------

--
Salutations
JJ


"Flac" a écrit dans le message de news:
%
Bonjour,
Merci pour la réponse. La macro fonctionne bien, mais il y a un petit
inconvénient. Je dois inscrire un trait d'union entre les 4 groupes de
caractères. Y aurait-il une façon d'éviter d'écrire les traits d'union,
seulement les 16 caractères numériques.

Merci

Flac



"Jacky" a écrit dans le message de news:
%
Bonsoir,

Ceci peut-être
'--------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 10 Then
Application.EnableEvents = False
On Error GoTo erreur
x = Application.Substitute(Target.Value, "-", "")
If Len(x) <> 16 Or Len(Target) <> (19) Then GoTo erreur
x = x * 1
Application.EnableEvents = True
Exit Sub
erreur:
MsgBox "Vous n'avez pas inscrit un numéro valide"
Target.Select
Target.ClearContents
Application.EnableEvents = True
End If
End Sub
'------------------

--
Salutations
JJ


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

Bonjour,
Excel 2000,
J'ai dans une colonne le format suivant:
1234-5678-9012-3456
Il y a donc 16 caractères dans la cellule (en excluant les traits
d'union qui s'inscrivent automatiquement).
Je voudrais une procédure qui vérifie que le nombre de caractères
inscrits dans une cellule de la colonne 10 soit égal à 16 et que les
caractères soient tous numériques.
Ce serait du genre:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Column = 10 Then
if "si le nombre de caractères numériques est différent de
16" then
msgbox "Vous n'avez pas inscrit un numéro valide"
activecell.ClearContents
End If
End Sub

Merci

Flac



















Avatar
Flac
Merci, c'est parfait comme ça.
J'ai même le choix d'inscrire ou non les traits d'union et
la macro fait le travail.
Super

Très apprécié.

Flac



"Jacky" a écrit dans le message de news:
%
Re...

J'ai bien peur qu'il faille employer une autre stratégie.
Le format avec 16 chiffres ne passe pas
J'ai pas trouver mieux.
'--------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 10 Then
Application.EnableEvents = False
On Error GoTo erreur
x = Application.Substitute(Target, "-", "")
If Len(x) <> 16 Then GoTo erreur
Target = Left(x, 4) & "-" & Mid(x, 5, 4) & "-" & Mid(x, 9, 4) & "-" &
Right(x, 4)
x = x * 1
Application.EnableEvents = True
Exit Sub
erreur:
MsgBox Target & Chr(10) & "N'est pas un numéro valide." & Chr(10) &
Chr(10) & "Recommencez."
Target.Select
Target.ClearContents
Application.EnableEvents = True
End If
End Sub
'-----------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 10 Then
Target.NumberFormat = "@"
End If
End Sub
'---------------

--
Salutations
JJ


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

Excuse-moi Jacky, j'avais pas regardé ton code avant de répondre ;o))

Et du coup, j'ai bien l'impression que Flac a fait pareil que moi !!

;o)))

CAP2

"Jacky" a écrit dans le message de news:
%
Re
Y aurait-il une façon d'éviter d'écrire les traits d'union, seulement
les 16 caractères numériques



Avec ceci je pensais (a tort) que c'était déjà fait
(en excluant les traits d'union qui s'inscrivent automatiquement).


je pensais (a tort) que c'était déjà fait


Essaie avec
'------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 10 Then
Application.EnableEvents = False
On Error GoTo erreur
x = Application.Substitute(Target.Value, "-", "")
If Len(x) <> 16 Then GoTo erreur
x = x * 1
Target.NumberFormat = "0000-0000-0000-0000"
Application.EnableEvents = True
Exit Sub
erreur:
MsgBox "Vous n'avez pas inscrit un numéro valide"
Target.Select
Target.ClearContents
Application.EnableEvents = True
End If
End Sub
'---------------

--
Salutations
JJ


"Flac" a écrit dans le message de news:
%
Bonjour,
Merci pour la réponse. La macro fonctionne bien, mais il y a un petit
inconvénient. Je dois inscrire un trait d'union entre les 4 groupes de
caractères. Y aurait-il une façon d'éviter d'écrire les traits
d'union, seulement les 16 caractères numériques.

Merci

Flac



"Jacky" a écrit dans le message de news:
%
Bonsoir,

Ceci peut-être
'--------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 10 Then
Application.EnableEvents = False
On Error GoTo erreur
x = Application.Substitute(Target.Value, "-", "")
If Len(x) <> 16 Or Len(Target) <> (19) Then GoTo erreur
x = x * 1
Application.EnableEvents = True
Exit Sub
erreur:
MsgBox "Vous n'avez pas inscrit un numéro valide"
Target.Select
Target.ClearContents
Application.EnableEvents = True
End If
End Sub
'------------------

--
Salutations
JJ


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

Bonjour,
Excel 2000,
J'ai dans une colonne le format suivant:
1234-5678-9012-3456
Il y a donc 16 caractères dans la cellule (en excluant les traits
d'union qui s'inscrivent automatiquement).
Je voudrais une procédure qui vérifie que le nombre de caractères
inscrits dans une cellule de la colonne 10 soit égal à 16 et que les
caractères soient tous numériques.
Ce serait du genre:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Column = 10 Then
if "si le nombre de caractères numériques est différent de
16" then
msgbox "Vous n'avez pas inscrit un numéro valide"
activecell.ClearContents
End If
End Sub

Merci

Flac























Avatar
Modeste
Bonsour® Flac avec ferveur ;o))) vous nous disiez :

Je voudrais une procédure qui vérifie que le nombre de caractères
inscrits dans une cellule de la colonne 10 soit égal à 16 et que les
caractères soient tous numériques.



format cellule= Texte

Menu Données > Validation
autoriser : Personnalisé
La formule est :
=ET(NBCAR(A1);NON(ESTERR(1*A1)))

adapter les messages de saisie et alerte d'erreur




--
--
@+
;o)))