Comparer 2 colonnes sur feuil 1 et feuil 3
Résolu/Fermé
A voir également:
- Comparer 2 colonnes sur feuil 1 et feuil 3
- Supercopier 2 - Télécharger - Gestion de fichiers
- Faire 2 colonnes sur word - Guide
- Word numéro de page 1/2 - Guide
- Classer par ordre alphabétique excel plusieurs colonnes - Guide
- Fusionner 2 colonnes excel - Guide
9 réponses
Lentzouille2
Messages postés
806
Date d'inscription
samedi 22 octobre 2011
Statut
Membre
Dernière intervention
13 janvier 2020
39
10 janv. 2012 à 09:29
10 janv. 2012 à 09:29
Bonjour,
Est-ce que ta feuille 3 se nomme bien Feuil3 ?
Est-ce que ta feuille 3 se nomme bien Feuil3 ?
nicodrum
Messages postés
147
Date d'inscription
samedi 29 novembre 2008
Statut
Membre
Dernière intervention
19 décembre 2014
19
10 janv. 2012 à 09:44
10 janv. 2012 à 09:44
c'est juste feuil2 qu'il faut changer en feuil3 pas tous les 2 en 3.
nicodrum
Messages postés
147
Date d'inscription
samedi 29 novembre 2008
Statut
Membre
Dernière intervention
19 décembre 2014
19
10 janv. 2012 à 23:34
10 janv. 2012 à 23:34
j'ai essayé ta macro et ça copie aussi chez moi. Je pensais que c'était normal. Je ne m'y connais pas assez en macro pour régler ce soucis...
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
11 janv. 2012 à 09:27
11 janv. 2012 à 09:27
Bonjour,
Combien de lignes doit traiter cette macro?
Combien de lignes doit traiter cette macro?
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 11/01/2012 à 18:34
Modifié par michel_m le 11/01/2012 à 18:34
Bonjour
Il faut donc comparer 1 à 2, 1 à 3, 1 à 4, et virer les lignes de données identiques dans a 1 dans 2 3 4 ?
as tu des doublons internes dans dans 1 2 3 4 ?
as tu des données dans les autres colonnes ?
Michel
Il faut donc comparer 1 à 2, 1 à 3, 1 à 4, et virer les lignes de données identiques dans a 1 dans 2 3 4 ?
as tu des doublons internes dans dans 1 2 3 4 ?
as tu des données dans les autres colonnes ?
Michel
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
Modifié par pijaku le 12/01/2012 à 08:43
Modifié par pijaku le 12/01/2012 à 08:43
Bonjour,
Récapitulons pour être tout à fait exact.
Tu as 4 feuilles de 45 000 lignes.
Tu as des éléments en Feuil1 que l'on retrouve en feuil2, 3 et 4.
Par contre, pas d'éléments communs entre les Feuilles 2, 3 et 4.
Tu veux par conséquent supprimer les doublons.
Donc questions :
Tu veux les supprimer en Feuil1 ou en Feuil2, 3 et 4?
Peux t'il y avoir des doublons au sein même de chaque feuille?
Si oui : suppression?
Cordialement,
Franck P
Récapitulons pour être tout à fait exact.
Tu as 4 feuilles de 45 000 lignes.
Tu as des éléments en Feuil1 que l'on retrouve en feuil2, 3 et 4.
Par contre, pas d'éléments communs entre les Feuilles 2, 3 et 4.
Tu veux par conséquent supprimer les doublons.
Donc questions :
Tu veux les supprimer en Feuil1 ou en Feuil2, 3 et 4?
Peux t'il y avoir des doublons au sein même de chaque feuille?
Si oui : suppression?
Cordialement,
Franck P
Bonjour Pijaku,
Merci pour ton intérêt que tu me portes...
J'ai Feuil1 = 47201 lignes pour être précis
Feuil2 = 41990 lignes
Feuil3 = 41990 lignes
Feuil4 = 41990 lignes
Effectivement, je n'ai pas d'éléments communs entre les feuilles 2,3 et 4
Il peut y avoir quelques doublons dans la feuille 1 uniquement mais ceci n'est pas grave.
Aucun doublons entre feuilles 2,3 et 4. Aucun doublons à l'intérieur des feuilles 2,3 et 4.
Et je voudrais supprimer les doublons dans les feuilles 2,3 et 4 (après comparaison de ma feuille1) - si oui = suppression.
Merci pour ton intérêt que tu me portes...
J'ai Feuil1 = 47201 lignes pour être précis
Feuil2 = 41990 lignes
Feuil3 = 41990 lignes
Feuil4 = 41990 lignes
Effectivement, je n'ai pas d'éléments communs entre les feuilles 2,3 et 4
Il peut y avoir quelques doublons dans la feuille 1 uniquement mais ceci n'est pas grave.
Aucun doublons entre feuilles 2,3 et 4. Aucun doublons à l'intérieur des feuilles 2,3 et 4.
Et je voudrais supprimer les doublons dans les feuilles 2,3 et 4 (après comparaison de ma feuille1) - si oui = suppression.
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 12/01/2012 à 08:40
Modifié par michel_m le 12/01/2012 à 08:40
Bonjour
testé sur 10000 lignes suppression en 1,3 seconde
le classeur de test
https://www.cjoint.com/?3AmiEUzQ47D
suis absent jusqu'à 18-19h
Michel
testé sur 10000 lignes suppression en 1,3 seconde
Dim Dico2 As Object, Dico3 As Object, Dico4 As Object Sub comparer_1234() Dim derlig1 As Long, cle Dim T_in Dim start As Single start = Timer '---initialisations With Sheets(1) Application.ScreenUpdating = False derlig1 = .Columns("A").Find("*", , , , , xlPrevious).Row T_in = Application.Transpose(.Range("A1:A" & derlig1).Value) ' création des dictionnaires feuilles 2,3,4 creer_dicos 2, Dico2 creer_dicos 3, Dico3 creer_dicos 4, Dico4 '----détection et suppression des doublons intercolonnes For cptr = 1 To UBound(T_in) cle = .Cells(cptr, 1) If Dico2.exists(cle) Then Dico2.Remove (cle) If Dico2.exists(cle) Then Dico3.Remove (cle) If Dico2.exists(cle) Then Dico4.Remove (cle) Next End With '----restitutions des feuilles épurées '---RESTITUTIONS PROVISOIRE COLONNE B POUR ESSAIS Sheets(2).Range("B1").Resize(Dico2.Count, 1) = Application.Transpose(Dico2.keys) Sheets(3).Range("B1").Resize(Dico3.Count, 1) = Application.Transpose(Dico3.keys) Sheets(4).Range("B1").Resize(Dico4.Count, 1) = Application.Transpose(Dico4.keys) '--- LIGNES A ACTIVER APRES ESSAIS 'With Sheets(2) '.Columns("A").ClearContents ' .Range("A1").Resize(Dico2.Count, 1) = Application.Transpose(dico2.keys) 'End With 'With Sheets(3) '.Columns("A").ClearContents ' .Range("A1").Resize(Dico3.Count, 1) = Application.Transpose(dico3.keys) 'End With 'With Sheets(4) '.Columns("A").ClearContents ' .Range("A1").Resize(Dico4.Count, 1) = Application.Transpose(dico4.keys) 'End With MsgBox " suppression des occurences communes terminée en " & Timer - start & " .sec" End Sub Sub creer_dicos(Num, Dico) Dim derlig As Long Set Dico = CreateObject("scripting.dictionary") With Sheets(Num) derlig = .Columns("A").Find("*", , , , , xlPrevious).Row For cptr = 1 To derlig Dico.Add .Cells(cptr, 1).Value, 1 Next End With End Sub
le classeur de test
https://www.cjoint.com/?3AmiEUzQ47D
suis absent jusqu'à 18-19h
Michel
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
12 janv. 2012 à 08:41
12 janv. 2012 à 08:41
Salut michel,
Ton code est bon et qui plus est super rapide, cependant, il faut tenir compte du fait que le fichier du demandeur comporte 12 colonnes de données de A à L. Ca n'est pas explicite dans la demande en elle même, mais on s'en rends compte dans son code de macro, ici :
Ton code est bon et qui plus est super rapide, cependant, il faut tenir compte du fait que le fichier du demandeur comporte 12 colonnes de données de A à L. Ca n'est pas explicite dans la demande en elle même, mais on s'en rends compte dans son code de macro, ici :
If LastLig3 > 0 Then .Range("A1:L" & LastLig3).Copy
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
12 janv. 2012 à 09:39
12 janv. 2012 à 09:39
ben, je me suis basé sur le post 8 ET 9 où il précise qu'il y a qu'une seule colonne !
qui + est il recopie la feuille 2 dans la feuille1, ce qui parait bizarre puisque aorès on a la m^me punition avec feuille3....
comme ca a l'air d'^tre un code recopié, faut attendre ce qu'il va dire
s'il y a plusieurs colonnes au lieu de supprimer dans le dico, il faudrait créer 3 tableaux de sortie avec if not dico;exists et un redim preserve tableau (peut-^tre une sous-macro paramétrée)
je te laisse le bébé: ici, temps exceptionnel sans nuages===> rando dans la montagne ardéchoise :o)
j'y va
qui + est il recopie la feuille 2 dans la feuille1, ce qui parait bizarre puisque aorès on a la m^me punition avec feuille3....
comme ca a l'air d'^tre un code recopié, faut attendre ce qu'il va dire
s'il y a plusieurs colonnes au lieu de supprimer dans le dico, il faudrait créer 3 tableaux de sortie avec if not dico;exists et un redim preserve tableau (peut-^tre une sous-macro paramétrée)
je te laisse le bébé: ici, temps exceptionnel sans nuages===> rando dans la montagne ardéchoise :o)
j'y va
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
12 janv. 2012 à 10:45
12 janv. 2012 à 10:45
qui + est il recopie la feuille 2 dans la feuille1
J'ai un gros gros gros doute sur la recopie des lignes des feuilles 2, 3 et 4 sous les données feuil1... On est sur du Xl97 avec des 40 000 données par feuille!!!
La limite d'excel avant 2007 est de 65536 lignes, donc ...
comme ca a l'air d'^tre un code recopié, faut attendre ce qu'il va dire
tout à fait!!
ici, temps exceptionnel sans nuages===> rando dans la montagne ardéchoise :o)
Yen a qu'on d'la chance... Ici temps pourri, tout gris, et en plus visite de Sarko à Lille donc ===> bordel sur les routes et impossibilité de se garer...........
Bonne balade.
J'ai un gros gros gros doute sur la recopie des lignes des feuilles 2, 3 et 4 sous les données feuil1... On est sur du Xl97 avec des 40 000 données par feuille!!!
La limite d'excel avant 2007 est de 65536 lignes, donc ...
comme ca a l'air d'^tre un code recopié, faut attendre ce qu'il va dire
tout à fait!!
ici, temps exceptionnel sans nuages===> rando dans la montagne ardéchoise :o)
Yen a qu'on d'la chance... Ici temps pourri, tout gris, et en plus visite de Sarko à Lille donc ===> bordel sur les routes et impossibilité de se garer...........
Bonne balade.
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
13 janv. 2012 à 10:25
13 janv. 2012 à 10:25
désolé mais cette ligne est dans la macro de Pijaku...
cette erreur se produit elle aussi sur cette ligne de mon code:
T_in = Application.Transpose(.Range("A1:A" & derlig1).Value) ?
cette erreur se produit elle aussi sur cette ligne de mon code:
T_in = Application.Transpose(.Range("A1:A" & derlig1).Value) ?
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
Modifié par pijaku le 12/01/2012 à 11:43
Modifié par pijaku le 12/01/2012 à 11:43
Re-
En attendant le retour de sambrero, voici ma proposition (2,214844 secondes pour 45 000 lignes par feuille) :
!!!! ATTENTION : Lorsque l'on copie un code sur Internet, toujours travailler sur une copie de son document original. Surtout si on trouve un Delete dans ce code!!!!
Cordialement,
Franck P
En attendant le retour de sambrero, voici ma proposition (2,214844 secondes pour 45 000 lignes par feuille) :
!!!! ATTENTION : Lorsque l'on copie un code sur Internet, toujours travailler sur une copie de son document original. Surtout si on trouve un Delete dans ce code!!!!
Sub SupprimeDoublonsColonneA() 'Sources d'inspiration: 'boisgontierjacques : 'http://boisgontierjacques.free.fr/pages_site/Dictionnaire.htm#SupDoubBD 'Michel_m : 'http://www.commentcamarche.net/forum/affich-24145736-comparer-2-colonnes-sur-feuil-1-et-feuil-3#11 Dim Dico, CleDico Dim TablFeuil1, TablAutresFeuilles Dim DrLig As Long, i As Long Dim Wsh As Worksheet Dim t t = Timer Application.ScreenUpdating = False Set Dico = CreateObject("Scripting.Dictionary") With Sheets("Feuil1") DrLig = .Range("A" & Rows.Count).End(xlUp).Row TablFeuil1 = Application.Transpose(.Range("A1:A" & DrLig).Value) For i = 1 To UBound(TablFeuil1) Dico(TablFeuil1(i)) = "" Next i End With For Each Wsh In ThisWorkbook.Worksheets(Array("Feuil2", "Feuil3", "Feuil4")) With Sheets(Wsh.Name) DrLig = .Range("A" & Rows.Count).End(xlUp).Row TablAutresFeuilles = Application.Transpose(.Range("A1:A" & DrLig).Value) For i = UBound(TablAutresFeuilles) To 1 Step -1 CleDico = TablAutresFeuilles(i) If Dico.Exists(CleDico) Then .Rows(i).Delete End If Next i End With Next Wsh MsgBox "Suppression terminée en : " & Timer - t & " secondes" Set Dico = Nothing End Sub
Cordialement,
Franck P
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
12 janv. 2012 à 18:35
12 janv. 2012 à 18:35
Bon,nos propositions n'ont pas l'air d'intéresser Sambrero
On a du encore bosser pour rien...
a part ça, ballade magnifique! ;o)
On a du encore bosser pour rien...
a part ça, ballade magnifique! ;o)
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
13 janv. 2012 à 08:23
13 janv. 2012 à 08:23
Bonjour,
@Michel_m : ballade magnifique Scrogneugneu... Là je t'envie vraiment !!
@Sambrero : n'hésite pas à donner de tes nouvelles régulièrement, j'ai aussi craint de n'avoir bossé pour rien. Ici une fois n'est pas coutume et c'est vraiment rageant... D'autant plus qu'une procédure comme celle demandée ne se fait pas en 10 minutes...
Bon L'incompatibilité de type erreur d'exécution 13 ne le fait pas avec TES données sur MA version d'excel (2003). Je suppute donc grandement ta version (97) de nous jouer des tours...
N'achèterais tu point une version plus récente? (je plaisante).
Je regarde ça dans la journée...
@Michel_m : ballade magnifique Scrogneugneu... Là je t'envie vraiment !!
@Sambrero : n'hésite pas à donner de tes nouvelles régulièrement, j'ai aussi craint de n'avoir bossé pour rien. Ici une fois n'est pas coutume et c'est vraiment rageant... D'autant plus qu'une procédure comme celle demandée ne se fait pas en 10 minutes...
Bon L'incompatibilité de type erreur d'exécution 13 ne le fait pas avec TES données sur MA version d'excel (2003). Je suppute donc grandement ta version (97) de nous jouer des tours...
N'achèterais tu point une version plus récente? (je plaisante).
Je regarde ça dans la journée...
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
Modifié par pijaku le 13/01/2012 à 10:16
Modifié par pijaku le 13/01/2012 à 10:16
Re-
Alors après recherche, en ce qui concerne les variables tableaux sous Excel 97, j'ai trouvé ce tuto extrait de la FAQ XLD. Le 2- Les Tableaux Multidimensionnels aborde le cas d'Excel 97 et comment déclarer une variable tableau :
ATTENTION: : Sous Excel 97 et MAC, quand on affecte une plage de cellules à un tableau, il ne faut pas déclarer de variable Tableau mais tout simplement en Variant=> .Dim TabContributeurs et non Dim TabContributeurs()
Enfin, même si on affecte qu'une colonne=>TabContributeurs=Range("A1:A20"),on aura un tableau bidimensionnel de 20 lignes sur une colonne.(Ubound(TabContributeurs,1)=20 et Ubound(TabContributeurs,1)=1
De plus, je suppose, mais là dessus je n'ai rien trouvé, que "Application.transpose" pose problème sous 97. En effet, dans mon code précédent, les variables tableaux étaient belles et bien déclarées en Variant, donc à part ça, je ne vois pas ce qui gène l'exécution sous 97...
Le nouveau code tient donc compte de ceci, vous pourrez le constater dans les lignes en gras ci dessous.
Cordialement,
Franck P
Alors après recherche, en ce qui concerne les variables tableaux sous Excel 97, j'ai trouvé ce tuto extrait de la FAQ XLD. Le 2- Les Tableaux Multidimensionnels aborde le cas d'Excel 97 et comment déclarer une variable tableau :
ATTENTION: : Sous Excel 97 et MAC, quand on affecte une plage de cellules à un tableau, il ne faut pas déclarer de variable Tableau mais tout simplement en Variant=> .Dim TabContributeurs et non Dim TabContributeurs()
Enfin, même si on affecte qu'une colonne=>TabContributeurs=Range("A1:A20"),on aura un tableau bidimensionnel de 20 lignes sur une colonne.(Ubound(TabContributeurs,1)=20 et Ubound(TabContributeurs,1)=1
De plus, je suppose, mais là dessus je n'ai rien trouvé, que "Application.transpose" pose problème sous 97. En effet, dans mon code précédent, les variables tableaux étaient belles et bien déclarées en Variant, donc à part ça, je ne vois pas ce qui gène l'exécution sous 97...
Le nouveau code tient donc compte de ceci, vous pourrez le constater dans les lignes en gras ci dessous.
Option Explicit Sub SupprimeDoublonsColonne1Version2() 'Sources d'inspiration: 'boisgontierjacques : 'http://boisgontierjacques.free.fr/pages_site/Dictionnaire.htm#SupDoubBD 'Michel_m : 'http://www.commentcamarche.net/forum/affich-24145736-comparer-2-colonnes-sur-feuil-1-et-feuil-3#11 'FAQ XLD : 'http://www.excel-downloads.com/forum/93353-vba-les-tableaux-le-ki-ki-de-zon.html Dim Dico, CleDico Dim TablFeuil1, TablAutresFeuilles Dim DrLig As Long, i As Long Dim Wsh As Worksheet Dim t t = Timer Application.ScreenUpdating = False Set Dico = CreateObject("Scripting.Dictionary") With Sheets("Feuil1") DrLig = .Range("A" & Rows.Count).End(xlUp).Row TablFeuil1 = .Range("A1:A" & DrLig) For i = 1 To UBound(TablFeuil1, 1) Dico(TablFeuil1(i, 1)) = "" Next i End With For Each Wsh In ThisWorkbook.Worksheets(Array("Feuil2", "Feuil3", "Feuil4")) With Sheets(Wsh.Name) DrLig = .Range("A" & Rows.Count).End(xlUp).Row TablAutresFeuilles = .Range("A1:A" & DrLig) For i = UBound(TablAutresFeuilles, 1) To 1 Step -1 CleDico = TablAutresFeuilles(i, 1) If Dico.Exists(CleDico) Then .Rows(i).Delete End If Next i End With Next Wsh MsgBox "Suppression terminée en : " & Timer - t & " secondes" Set Dico = Nothing End Sub--
Cordialement,
Franck P
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
Modifié par pijaku le 13/01/2012 à 12:56
Modifié par pijaku le 13/01/2012 à 12:56
Alors, juste pour éclairer notre lanterne à tous, je te demanderai de bien vouloir répondre à la question de michel_m ci dessus : ICI.
Juste pour voir ce qui pose problème à Xl97 et aussi par pure politesse...
Juste pour voir ce qui pose problème à Xl97 et aussi par pure politesse...
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
13 janv. 2012 à 13:31
13 janv. 2012 à 13:31
Sa question suis ton post :
Bonjour Michel,
Je vous remercie pour l'intérêt que vous me portez,
J'ai essayé la macro ci dessus, mais ça me créé une erreur d'exécution '13' type incompatible.
La macro s'arrête ici : TablFeuil1 = Application.Transpose(.Range("A1:A" & DrLig).Value).
Et sa question :
désolé mais cette ligne est dans la macro de Pijaku...
cette erreur se produit elle aussi sur cette ligne de mon code:
T_in = Application.Transpose(.Range("A1:A" & derlig1).Value) ?
Remonte dans le sujet, tu verras...
Bonjour Michel,
Je vous remercie pour l'intérêt que vous me portez,
J'ai essayé la macro ci dessus, mais ça me créé une erreur d'exécution '13' type incompatible.
La macro s'arrête ici : TablFeuil1 = Application.Transpose(.Range("A1:A" & DrLig).Value).
Et sa question :
désolé mais cette ligne est dans la macro de Pijaku...
cette erreur se produit elle aussi sur cette ligne de mon code:
T_in = Application.Transpose(.Range("A1:A" & derlig1).Value) ?
Remonte dans le sujet, tu verras...
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
13 janv. 2012 à 13:45
13 janv. 2012 à 13:45
J'ai l'impression que Sambrero n'a pas regardé mon code et ignore mes remarques (m'en f... un peu); déjà qu'il a pas répondu à la contradiction entre le nombre de colonnes qu'il m'a indiqué:1, et 12 dans le code
pour Pijaku: s'il y a qu'une seule colonne, on devrait gagner quelques 1/10 de secondes avec ce que j'avais codé; ce, simplement "pour la beauté du geste"
petit détail set dico=nothing est inutile (pas grave)
pour Pijaku: s'il y a qu'une seule colonne, on devrait gagner quelques 1/10 de secondes avec ce que j'avais codé; ce, simplement "pour la beauté du geste"
petit détail set dico=nothing est inutile (pas grave)
10 janv. 2012 à 22:53
Je viens de m'apercevoir que ma première macro qui fonctionnait pourtant hier (apparemment ne fonctionne plus aujourd'hui ??????? (peut-être trop de données aujourd'hui)
En fait, au lieu de me supprimer les doublons en Feuil2, elle me les recopie en Feuil1 à la suite de ma colonne , et laisse ma Feuil2 bien tranquille ??? (je ne m'en suis pas aperçu hier...
Enfin pour répondre à ta question, ma Feuil3 se nomme bien Feuil3.
Que faire ?