Bonjour,
La demande :
je souhaite vérifier et/ou empêcher la saisie de doublon dans les cellules
d'une colonne présent dans une colonne d'une autre feuille.
Mes recherches :
J'ai bien sûr cherché sur la toile et j'ai trouvé pas mal de choses s'y
rapportant, mais pas exactement ce que je voulais, forcément...
Les pistes :
Données/Validation/...=nb.si(A:A;A1)<2
Cela fonctionne bien pour les données d'une même colonne d'une même feuille.
Mais je n'y suis pas parvenu pour des données présentes dans une autre
colonne d'une autre feuille.
est-il possible d'utiler "nb.si" en se référant à des éléments d'une autre
feuille ?
Code VBA :
j'ai trouvé un super code :
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Colonne As Integer
Dim Adresse As String
'On sort si plus d'une cellule a été modifiée
If Target.Count > 1 Then Exit Sub
'On sort si la cellule modifiée est vide
If Target.Value = "" Then Exit Sub
'Définit la colonne à vérifier (1=Colonne A, 2=colonne B ...etc...)
Colonne = 1
'Vérifie si c'est la colonne cible a été modifiée
If Target.Column = Colonne Then
'Recherche si la nouvelle donnée existe déjà dans la colonne.
Adresse = Columns(Colonne).Find(What:=Target.Value, After:=Target.Offset(1,
0), LookAt:=xlWhole, _
SearchDirection:=xlNext).Address
'Si l'adresse de cellule trouvée ne correspond pas à la cellule modifiée,
cela
'signifie qu'il y a un doublon dans la colonne.
If Adresse <> Target.Address Then
MsgBox "La donnée '" & Target & "' existe déjà dans la cellule " & Adresse
'Suppression de la donnée
Target.Value = ""
Target.Select
End If
End If
End Sub
Je n'ai pas réussi à le modifier pour changer l'adresse de la recherche avec
la propriété Worksheet ?
Un coup de main serait le bien venu
Merci d'avance
PS : j'ai déjà posté cette question samedi sur le forum de CodeS-SourceS.com
parceque je n'arrivais plus à accéder à ce forum bien plus "familial"... (pas
si facile d'y retourner quand on plus l'adresse en favori !!!???)
"Mais je n'y suis pas parvenu pour des données présentes dans une autre colonne d'une autre feuille."
Tiens moi informé !!!!!
FdeCourt
Salut, Pourquoi passer par une macro ? Si tu ne souhaite pas pouvoir saisir dans la colonne A de Feuil1 une valeur qui est déjà présente dans la colonne A de Feuil2, alors - Créer un nom que tu appelera "data" : ÞCALER(Feuil2!$A$1;;;NBVAL (Feuil2!$A:$A)) - Dans la cellule A1 de Feuil1, avec outils>Validation, tu choisis personnalisé, puis cette formule : =NB.SI(data;A1)=0
Et voilà !
Cordialement,
F.
Salut,
Pourquoi passer par une macro ?
Si tu ne souhaite pas pouvoir saisir dans la colonne A de Feuil1 une
valeur qui est déjà présente dans la colonne A de Feuil2, alors
- Créer un nom que tu appelera "data" : =DECALER(Feuil2!$A$1;;;NBVAL
(Feuil2!$A:$A))
- Dans la cellule A1 de Feuil1, avec outils>Validation, tu choisis
personnalisé, puis cette formule : =NB.SI(data;A1)=0
Salut, Pourquoi passer par une macro ? Si tu ne souhaite pas pouvoir saisir dans la colonne A de Feuil1 une valeur qui est déjà présente dans la colonne A de Feuil2, alors - Créer un nom que tu appelera "data" : ÞCALER(Feuil2!$A$1;;;NBVAL (Feuil2!$A:$A)) - Dans la cellule A1 de Feuil1, avec outils>Validation, tu choisis personnalisé, puis cette formule : =NB.SI(data;A1)=0
Et voilà !
Cordialement,
F.
FFO
Rebonjour à toi
Dans cette ligne de code tu n'as pas tout mis à jour concernant le nom te ton onglet :
Ce bout de code reste à actualiser : After:=Sheets("MaFeuille")
Mettre : After:=Sheets("Feuil2").
Celà devrait mieux fonctionner
Dis moi !!!!!
JMM21
Bonjour,
"FdeCourt" a posé une question :
Pourquoi passer par une macro ?
Je ne suis pas un "accro" de la macro, d'ailleurs au début de mon post la piste "Données/Validation" avait été évoquée. Sauf que j'ignorais l'astuce de l'affectation d'un nom avec la formule "décaler..."
Un grand merci pour ta solution qui fonctionne parfaitement.
Bonne soirée Cordialement -- [Jmm21] ☺♂
Bonjour,
"FdeCourt" a posé une question :
Pourquoi passer par une macro ?
Je ne suis pas un "accro" de la macro, d'ailleurs au début de mon post la
piste "Données/Validation" avait été évoquée. Sauf que j'ignorais l'astuce de
l'affectation d'un nom avec la formule "décaler..."
Un grand merci pour ta solution qui fonctionne parfaitement.
Je ne suis pas un "accro" de la macro, d'ailleurs au début de mon post la piste "Données/Validation" avait été évoquée. Sauf que j'ignorais l'astuce de l'affectation d'un nom avec la formule "décaler..."
Un grand merci pour ta solution qui fonctionne parfaitement.
Bonne soirée Cordialement -- [Jmm21] ☺♂
JMM21
Effectivement FFO, j'ai oublié... (manque de concentration)
Ce bout de code reste à actualiser : After:=Sheets("MaFeuille")
Celà devrait mieux fonctionner Dis moi !!!!!
oui !!! et non... je m'explique : Effectivement le code va bien à la bonne adresse pour vérifier la présence d'un doublon. Sauf que la macro se plante quand il n'y a pas de doublon et elle ne fonctionne pas avec 1 !!!???
Fdecourt m'a proposé une autre solution alternative qui fonctionne. Le plus de la macro étant l'effacement de la donnée et c'est aussi inétressant pour l'aspect pédagogique en VB.
Si tu as le temps...
merci et bonne soirée Cordialement
-- [Jmm21] ☺♂
Effectivement FFO, j'ai oublié... (manque de concentration)
Ce bout de code reste à actualiser : After:=Sheets("MaFeuille")
Celà devrait mieux fonctionner Dis moi !!!!!
oui !!!
et non...
je m'explique :
Effectivement le code va bien à la bonne adresse pour vérifier la présence
d'un doublon.
Sauf que la macro se plante quand il n'y a pas de doublon et elle ne
fonctionne pas avec 1 !!!???
Fdecourt m'a proposé une autre solution alternative qui fonctionne.
Le plus de la macro étant l'effacement de la donnée et c'est aussi
inétressant pour l'aspect pédagogique en VB.
Effectivement FFO, j'ai oublié... (manque de concentration)
Ce bout de code reste à actualiser : After:=Sheets("MaFeuille")
Celà devrait mieux fonctionner Dis moi !!!!!
oui !!! et non... je m'explique : Effectivement le code va bien à la bonne adresse pour vérifier la présence d'un doublon. Sauf que la macro se plante quand il n'y a pas de doublon et elle ne fonctionne pas avec 1 !!!???
Fdecourt m'a proposé une autre solution alternative qui fonctionne. Le plus de la macro étant l'effacement de la donnée et c'est aussi inétressant pour l'aspect pédagogique en VB.
Si tu as le temps...
merci et bonne soirée Cordialement
-- [Jmm21] ☺♂
FFO
Rebonjour à toi
Il suffisait de rajouter cette ligne en début de code :
On Error Resume Next
Et le tour était joué
Je me suis cantonné à te donner la solution pour rechercher une valeur dans une autre feuille mais pas attaché au fonctionnement global de ta macro
Fais des essais avec cette ligne par exemple juste avant la recherche dans la Feuil2 ainsi :
On Error Resume Next Adresse = Sheets("Feuil2").Columns(Colonne).Find(What:=Target.Value, _ After:=Sheets("Feuil2").Range(Target.Address).Offset(1, 0), LookAt:=xlWhole, _ SearchDirection:=xlNext).Address
Donnes moi des nouvelles !!!!!
Rebonjour à toi
Il suffisait de rajouter cette ligne en début de code :
On Error Resume Next
Et le tour était joué
Je me suis cantonné à te donner la solution pour rechercher une valeur dans
une autre feuille mais pas attaché au fonctionnement global de ta macro
Fais des essais avec cette ligne par exemple juste avant la recherche dans
la Feuil2 ainsi :
On Error Resume Next
Adresse = Sheets("Feuil2").Columns(Colonne).Find(What:=Target.Value, _
After:=Sheets("Feuil2").Range(Target.Address).Offset(1, 0),
LookAt:=xlWhole, _
SearchDirection:=xlNext).Address