OVH Cloud OVH Cloud

Recherche de doublons

5 réponses
Avatar
bob
Bonjour

Oui, je sais! On l'a déjà fait! Malgré votre dévouement, je bute quand même
sur un problème de recherche de doublons.
Je suis sur Xl97.
Sur une plage d'une seule colonne (H4:H303), je voudrais créer une procédure
événementielle qui réagit à la touche 'Entrée'. A chaque saisie dans ma
plage, validée par la touche 'Entrée', il faudrait vérifier sur les cellules
du dessus qu'il n'y a pas de doublons.
Voilà le code que j'utilise pour l'instant

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'Permet de vérifier si un dossard n'est pas entré deux fois.
'Si c'est le cas, les 2 cellules identiques se colorent en rouge
'et la sélection reste sur la cellule contenant l'erreur.
Dim maZone As Range 'la zone d'entrée des dossards.
Dim cell As Range 'chaque cellule de maZone.
Dim maCellule As Variant 'la cellule active, avant de nettoyer les
couleurs.


If ActiveCell.Column = 8 Then
If Target.Address = "$H4$" Or Target.Address = "$H$5" Then
Exit Sub
Else
Set maZone = Range("H4:H303")
maCellule = ActiveCell.Address

aucune_couleur 'nettoyage des couleurs.
Range(maCellule).Select
For Each cell In maZone
If Target = cell And Target.Row <> cell.Row Then
Target.Interior.ColorIndex = 3
cell.Interior.ColorIndex = 3
ActiveCell.Offset(-1, 0).Activate
End If
Next cell
End If
Else: Exit Sub
End If
End Sub
Ce code fonctionne pas mal, mais il y a des défauts: il réagit à tous les
événements de la zone en question et supporte mal que l'on en efface les
données.
Je compte sur vous pour me donner des pistes d'amélioration.

Merci

--
Bob

5 réponses

Avatar
ru-th
Salut

plutot (toujours pas le chien) qu'un code, une donnée/validation ou une
Format/mise en forme conditionnelle devrait le faire
à partir de H4
la formule est =nb.si($H$4:H4;H4)>1

a+
rural thierry
Veaux et Broutards d'Anjou
Wicasa on kin nape yapi inahni yo (à l'essai)

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

Bonjour

Oui, je sais! On l'a déjà fait! Malgré votre dévouement, je bute quand
même

sur un problème de recherche de doublons.
Je suis sur Xl97.
Sur une plage d'une seule colonne (H4:H303), je voudrais créer une
procédure

événementielle qui réagit à la touche 'Entrée'. A chaque saisie dans ma
plage, validée par la touche 'Entrée', il faudrait vérifier sur les
cellules

du dessus qu'il n'y a pas de doublons.
Voilà le code que j'utilise pour l'instant

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'Permet de vérifier si un dossard n'est pas entré deux fois.
'Si c'est le cas, les 2 cellules identiques se colorent en rouge
'et la sélection reste sur la cellule contenant l'erreur.
Dim maZone As Range 'la zone d'entrée des dossards.
Dim cell As Range 'chaque cellule de maZone.
Dim maCellule As Variant 'la cellule active, avant de nettoyer les
couleurs.


If ActiveCell.Column = 8 Then
If Target.Address = "$H4$" Or Target.Address = "$H$5" Then
Exit Sub
Else
Set maZone = Range("H4:H303")
maCellule = ActiveCell.Address

aucune_couleur 'nettoyage des couleurs.
Range(maCellule).Select
For Each cell In maZone
If Target = cell And Target.Row <> cell.Row Then
Target.Interior.ColorIndex = 3
cell.Interior.ColorIndex = 3
ActiveCell.Offset(-1, 0).Activate
End If
Next cell
End If
Else: Exit Sub
End If
End Sub
Ce code fonctionne pas mal, mais il y a des défauts: il réagit à tous les
événements de la zone en question et supporte mal que l'on en efface les
données.
Je compte sur vous pour me donner des pistes d'amélioration.

Merci

--
Bob




Avatar
bob
Salut ru-th
si je mets ta formule dans une mise en forme conditionnelle,
1° toute la zone est colorée en rouge s'il n'y a pas de valeur à l'intérieur
2° si je reproduis la mise en forme vers le bas, cela ne recherche pas les
doublons
3° je n'ai peut être rien compris!!!!

si j'utilise une validation, je ne peux tout simplement plus entrer de
valeur dans la cellule en question ou alors je n'ai encore rien compris
(mais de toutes façons, je ne vois pas comment mes doublons pourraient se
colorer en rouge).

Merci quand même
--
Bob
"ru-th" a écrit dans le message de
news:
Salut

plutot (toujours pas le chien) qu'un code, une donnée/validation ou une
Format/mise en forme conditionnelle devrait le faire
à partir de H4
la formule est =nb.si($H$4:H4;H4)>1

a+
rural thierry
Veaux et Broutards d'Anjou
Wicasa on kin nape yapi inahni yo (à l'essai)

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

Bonjour

Oui, je sais! On l'a déjà fait! Malgré votre dévouement, je bute quand
même

sur un problème de recherche de doublons.
Je suis sur Xl97.
Sur une plage d'une seule colonne (H4:H303), je voudrais créer une
procédure

événementielle qui réagit à la touche 'Entrée'. A chaque saisie dans ma
plage, validée par la touche 'Entrée', il faudrait vérifier sur les
cellules

du dessus qu'il n'y a pas de doublons.
Voilà le code que j'utilise pour l'instant

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'Permet de vérifier si un dossard n'est pas entré deux fois.
'Si c'est le cas, les 2 cellules identiques se colorent en rouge
'et la sélection reste sur la cellule contenant l'erreur.
Dim maZone As Range 'la zone d'entrée des dossards.
Dim cell As Range 'chaque cellule de maZone.
Dim maCellule As Variant 'la cellule active, avant de nettoyer les
couleurs.


If ActiveCell.Column = 8 Then
If Target.Address = "$H4$" Or Target.Address = "$H$5" Then
Exit Sub
Else
Set maZone = Range("H4:H303")
maCellule = ActiveCell.Address

aucune_couleur 'nettoyage des couleurs.
Range(maCellule).Select
For Each cell In maZone
If Target = cell And Target.Row <> cell.Row Then
Target.Interior.ColorIndex = 3
cell.Interior.ColorIndex = 3
ActiveCell.Offset(-1, 0).Activate
End If
Next cell
End If
Else: Exit Sub
End If
End Sub
Ce code fonctionne pas mal, mais il y a des défauts: il réagit à tous
les


événements de la zone en question et supporte mal que l'on en efface les
données.
Je compte sur vous pour me donner des pistes d'amélioration.

Merci

--
Bob








Avatar
AV
Dans le module de la feuille :

Private Sub Worksheet_Change(ByVal zz As Excel.Range)
If Intersect(zz, [H4:H303]) Is Nothing Or zz = "" Then Exit Sub
Set C = [H4:H303].Find(zz(1), zz(1))
If C.Address <> zz(1).Address Then
MsgBox "Dossard déjà saisi en " _
& C.Address, vbCritical, "Doublon !"
Application.EnableEvents = False
zz = "": zz.Select
Application.EnableEvents = True
End If
End Sub

Si tu veux utiliser une simple Mise en Forme Conditionnelle :
Sélection H4:H303 --> MFC --> formule -->
=NB.SI($H$4:$H$303;H4)>1
--> motif

AV
Avatar
AV
Pour éviter un smilblick possible, rajouter une ligne en début de code :

Private Sub Worksheet_Change(ByVal zz As Excel.Range)
If Selection.Count > 1 Then Exit Sub
.....etc..............

AV
Avatar
bob
Merci j'essaye cette nouvelle proposition

--
Bob
"AV" a écrit dans le message de
news:bof9bd$69k$
Pour éviter un smilblick possible, rajouter une ligne en début de code :

Private Sub Worksheet_Change(ByVal zz As Excel.Range)
If Selection.Count > 1 Then Exit Sub
.....etc..............

AV