Recherche doublons sur une feuille excel

Résolu
Bonjour,
Je 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

Résumé de la discussion

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.

Bobot (l’IA à votre service)
  1. 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.
    0
    1. 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)
      0
      1. 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.
        0
        1. Bonjour MIKE,
          Merci bien pour votre soutien, je vais tester le nouveau code et je vous tiens au courant.
          Merci d'avance.
          Cordialement.
          0
          1. 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
            0
            1. 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.
              0
              1. 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
                0
                1. 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
                  0
                  1. 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.
                    0
                    1. 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.
                      0
                      1. 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
                        0
                        1. 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
                          0
                          1. 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
                            0
                            1. 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
                              0
                              1. 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.
                                0
                                1. 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.
                                  0
                                  1. 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
                                    0
                                    1. 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
                                      0
                                      1. 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
                                        0
                                        • 1
                                        • 2
                                        • 3