Macro : Récup liste sans doublons de deux feuilles

Résolu/Fermé
James - Modifié par James le 9/07/2014 à 15:39
J@mes Messages postés 10 Date d'inscription mercredi 9 juillet 2014 Statut Membre Dernière intervention 24 juillet 2014 - 24 juil. 2014 à 17:39
Bonjour à tous,

Après avoir passé plusieurs heures de recherches infructueuses, je me décide à poster.

Environnement: Office 2013 (si possible il faudrait que ce soit lisible sur du 2003)

Explication du fichier et de mon besoin :

J'ai une feuille nommé xxx

Cette feuille est une extraction d'un soft.
Elle est amené à être de plus en plus longue (1884 lignes pour le moment)

Une seconde feuille nommé yyy

Cette feuille est mis à jours régulièrement à la main.
Elle est ammené à être de plus en plus longue (2036 lignes pour le moment)

La troisième feuille nommé liste zzz

Je dois récupérer l'ensemble de la colonne A de xxx et l'ensemble de la colonne A de yyy mais sans doublon.
Autre particularité, il y a des cellules vides dans yyy

Avec des fonctions je n'y arrive pas, surement via une macro mais je ne m'y connais pas du tout, mis à part les enregistrements de manipulation simple ...

-----

Autre info
Dans la feuille liste zzz je récupère des informations des deux autres feuilles via des recherchev.

En colonne B
=RECHERCHEV(A2;'yyy'!$A$1:$R$2036;5;FAUX)

En colonne C
=RECHERCHEV(A2;'yyy'!$A$1:$R$2036;2;FAUX)

En colonne D
=RECHERCHEV(A2;'yyy'!$A$1:$R$2036;3;FAUX)

En colonne E
=RECHERCHEV(A2;'yyy'!$A$1:$R$2036;4;FAUX)


En colonne F
=RECHERCHEV(A2;xxx!$A$4:$AQ$1769;10;FAUX)

En colonne G
=RECHERCHEV(A8;xxx!$A$4:$AQ$1769;3;FAUX)

...

jusqu'en colone O

Donc il est important de ne modifier que la colonne A de Liste zzz pour que le reste se mette à jours.

Si vous avez des recommandations de modification sur cela je suis preneur.

Merci d'avance

Cordialement


Edition :

Ajout d'une pièce jointe afin d'avoir un visuel c'est toujours plus simple :
http://cjoint.com/?3GjoVZSI6qZ
C'est la partie en rouge du premier tableau qui me pose problème.

Hésitez pas si vous avez des questions ou remarques.

Encore merci :)


A voir également:

7 réponses

Bonjour,

Essayes ce fichier, ça devrait faire l'affaire :

http://cjoint.com/?0GrpjgztQg4

La Macro se trouve en feuille3 dans le VBA editor.

N'hésites pas si tu as des question ?

Bonne journée
1
J@mes Messages postés 10 Date d'inscription mercredi 9 juillet 2014 Statut Membre Dernière intervention 24 juillet 2014
9 juil. 2014 à 16:41
Je me suis enregistré du coup mais je ne peux plus modifier mon message.
0
J@mes Messages postés 10 Date d'inscription mercredi 9 juillet 2014 Statut Membre Dernière intervention 24 juillet 2014
11 juil. 2014 à 16:48
Je me permet une petite relance.
Es qu'il manque quelque chose ? Un détail ou autre ?
Par avance merci
0
J@mes Messages postés 10 Date d'inscription mercredi 9 juillet 2014 Statut Membre Dernière intervention 24 juillet 2014
15 juil. 2014 à 12:31
https://www.cjoint.com/?0GpmFjYWnE5
Je remet à jours le lien pour 21 jours.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
clic85 Messages postés 4 Date d'inscription mercredi 16 juillet 2014 Statut Membre Dernière intervention 17 juillet 2014
Modifié par clic85 le 17/07/2014 à 14:06
Pas besoin de macro ...

Alors ton 1er problème vient du faite que lorsque tu utilises RECHERCHEV(A1 dans une cellule de ZZZ, ton A1 pointe sur une cellule vide, il devrait aller pointer sur une cellule de la feuille XXX... mais du coup il y a une petite astuce ... j'ai vu ca en partant de ton fichier ...

pour récap de manière propre dans ta feuille ZZZ
Colonne A =RECHERCHEV(xxx!A2;yyy!$A$2:$R$2036;1;FAUX) => démarre bien en A2 car tes lignes en 1 sont des titres ...
Colonne B =RECHERCHEV(xxx!A2;yyy!$A$2:$R$2036;5;FAUX)

etc pour tes autres colonnes ...

Ensuite selectionne ta colonne A, puis fait Accueil/Mise en forme conditionnel/regle de mise en surbrillance / doublon ...
Tes cellules seront colorés lorsqu'elles sont en doublons ...

Selectione ntoutes tes colonnes utiles et fait FILTRE ... comme ca ensuite sur ta colonne A, il reste à faire un tri dessus sur la couleur, et elles seront regroupés, tu pourras alors supprimer à la main tes doublons.


NB: lorsque j'utilise la fonction rechercheV de manière ponctuelle, je recopie mes résultats avec COPIER/VALEUR ... comme ca je peux supprimer par ex les autres feuilles :)
0
J@mes Messages postés 10 Date d'inscription mercredi 9 juillet 2014 Statut Membre Dernière intervention 24 juillet 2014
21 juil. 2014 à 11:22
Bonjour Clic85,
Navré je n'avais pas vue ta réponse,
Je viens d'essayer les fonctions que tu me propose,
Ta première fonction récupère les doublons de xxx et yyy mais pas le reste.
Sur les feuilles xxx et yyy à la ligne 7 il y a bien deux noms différents justement pour pouvoir les récupérer.
Du coup là si il y a doublon c'est qu'il y a un doublon sur xxx et yyy.
En tout cas merci car ca me permet de peaufiner mes fonctions, en soit je ne pense pas que ca pose problème de commencer en A1 mais je vais suivre ton conseil en effet c'est bien plus logique et merci :)
De même pour les doublons en effet j'avais zapé la mise en forme conditionnelle qui dans ce cas m'arrange bien.
Merci clic85 pour ces informations mais il reste toujours ce problème de récupérer la colonne A de xxx et yyy dans liste zzz
0
Theo.R Messages postés 575 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 30 mars 2016 31
12 juil. 2014 à 12:38
Bonjour,

Mon code (qui n'est pas vraiment le mien) marche très bien, je m'en sers pour créer une liste à partir d'une colonne que des utilisateurs remplissent progressivement et la formule en extrait les valeurs sans doublon et sans espace.

PS; excel 2007 pour ma part

Après si je n'ai pas compris sa demande c'est autre chose..

--
-1
Theo.R Messages postés 575 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 30 mars 2016 31
Modifié par pijaku le 17/07/2014 à 13:01
Tu vas devoir utiliser les Macros VBA !!

Voici le code à faire pour extraire d'une colonne donnée une liste sans doublon et espaces vides supprimés :

Dans ce code, la colonne source est "b" alors que la colonne de destination est "c" :

Sub ListeSansDoublons()
Application.ScreenUpdating = False
        With Range("c1:c9000")
            .ClearContents
            .Interior.ColorIndex = xlNone
        End With
Set mondico = CreateObject("Scripting.Dictionary")
b = Range("b1", [b65000].End(xlUp)).Value
For Each c In b
    mondico(c) = ""
Next c
[x2].Resize(mondico.Count, 1) = Application.Transpose(mondico.keys)
End Sub


Dans ton cas précis, si tu dois prendre les colonnes xxx-A:A et yyy-A:A et pour les réunir dans zzz-A:A et zzz-B:B (par exemple), alors tu vas devoir d'abord définir une plage de destination pour la macro ("c" dans le code) dans la MEME feuille, à savoir xxx pour la première fois et yyy la seconde.

Une fois que tu as affecté à un bouton (qui lui peut être dans zzz) aux deux macros, il te suffit en zzz de mettre en colonne (en A:A et B:B dans la logique de notre exemple) les références aux colonnes de destination que tu auras choisies.

En espérant que ça marche ;)
-2
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 12/07/2014 à 11:00
Bonjour

Tu es vraiment sûr de ce que tu as proposé, as tu testé ton code ?

A mon avis, tu ne rends pas du tout service à James, bien au contraire....
0
J@mes Messages postés 10 Date d'inscription mercredi 9 juillet 2014 Statut Membre Dernière intervention 24 juillet 2014
15 juil. 2014 à 12:42
Merci Theor.R de ta réponse,
Alors en effet je doute (sans l'avoir testé pour le moment) que cela ne marche.
Je dois copier (non couper) XXX-A:A et yyy-A:A pour les réunir dans zzz-A:A dans la colonne B j'ai déjà des valeurs.
Si je dois modifier mon tableau en ajoutant des colonnes ce n'est pas un problème je pourrais toujours cacher les colonnes qui n'ont pas besoin d'être vue.
J'ai l'impression que ce n'est pas si simple.
Merci en tout cas de votre aide :)
0
Theo.R Messages postés 575 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 30 mars 2016 31
Modifié par pijaku le 17/07/2014 à 13:03
j'avais oublié de modifier une variable dans mon code (à savoir [x2] en [c2]), pas étonnant s'il ne marchait alors pas ! Voici la version corrigée qui devrait marcher (c'est en tout cas ok sur mon tableur).

Sub ListeSansDoublons()
Application.ScreenUpdating = False
With Range("c1:c9000")
.ClearContents
.Interior.ColorIndex = xlNone
End With
Set mondico = CreateObject("Scripting.Dictionary")
b = Range("b1", [b65000].End(xlUp)).Value
For Each c In b
mondico(c) = ""
Next c
[c2].Resize(mondico.Count, 1) = Application.Transpose(mondico.keys)
End Sub
0
J@mes Messages postés 10 Date d'inscription mercredi 9 juillet 2014 Statut Membre Dernière intervention 24 juillet 2014
16 juil. 2014 à 15:03
Je te remercie Theo.R,
Mais j'ai aucune notions en VBA.
De ce que je comprends tu fais appel a une colonne C et B mais il n'y a aucune donnée a rechercher sur ces colonnes.
J'ai essayé de présenter un exemple en pièce jointe avec mon besoin afin qu'il soit "imagé" et que cela facilite la compréhension de mon problème.
0
Theo.R Messages postés 575 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 30 mars 2016 31
16 juil. 2014 à 15:21
Ok j'ai pris ton doc et ai mis deux fois le code que je t'ai donné en adaptant les colonnes (il fallait comprendre que mon C et B sont à adapter comme je l'avais dit).

Le doc :
https://www.cjoint.com/?DGqpst4kxJ

Par contre je n'ai pas saisi où afficher les deux listes en zzz, je te laisse cette dernière étape maintenant que tu as les listes sans doublon.

P.S: VBA n'est pas compliqué à ce niveau, si dans le code tu remplaces les "c" par des "a" pour désigner les colonnes, alors la macro va faire la même opération mais sur les "a" et non plus les "c".
0