[VBA] Comment s'assurer que valeur entrée dans colonne est unique

Le
Nemroth
Bonjour à toutes et à tous.

Je souhaiterais faire la chose suivante en VBA :

Lorsque l'utilisateur entre une donnée dans la colonne A, le programme
vérifie si la donnée est unique dans la colonne (dès qu'il a quitté la
cellule)

Si ce n'est pas le cas, un message s'affiche l'informant que la donnée
est déjà utilisée et la cellule qu'il a quitté passe à nouveau en mode
édition.

Si la valeur est unique, rien ne se passe.

Par avance merci
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
FFO
Le #19769081
Salut à toi

Mets dans le VBA de la feuille ce code :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target <> "" Then
Ligne = Columns("A:A").Find(What:=Target, After:=Range("A1"),
LookIn:=xlValues, _
LookAt:=xlWhole).Row
If Ligne <> Target.Row Then
MsgBox ("Donnée déjà saisie")
Target = ""
Target.Activate
End If
End If
End Sub

Celà devrait convenir

Dis moi !!!!
Nemroth
Le #19769211
Je ne sais pas pourquoi, mais les lignes

Ligne = Columns("A:A").Find(What:=Target, After:=Range("A1"),
LookIn:=xlValues, _
LookAt:=xlWhole).Row

sont en rouge dans l'éditeur et lorsque j'insère une valeur, le débogeur
se bloque sur la première de ces lignes. Je suis sous Excel 2002.

FFO a écrit :
Salut à toi

Mets dans le VBA de la feuille ce code :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target <> "" Then
Ligne = Columns("A:A").Find(What:=Target, After:=Range("A1"),
LookIn:=xlValues, _
LookAt:=xlWhole).Row
If Ligne <> Target.Row Then
MsgBox ("Donnée déjà saisie")
Target = ""
Target.Activate
End If
End If
End Sub

Celà devrait convenir

Dis moi !!!!



Nemroth
Le #19769201
Autant pour moi !!! Ces trois lignes n'en faisaient qu'une !!!
Depuis ça fonctionne super bien.
merci beaucoup FFO

Nemroth a écrit :
Je ne sais pas pourquoi, mais les lignes

Ligne = Columns("A:A").Find(What:=Target, After:=Range("A1"),
LookIn:=xlValues, _
LookAt:=xlWhole).Row

sont en rouge dans l'éditeur et lorsque j'insère une valeur, le débogeur
se bloque sur la première de ces lignes. Je suis sous Excel 2002.

FFO a écrit :
Salut à toi

Mets dans le VBA de la feuille ce code :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target <> "" Then
Ligne = Columns("A:A").Find(What:=Target, After:=Range("A1"),
LookIn:=xlValues, _
LookAt:=xlWhole).Row
If Ligne <> Target.Row Then
MsgBox ("Donnée déjà saisie")
Target = ""
Target.Activate
End If
End If
End Sub

Celà devrait convenir

Dis moi !!!!





LSteph
Le #19769351
Bonjour,

Dans le code de la feuille (prévoit l'entrée ou collage sur plusieurs
cellules):

Private Sub Worksheet_Change(ByVal Target As Range)
Dim isect As Range, i As Long
Set isect = Intersect([a:a], Target)
If isect Is Nothing Then Exit Sub
With isect
For i = 1 To .Cells.Count
If .Cells(i) <> "" Then
If WorksheetFunction.CountIf([a1:a65536], .Cells(i).Value) > 1 Then
Application.EnableEvents = False
isect.ClearContents
MsgBox "entrée multiple"
.Cells(i).Activate
Application.EnableEvents = True
Exit For
End If
End If
Next
End With
End Sub

'lSteph

On 16 juil, 16:45, Nemroth
Bonjour à toutes et à tous.

Je souhaiterais faire la chose suivante en VBA :

Lorsque l'utilisateur entre une donnée dans la colonne A, le programme
vérifie si la donnée est unique dans la colonne (dès qu'il a quitt é la
cellule)

Si ce n'est pas le cas, un message s'affiche l'informant que la donnée
est déjà utilisée et la cellule qu'il a quitté passe à nouveau en mode
édition.

Si la valeur est unique, rien ne se passe.

Par avance merci


FFO
Le #19769341
Rebonjour à toi

Mets ces lignes bout à bout :

Ligne = Columns("A:A").Find(What:=Target, After:=Range("A1"),
LookIn:=xlValues, _

en une seule

Pour celà mets le curseur en bout de la première et fait un "Suppr"

Celà devrait convenir

Dis moi !!!!!
Caetera
Le #19769471
> Je souhaiterais faire la chose suivante en VBA :

Lorsque l'utilisateur entre une donnée dans la colonne A, le programme vérifie
si la donnée est unique dans la colonne (dès qu'il a quitté la cellule)



**********
Quel intérêt d'utiliser le vba et de plomber par là même le Worksheet_Change ?
Connais-tu Données > Validation .....?
Exemple....
=NB.SI(A:A;A1)=1


Etc
Nemroth
Le #19769461
Merci LSteph.

Votre code fonctionne très bien également. Entre les deux mon coeur
balance !!!

Merci beaucoup

LSteph a écrit :
Bonjour,

Dans le code de la feuille (prévoit l'entrée ou collage sur plusieurs
cellules):

Private Sub Worksheet_Change(ByVal Target As Range)
Dim isect As Range, i As Long
Set isect = Intersect([a:a], Target)
If isect Is Nothing Then Exit Sub
With isect
For i = 1 To .Cells.Count
If .Cells(i) <> "" Then
If WorksheetFunction.CountIf([a1:a65536], .Cells(i).Value) > 1 Then
Application.EnableEvents = False
isect.ClearContents
MsgBox "entrée multiple"
.Cells(i).Activate
Application.EnableEvents = True
Exit For
End If
End If
Next
End With
End Sub

'lSteph

On 16 juil, 16:45, Nemroth
Bonjour à toutes et à tous.

Je souhaiterais faire la chose suivante en VBA :

Lorsque l'utilisateur entre une donnée dans la colonne A, le programme
vérifie si la donnée est unique dans la colonne (dès qu'il a quitté la
cellule)

Si ce n'est pas le cas, un message s'affiche l'informant que la donnée
est déjà utilisée et la cellule qu'il a quitté passe à nouveau en mode
édition.

Si la valeur est unique, rien ne se passe.

Par avance merci





LSteph
Le #19769451
Bonjour FFO,

Si j'entre qqchose dans trois cellules..??? Erreur13 mais ca rentre qd
même

Cordialement.

--
lSteph

On 16 juil, 17:03, FFO
Salut à toi

Mets dans le VBA de la feuille ce code :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target <> "" Then
Ligne = Columns("A:A").Find(What:=Target, After:=Range("A1"),
LookIn:=xlValues, _
LookAt:=xlWhole).Row
If Ligne <> Target.Row Then
MsgBox ("Donnée déjà saisie")
Target = ""
Target.Activate
End If
End If
End Sub

Celà devrait convenir

Dis moi !!!!


LSteph
Le #19769541
Re,

Cela aurait été mieux et la 1ère idée qui viendrait mais ça ne t ient
pas sitot que l'on
fait un coller.

Cordialement.

--
lSteph

On 16 juil, 17:38, "Caetera"
> Je souhaiterais faire la chose suivante en VBA :

> Lorsque l'utilisateur entre une donnée dans la colonne A, le programm e vérifie
> si la donnée est unique dans la colonne (dès qu'il a quitté la ce llule)

**********
Quel intérêt d'utiliser le vba et de plomber par là même le Works heet_Change ?
Connais-tu Données > Validation .....?
Exemple....
=NB.SI(A:A;A1)=1

Etc


Nemroth
Le #19769531
Je ne connaissais pas Données > Validation
J'ai essayé, et j'ai un message d'alerte quand les valeurs sont
différentes alors que je souhaite le contraire.
Peut-être n'ais-je pas fait ce/comme il fallait.
Ceci-dit, dans la mesure où il va s'agir d'une feuille de données, avec
les intitulés en ligne 1 et les enregistrements sur les lignes
suivantes, ça ne me pose pas de problème d'utiliser le Worksheet_Change
car il n'y aura pas d'autre VBA dans la feuille.

Caetera a écrit :
Je souhaiterais faire la chose suivante en VBA :

Lorsque l'utilisateur entre une donnée dans la colonne A, le programme vérifie
si la donnée est unique dans la colonne (dès qu'il a quitté la cellule)



**********
Quel intérêt d'utiliser le vba et de plomber par là même le Worksheet_Change ?
Connais-tu Données > Validation .....?
Exemple....
=NB.SI(A:A;A1)=1


Etc




Publicité
Poster une réponse
Anonyme