IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Recherche de doublons dans 2 colonnes de 2 classeurs


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Femme Profil pro
    Assistante
    Inscrit en
    Février 2016
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Assistante

    Informations forums :
    Inscription : Février 2016
    Messages : 156
    Points : 51
    Points
    51
    Par défaut Recherche de doublons dans 2 colonnes de 2 classeurs
    Bonjour à tous,

    Je souhaiterais connaitre la macro qui permet de trouver les doublons de deux colonnes dans deux classeurs (colonnes B et F dans le premier classeur, colonnes D et H dans le second classeur).

    Une fois les doublons trouvés, pouvoir remplir la cellule G de la même ligne du premier classeur, remplir la cellule Q de la même ligne du second classeur, à l'aide d'une valeur d'une textbox de mon userform. (mon userform se trouve dans le premier classeur).

    Je ne trouve rien de ce genre sur internet, sauf la suppression de doublons ou colorisation

    Merci à tous pour votre aide.

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Avec les éléments que tu décris, ton problème semble possible à résoudre simplement avec des NB.SI.ENS()
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Membre du Club
    Femme Profil pro
    Assistante
    Inscrit en
    Février 2016
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Assistante

    Informations forums :
    Inscription : Février 2016
    Messages : 156
    Points : 51
    Points
    51
    Par défaut
    Comment je peux, avec une formule, remplir mes cellules G et Q à l'aide d'une textbox d'un userform ?

  4. #4
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Est-ce que ce problème s'inscrit dans le cadre d'un développement plus vaste ou ta macro va-t-elle se limiter à ce que tu décris ici ?
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  5. #5
    Membre du Club
    Femme Profil pro
    Assistante
    Inscrit en
    Février 2016
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Assistante

    Informations forums :
    Inscription : Février 2016
    Messages : 156
    Points : 51
    Points
    51
    Par défaut
    Dans un premier temps, cette macro ne se développera pas plus. Elle va me permettre de continuer mon projet. Mais là, ça me bloque !

    A savoir que dans ma textbox, c'est du texte et non du numérique qui s'inscrit.

    Je ne cherche pas non plus à compter le nombre de doublons.

    De plus, je sais d'ores et déjà qu'il n'y aura que un doublon dans chaque classeur. Il faut "simplement" que la macro les trouve pour que je puisse développer mes autres macros.

    Merci

  6. #6
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Mél3790 Voir le message
    Dans un premier temps, cette macro ne se développera pas plus. Elle va me permettre de continuer mon projet. Mais là, ça me bloque !
    Dans ce cas, je ne comprends pas pourquoi tu te compliques la vie avec un UserForm ?
    Tu mets la valeur en question dans une cellule de ton tableau et tu t'y réfères pour renvoyer la cellule avec la formule.

    Il suffit que tu utilises une fonction SI qui vérifies avec une fonction NB.SI.ENS si les valeurs de la ligne courrante existe dans l'autre tableau et, si c'est le cas, renvoyer la valeurs dont on parlait ci-dessus.

    Visiblement, tu ne connais pas trop le VBA. Pour garder le contrôle de ton projet, je te conseille donc, autant que possible, d'en rester à l'utilisation de fonctions de feuilles de calcul.
    Surtout que, dans ce cas précis, ce que tu cherches à faire est assez simple à réaliser avec des formules.

    A savoir que dans ma textbox, c'est du texte et non du numérique qui s'inscrit.
    Une Textbox, par définition, renvoie toujours du texte, même si ce texte est composé de chiffres.

    Je ne cherche pas non plus à compter le nombre de doublons.
    L'utilisation de la fonction NB.SI.ENS ne compterait pas le nombre de doublons mais compterait le nombre d'occurrence dans l'autre fichier des éléments de la ligne courante. Si ça renvoie 0, c'est que les éléments de la ligne courante n'existent pas dans l'autre tableau. Donc qu'ils ne sont pas des doublons.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  7. #7
    Membre du Club
    Femme Profil pro
    Assistante
    Inscrit en
    Février 2016
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Assistante

    Informations forums :
    Inscription : Février 2016
    Messages : 156
    Points : 51
    Points
    51
    Par défaut
    Je ne suis pas une experte en VBA, mais pas une novice non plus.
    Je vais expliquer mon projet de A à Z pour être la plus explicite possible, mais en faisant court pour aller du début jusque mon problème.

    Ce projet a pour but de programmer des formations à des salariés, de suivre le budget etc ...

    Mon premier classeur s'appel PROGRAMMATION, la feuille où vont s'inscrirent les valeurs se nomme FORMATIONS.
    Mon second classeur s'appel SUIVI PLAN DE FORMATION, la feuille où se trouvent les valeurs se nomme SUIVI.

    Dans la feuille FORMATIONS de mon premier classeur se trouve un tableau avec une quinzaine de colonnes qui va se remplir grâce à
    un Userform. Ce Userform comporte des combobox(une avec une liste de personne, l'autre avec une liste d'intitulé de formation),
    des listbox, des textbox etc ...
    Une fois que ces éléments sont renseignés, un bouton "Ajouter" permet de transférer toutes les valeurs dans une nouvelle ligne du tableau en ajoutant
    au bout de celle-ci un numéro unique.

    Une fois la ligne créée ma listbox1 s'actualise de façon à faire apparaître cette ligne. Et lorsque je clique dessus, les combobox,
    les textbox etc... récupèrent les valeurs des cellules avec la méthode Activecell.offset.

    Jusque là, ça roule !

    Ensuite, si je retourne dans mon Userform, je vais chercher par exemple Monsieur DUPONT Lionnel dans ma combobox.
    La listbox1 va afficher les lignes où Monsieur DUPONT Lionnel apparaît.(car il figure dans le tableau de ma feuille biensûr !)

    Mais !

    J'ai aussi une listbox2 qui elle va afficher les lignes où Monsieur DUPONT Lionnel apparaît dans la feuille SUIVI de mon second
    classeur. (Je précise que dans cette feuille, il y a au moins 500 lignes de remplies manuellement avec un numéro d'index unique mis
    manuellement au bout de chaque ligne pour pouvoir récupérer les valeurs). (Cette feuille est figée et ne peut plus être remplie/modifiée manuellement).

    Donc quand je clique sur une ligne de la listbox1, mes textbox se remplissent avec les valeurs se trouvant dans FORMATIONS.
    Quand je clique sur une ligne de la listbox2, mes textbox se remplissent avec les valeurs se trouvant dans SUIVI.

    Jusque là, ça roule aussi !

    Si, pour Monsieur DUPONT Lionnel, la formation se trouve dans SUIVI, mais n'est pas encore programmé (donc ne figure pas dans FORMATIONS), je peux l'"Ajouter"
    au tableau de FORMATIONS.

    Cette formation est désormais planifiée, et j'ai demandé, avec une macro, que le mot "planifier"(entre-autre) s'inscrive dans FORMATIONS et dans SUIVI sur les lignes correspondantes.

    Ça roule aussi.

    Là où est ma problématique :

    Vu que DUPONT Lionnel (colonne B) est inscrit en formation "informatique"(colonne F), il figure dans FORMATIONS.
    Il figure donc également dans SUIVI : DUPONT Lionnel (colonne D), "informatique"(colonne H).

    Le travail ne s'arrête pas là.
    Une fois que Monsieur DUPONT a réalisé sa formation, le mot "réaliser" doit remplacer "planifier" dans les 2 feuilles.
    (cellule G dans le 1er classeur, cellule Q dans le second).
    Les lignes sont donc existantes dans les 2 feuilles, il ne s'agit donc plus d'un ajout de ligne, mais d'une modification de ligne déjà existante !

    Pour se faire, il faut rechercher Monsieur DUPONT Lionnel dans les 2 feuilles et sa formation "informatique", car il a d'autres formations de planifiées...

    Ce bout de code me permettrait d'avancer !

    (En aucun cas, désormais, des valeurs ne doivent s’inscrire manuellement. Tous passe par le UF).

    Merci beaucoup.

  8. #8
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Mél3790 Voir le message
    Mon premier classeur s'appel PROGRAMMATION, la feuille où vont s'inscrirent les valeurs se nomme FORMATIONS.
    Mon second classeur s'appel SUIVI PLAN DE FORMATION, la feuille où se trouvent les valeurs se nomme SUIVI.
    Excel peut traiter des données entre deux classeurs différents mais, clairement, il n'est pas doué pour ça.
    Excel est conçut pour calculer, pas pour gérer.
    Clairement, ce que tu veux faire n'est pas un travail de tableur mais de gestionnaire de base de données comme Access, Open Base ou Libre Base.

    Sans vouloir être désobligeant, je pense que tu es en train de partir sur une usine à gaz qui te prendra plus de temps que de te faire une petite autoformation sur une SGBD.

    L'application que tu présentes est kafkaïenne en comparaison de son utilité.
    Je n'ai pas tout suivi mais j'ai l'impression que l'usage des Userform complique plus les choses qu'il ne les facilitent.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  9. #9
    Membre du Club
    Femme Profil pro
    Assistante
    Inscrit en
    Février 2016
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Assistante

    Informations forums :
    Inscription : Février 2016
    Messages : 156
    Points : 51
    Points
    51
    Par défaut
    Mon appli fonctionne très bien, et j'ai l'obligation d'utiliser excel (de plus je ne suis pas la seule à travailler sur ces fichiers).
    Access ne serait pas adapté (je connais très ce système de gestion de base de données relationnelles)...


    Je pense, d'après quelques recherches, qu'il faut peut-être utiliser la méthode FIND multiple.
    Mais je ne sais pas trop comment m'y prendre :s

    Merci

  10. #10
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Mél3790 Voir le message
    Les lignes sont donc existantes dans les 2 feuilles, il ne s'agit donc plus d'un ajout de ligne, mais d'une modification de ligne déjà existante !
    Pour se faire, il faut rechercher Monsieur DUPONT Lionnel dans les 2 feuilles et sa formation "informatique", car il a d'autres formations de planifiées...
    Théoriquement, un Find ne peut faire de recherche que sur une seule valeur et non un couple.

    Il y a de multiples solution pour contourner ça. En voici deux.

    Dans une colonne supplémentaire (éventuellement masquée), tu fais une concaténation avec un & des deux valeurs (le nom et la formation).
    Ensuite, le problème revient à faire une recherche classique avec un Find sur cette colonne en mettant également la concaténation des deux informations dans le critère de recherche.
    https://msdn.microsoft.com/fr-fr/lib.../ff839746.aspx

    Autre solution plus basique et moins élégante : tu fais une boucle For qui va scruter toutes les lignes de ta feuille et rechercher avec un If celle correspondant à ces deux valeurs.
    C'est très basique mais facile à mettre en oeuvre et ça fonctionne bien.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  11. #11
    Membre du Club
    Femme Profil pro
    Assistante
    Inscrit en
    Février 2016
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Assistante

    Informations forums :
    Inscription : Février 2016
    Messages : 156
    Points : 51
    Points
    51
    Par défaut
    Ha oui, ta première méthode de concaténation me plait bien, je n'y avait pas pensé !
    De plus, cela simplifie vachement le travail !

    Je vais essayé de bidouiller quelque chose avec Find alors.
    Je reviendrais poster ce qu'il en est.

    Je ne passe pas la discussion en résolu pour le moment.

    Merci, à très vite !

  12. #12
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Bonjour,
    Pour une telle concaténation je mets toujours entre les valeurs le caractère ¤
    Ce caractère est très peu utilisé de ce fait tu n'auras pas de faux positifs

    "TO" & "TO" = TOTO
    "TO" & "¤" & "TO" = TO¤TO

    TU dois LIRE LE SUJET dans ma signature Existence entre 2 COL

  13. #13
    Membre du Club
    Femme Profil pro
    Assistante
    Inscrit en
    Février 2016
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Assistante

    Informations forums :
    Inscription : Février 2016
    Messages : 156
    Points : 51
    Points
    51
    Par défaut
    Bonjour,

    Merci pour ta proposition, ton lien ne donne pas de discussion

  14. #14
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20

  15. #15
    Membre du Club
    Femme Profil pro
    Assistante
    Inscrit en
    Février 2016
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Assistante

    Informations forums :
    Inscription : Février 2016
    Messages : 156
    Points : 51
    Points
    51
    Par défaut
    Bonjour,

    Je me suis finalement résolue à appliquer une formule, comme Menhir me l'a proposé, et que j'aurais dû appliquer de suite ! (il vaut mieux s'en rendre compte tard que jamais, on apprend de ses erreurs)
    Je cherchais à faire compliquer avec du VBA, alors que cette formule convient parfaitement ! :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {=SIERREUR(INDEX('PROGRAMMATION.xlsm'!Tableau2[Etat];EQUIV(1;('PROGRAMMATION.xlsm'!Tableau2[NOM Prénom]=H393)*('PROGRAMMATION.xlsm'!Tableau2[FORMATION]=D393);0));"A Programmer")}
    Merci à tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Tableaux] Rechercher les doublons dans un tableau
    Par jym_22 dans le forum Langage
    Réponses: 5
    Dernier message: 15/11/2006, 09h47
  2. [pl-sql] Recherche de doublons dans une table
    Par tommey dans le forum Oracle
    Réponses: 1
    Dernier message: 08/11/2006, 22h53
  3. [EXCEL] Mise en évidence des doublons dans une colonne
    Par dacid dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 30/10/2006, 19h14
  4. Réponses: 5
    Dernier message: 21/11/2005, 14h24
  5. recherche de doublons dans un fichier texte
    Par portu dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 07/10/2003, 14h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo