Recherche doublons sur une feuille excel
RésoluJe vous prie de bien vouloir m'aider sur un souci concernant un fichier excel 2003 dont une feuille contient des champs et une colonne qui contient des numeros. Je voudrai savoir au moment de la saisie du numero, il me donne si existe les enregistrements de ce numero pour eviter de le retaper et par un simple copie/coller ses donnees peut faire çà.
N.B: Ce travail peut se faire dans une autre feuille
Je vous mets ci joint mon fichier pour bien illustrer mon souci.
https://www.cjoint.com/?dxkShIjZvF
Merci d'avance pour toute reponse.
Cordialement
50 réponses
Le besoin est d’empêcher la saisie d’un numéro déjà présent dans une feuille Excel 2003 en vérifiant l’existence du code et en évitant de le retaper, éventuellement via une autre feuille. La solution la plus répandue consiste à faire apparaître en rouge les duplications dans la colonne A et à ajouter une colonne en bout de tableau qui compte le nombre d’occurrences du code. On peut aussi recourir à une validation des données pour bloquer directement l’entrée d’un doublon, ou bien employer une macro VBA (par exemple une routine Worksheet_Change) pour détecter les doublons et mettre en évidence les cellules associées. Certaines propositions élargissent l’objectif en prévoyant une feuille de consultation pour filtrer par catégorie ou par période et, le cas échéant, générer un classeur distinct par année.
-
Bonjour MIKE,
Esperant que vous passerez des belles journees de vacances.
Merci bien pour votre attention et soutien.
J'ai constate une remarque à propos de mon fichier, il y a des doublants des NumDos par rapport à la colonne Cat je m'explique : j'ai un NumDos qui a deux donnees de la colonne "Cat" càd j'ai deux clients qui ont les memes NumDos mais n'ont pas les memes Cat.
Est ce que c'est possible on tient compte de la colonne Cat en liaison avec NumDos ?
Merci d'avance et bonne vacance.
Cordialement. -
Re,
Je vais prendre quelques jours de vacances, mais je ne t'oublie pas.
Pour récupérer les données sur le fichier de l'année précédente, est il possible que les deux fichiers soient ouverts (le nouveau et l'ancien)
-
Bonjour MIKE,
Je vous remercie infinement pour vos efforts et soutiens fournis à moi.
Je suis tres heureux de voir ma base operationnelle 100%. Le seul souci, si possible , d'une part, je voudrai pour l'annee prochaine avoir un nouveau classeur nomme Production 2011 et qui est lie à l'ancien fichier "Production 2010" comme çà je ne serai pas oblige de saisir les donnees qui existent dejà dans le fichier "Production 2010" lorsque je saisie un NumDos repete.
D'autre part, pour la feuille search je voudrai la consacree pour la consultation des donnees soit par Num Dos soit par Nom et me donne les resultats.
Par exemple : je veux chercher un client par Num Dos ou bien Nom ou NumPol pour m'afficher tous les donnees qui existent.
Merci d'avance
Cordialement. -
Bonjour MIKE,
Merci bien pour votre soutien, je vais tester le nouveau code et je vous tiens au courant.
Merci d'avance.
Cordialement. -
Re,
Remplace le code par celui ci et tiens moi au courant
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo erreur
erreur:
If Not Intersect(Range("A2:A3000"), Target) Is Nothing And Target.Count = 1 Then
For Each c In Range("A2:A3000")
If UCase(c.Value) = UCase(Target.Value) And c.Row <> Target.Row And c.Value <> Empty Then
Range(Range(c.Address).Offset(0, 1), Range(c.Address).Offset(0, 14)).Copy
Target.Offset(0, 1).Select
ActiveSheet.Paste
Target.Offset(1, 0).Select
Exit Sub
End If
Next c
End If
If Not Intersect(Range("J2:J3000"), Target) Is Nothing And Target.Count = 1 Then
For Each c In Range("J2:J3000")
If UCase(c.Value) = UCase(Target.Value) And c.Row <> Target.Row And c.Value <> Empty Then
Range(Range(c.Address).Offset(0, 1), Range(c.Address).Offset(0, 2)).Copy
Target.Offset(0, 1).Select
ActiveSheet.Paste
Target.Offset(1, 0).Select
Exit Sub
End If
Next c
End If
Application.CutCopyMode = False
sortie:
Exit Sub
End Sub
-
Re MIKE,
Merci bien pour votre comprehension,
il y a un probleme lorsque je saisie un NumDos qui a été dejà saisie il m'affiche les donnees correctement et parfois non, il decale les donnees d'une ligne avant.
Donc j'ai decide de vous envoyer le fichier comme çà vous pouvez faire des essais de saise pour voir bien où se trouve le probleme car moi je suis novice en programmation.
- Pour la 629 c'est moi qui a fait çà c'est pas un probleme.
- Le souci entre la ligne 725 et 726 : j'ai saisie la ligne 725 normalement et lorsque je passes à la ligne 726 j'ai saisie un NumDos qui a déjà saisie avant il m'affiche les donnees dans la ligne 725 avec desordre et decalage des cellules.
Merci d'avance pour votre aide et je compte sur vous.
Cordialement. -
Re,
Excuse mon retard, en fin de semaine je suis pas mal pris, j'ai récupéré ton fichier ou il y a des lignes en jaune (la 629 et 725 et 726), peux tu me dire ce qui se passe -
Bonjour MIKE,
J'ai un probleme dans ma base de donnee concernant votre code, si possible je vous transmis mon fichier afin de me resoudre ce souci et merci d'avance.
https://www.cjoint.com/?ednskZc5qU
Je suis vraiment desole si je vous derange de trop question.
Cordialement -
Bonjour MIKE,
Excusez moi de vous deranger tjrs.
Je vous prie de bien me donner la suite de ce sujet ou bien je marque comme resolu.
J'attends votre reponse, je compte sur vous.
Merci d'avance.
Cordialement. -
Bonjour MiKE,
Felicitation et je vous remercie bien pour vos efforts.
A propos la question 3 : je voudrai utiliser une macro de recherche soit par Nom ou Num Pol ou Num Dos et m'affiche le resultat de la recherche.
Question 4 :C'est exactement ce que vous avez ecris "chaque année à partir d'un fichier vierge appliquer la macro que nous avons créé pour aller chercher les données sur le classeur de l'année précédente".
Cordialement. -
Re,
Regardes le fichier joint et répond clairement sur la question 3 et 4
https://www.cjoint.com/?dClKFTLQ8O
-
Re Mike,
Merci pour votre attention et Bon week-end.
Pour la question 4, je voudrai que le code soit lier aussi pour chaque nouveau classeur creer càd pour 2011,2012 ...car ce classeur Production est destine pour cette annee 2010.
Cordialement -
Re,
Dans le Week-end je te fais un topo, en grande partie tu peux traiter les deux première questions avec un filtre
La question 3 avec une sorte de RECHERCHEV multicritère dont la formule s'écrit différemment
Pour la question 4 il est possible d'écrire un code, mais un code est fait pour effectuer des actions répétitives ce qui ne semble pas être le cas donc j'opterais par une création de classeur et un copier ou couper/coller
-
Re Mike,
Merci pour votre reponse,
Je voudrai exploiter ma base comme suit :
1- Faire une consultation par la colonne "Cat" càd afficher ma base qui ont par exemple A comme donnee.
2- Faire une consultation par un interval de date càd j'entre deux dates soit de la colonne Journee ou bien Effet ou Ech pour me donner les donnees de ma base plus les totaux des colonnes (PT,Com et M.regler)
3- Faire un bouton de recherche par critere (Nom, Prenom, NumPol,Num Dos)
J'aimerai que ce traitement se fait dans une nouvelle feuille du meme classeur (Production) nommee Consulatation
4- Je voudrai que chaque annee (2010, 2011, 2012 ...) soit dans un classeur.
Cordialement -
Re,
Expliques ce que tu veux faire pour voir si c'est une suite logique à la discussion ou si c'est un sujet différent -
Bonjour M. MIKE,
Je vous remercie infinement pour votre soutien à moi, ainsi que M.VAUCLUSE,
J'ai reçu votre fichier c'est operationnel 100%.
MIKE j'ai quelque proposition cernant mon fichier pour bien l'exploiter, est ce que je declare que ce sujet est maintenant resolu et on continue la discution de ce sujet où bien je mets le statut de cette discution en resolu et je pose une nouvelle question concernant ce fichier car j'ai besoin à faire des trucs dans ma base.
Merci d'avance pour votre aide et soutien.
Cordialement. -
J'ai rajouté une ligne, au code afin que la cellule se positionne à la ligne inférieure pour préparer une nouvelle saisie
Rectifies le code ou copies celui ci
N'oublies pas de mettre le statut de la discussion en résolu, en haut de la discussion
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo erreur
erreur:
If Not Intersect(Range("A2:A1000"), Target) Is Nothing And Target.Count = 1 Then
For Each c In Range("A2:A1000")
If UCase(c.Value) = UCase(Target.Value) And c.Row <> Target.Row And c.Value <> Empty Then
Range(Range(c.Address).Offset(0, 1), Range(c.Address).Offset(0, 14)).Copy
ActiveCell.Offset(-1, 1).Select
ActiveSheet.Paste
ActiveCell.Offset(1, -1).Select
Exit Sub
End If
Next c
End If
If Not Intersect(Range("J2:J1000"), Target) Is Nothing And Target.Count = 1 Then
For Each c In Range("J2:J1000")
If UCase(c.Value) = UCase(Target.Value) And c.Row <> Target.Row And c.Value <> Empty Then
Range(Range(c.Address).Offset(0, 1), Range(c.Address).Offset(0, 2)).Copy
ActiveCell.Offset(-1, 1).Select
ActiveSheet.Paste
ActiveCell.Offset(1, -1).Select
Exit Sub
End If
Next c
End If
Application.CutCopyMode = False
sortie:
Exit Sub
End Sub
A+
Mike-31
Une période d'échec est un moment rêvé pour semer les graines du savoir. -
Re,
Merci bien MIKE, Votre travail est tres efficace.
Je vous tiens au courant des nouvelles pour l'exploitation de cette de donnee base, comme je vous dis au dernier message.
Abientôt
Cordialement -
Re,
Alors si le code est bon, remplaces le par ce dernier ou j'ai inclu un détecteur d'erreur dans le cas ou tu serait amené à supprimer ou effacer des lignes
Pour le reste, j'ai assez peu de temps mais dis toujours
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo erreur
erreur:
If Not Intersect(Range("A2:A1000"), Target) Is Nothing And Target.Count = 1 Then
For Each c In Range("A2:A1000")
If UCase(c.Value) = UCase(Target.Value) And c.Row <> Target.Row And c.Value <> Empty Then
Range(Range(c.Address).Offset(0, 1), Range(c.Address).Offset(0, 14)).Copy
ActiveCell.Offset(-1, 1).Select
ActiveSheet.Paste
Exit Sub
End If
Next c
End If
If Not Intersect(Range("J2:J1000"), Target) Is Nothing And Target.Count = 1 Then
For Each c In Range("J2:J1000")
If UCase(c.Value) = UCase(Target.Value) And c.Row <> Target.Row And c.Value <> Empty Then
Range(Range(c.Address).Offset(0, 1), Range(c.Address).Offset(0, 2)).Copy
ActiveCell.Offset(-1, 1).Select
ActiveSheet.Paste
Exit Sub
End If
Next c
End If
Application.CutCopyMode = False
sortie:
Exit Sub
ActiveCell.Offset(1, -1).Select
End Sub
-
Re M. MIKE,
C'est gentil de votre part, effectivement j'ai la modification et j'ai oublie de la changer, Votre fichier est operationnel 100%.
Merci bien,
M. MIKE j'aimerai exploiter cette base pour faire des consultations, est ce que vous pouvez m'aider ?
Cordialement
- 1
- 2
- 3