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

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

17 réponses
Avatar
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

7 réponses

1 2
Avatar
Nemroth
Après essai je confirme.
Si on entre une valeur au-dessus d'une valeur déjà entrée, il n'y a pas
d'alerte, alors qu'avec le code de LSteph c'est OK.
Bravo LSteph.

LSteph a écrit :
Bonjour FFO,

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

Cordialement.

--
lSteph

On 16 juil, 17:03, FFO wrote:
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 !!!!





Avatar
Nemroth
Vu ce qui a été dit plus haut, je doit dire que mon coeur ne balance
plus. C'est le Code de LSteph qui fonctionne le mieux pour ce que je
veux faire. Merci à FFO d'avoir ouvert la voie.

Nemroth a écrit :
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 wrote:
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







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



Ca ne tient pas non plus avec B1=x et B2=x ..... si on supprime la colonne A
Etc..etc...
On trouvera toujours un truc qui fait que...

Ne pas connaitre Données > Validation et faire dans la proc évènementielle, est
un "contre-sens" (mise de la charrue avant les boeufs)

Etc
Avatar
FFO
Rebonjour à toi

Effectivement je n'ai pas considéré tous les cas

Bravo à LSteph !!!!

Je me hazarde malgrés tout à te proposer mon code modifié ainsi :

Private Sub Worksheet_Change(ByVal Target As Range)
If Selection.Count = 1 Then
If Target.Column = 1 And Target <> "" Then
Ligne = Columns("A:A").Find(What:=Target, After:=Target, LookIn:=xlValues, _
LookAt:=xlWhole).Row
If Ligne <> Target.Row Then
MsgBox ("Donnée déjà saisie")
Target = ""
Target.Activate
End If
End If
Else
Application.EnableEvents = False
MsgBox ("Une saisie à la fois SVP")
Selection.Clear
Application.EnableEvents = True
End If
End Sub

C'est pour le Fun !!!!!!

Il fonctionne normalement pour toutes les situations

Si tu l'essaies donne moi ton avis !!!!!!
Avatar
isabelle
bonjour Nemroth,

=NB.SI(A:A;A1)<>1


isabelle



Nemroth a écrit :
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





Avatar
Nemroth
Je confirme FFO, tu a regagné tous tes galons. Ca fonctionne impécable.
Merci à vous tous.

FFO a écrit :
Rebonjour à toi

Effectivement je n'ai pas considéré tous les cas

Bravo à LSteph !!!!

Je me hazarde malgrés tout à te proposer mon code modifié ainsi :

Private Sub Worksheet_Change(ByVal Target As Range)
If Selection.Count = 1 Then
If Target.Column = 1 And Target <> "" Then
Ligne = Columns("A:A").Find(What:=Target, After:=Target, LookIn:=xlValues, _
LookAt:=xlWhole).Row
If Ligne <> Target.Row Then
MsgBox ("Donnée déjà saisie")
Target = ""
Target.Activate
End If
End If
Else
Application.EnableEvents = False
MsgBox ("Une saisie à la fois SVP")
Selection.Clear
Application.EnableEvents = True
End If
End Sub

C'est pour le Fun !!!!!!

Il fonctionne normalement pour toutes les situations

Si tu l'essaies donne moi ton avis !!!!!!



Avatar
Nemroth
Merci Isabelle. La solution est simple, effectivement. Mais je pense que
je vais opter pour la solution macro. Merci à toi.

isabelle a écrit :
bonjour Nemroth,

=NB.SI(A:A;A1)<>1


isabelle



Nemroth a écrit :
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







1 2