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 !!!!
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 <F...@discussions.microsoft.com> 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
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 !!!!
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
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 <nospam.nemr...@free.fr> 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.
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
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
>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)
>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
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 !!!!!!
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
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 !!!!!!
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
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
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
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 !!!!!!
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
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 !!!!!!
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
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
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