XL 2010 comparer deux tableaux

adkheir

XLDnaute Occasionnel
Bonsoir le forum
j'ai une une liste référence de 6 colonne en feuil1 que je dois comparer avec une autre liste de même nombre de colonnes en feuil2 , la comparaison se fait sur les colonnes B et C de chaque feuille et recopier sur la feuil3 tous les éléments qui se trouvent bien sur sur la liste de la feuil1 et qui sont absent sur la liste de la feuil2.
merci
 

redexcel

XLDnaute Junior
Bonsoir le forum
j'ai une une liste référence de 6 colonne en feuil1 que je dois comparer avec une autre liste de même nombre de colonnes en feuil2 , la comparaison se fait sur les colonnes B et C de chaque feuille et recopier sur la feuil3 tous les éléments qui se trouvent bien sur sur la liste de la feuil1 et qui sont absent sur la liste de la feuil2.
merci
Bonsoir
Un fichier Excel en pièce jointe serais le bienvenu ;-)
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
Avec en référence VBA le projet GigIdx du complément GigIdx.xlam dont le classeur précurseur est joint, ça peut s'écrire comme ça dans le module Feuil3 :
VB:
Option Explicit

Private Sub Worksheet_Activate()
Dim TR(1 To 10000, 1 To 6), L As Long, C As Long, Crit1 As SsGr, Crit2 As SsGr, _
   ÀReproduire As Boolean, Détail
For Each Crit1 In Gigogne(TableUnique(Feuil2.[A2:F2], Feuil1.[A2:F2]), 2, 3)
   For Each Crit2 In Crit1.Co
      ÀReproduire = True
      For Each Détail In Crit2.Co
         If Détail(0) = 0 Then
            ÀReproduire = False
         ElseIf ÀReproduire Then
            L = L + 1: For C = 1 To UBound(Détail): TR(L, C) = Détail(C): Next C
            End If: Next Détail, Crit2, Crit1
[A2].Resize(10000, 6).Value = TR
End Sub
 

Pièces jointes

  • GigIdx.xlsm
    67.9 KB · Affichages: 43

chris

XLDnaute Barbatruc
Bonjour

Afin d'éviter que les bonnes volontés perdent du temps, je précise que adkheir a déjà posté sa demande ailleurs.

Demande qui évolue au fil des posts sans réponses claires aux questions posées.

Le but est de comparer une liste principale de l'ordre de 12 000 lignes, tour à tour avec chaque liste du classeur (dont le nombre n'est pas précisé).

Au début juste colorer (d'où la MFC présente dans le fichier joint mais qui ne correspond plus à la forme actuelle de la liste puisque à l'origine il y avait une colonne Nom et une colonne Prénom dans les listes), maintenant extraire...

adkheir a par ailleurs précisé que les noms ne sont pas parfaitement identiques : casse différente mais surtout espaces parasites.

Je pense que l'outil de Dranreb, que je salue;), est effectivement une solution si adkheir fait l'effort ici, non fait ailleurs, de clairement définir un besoin qui devrait être non fluctuant...

Edit : et sans doute en lien avec https://www.excel-downloads.com/threads/chercher-doublons-et-les-copiez.20021510/
 

redexcel

XLDnaute Junior
bonjour Redexcel, le forum
merci a toiDranreb pour le code que je n'ai su l'exploiter
je joint un fichier que j’espère qu'il va être plus explicite.
cordialement

Salut Adkeir

Ci-joint fichier ou nous avons:
feuil 1 : liste "Nom1 à Nom30"
feuil 2 : liste "Nom10 à Nom39"

Si je comprends bien , sur feuil3 tu veux récuperer tous les éléments qui se trouvent bien sur sur la liste de la feuil1 et qui sont absents sur la liste de la feuil2. du coup cela veut dire que la feuil3 afficherait la liste "Nom 1 à Nom9".

Voir formule sur feuil3 qui affichent ces éléments, pour le reste ça affiche zero. Est-ce que ça te convient ?

Redexcel
 

Pièces jointes

  • Liste noms.xlsx
    11 KB · Affichages: 45

Dranreb

XLDnaute Barbatruc
Remarque: contrairement à ce que vous disiez au 1er poste (colonnes B et C) votre classeur suggère que ce sont les colonnes A et B qui doivent être comparées. Dans ce cas il faut
For Each Crit1 In Gigogne(TableUnique(Feuil2.[A2:F2], Feuil1.[A2:F2]), 1, 2) et non
For Each Crit1 In Gigogne(TableUnique(Feuil2.[A2:F2], Feuil1.[A2:F2]), 2, 3)
Plutôt que de pouvoir les utiliser dans n'importe quel classeur à l'avenir en cochant la référence à GigIdx, préféreriez vous que les fonctions Gigogne et TableUnique soient écrites dans votre classeur d'application ainsi que la définition du type SsGr ?
Attention ce sont deux modules de service dont un est assez gros (mais quand même microscopique, comparé à la taille de la programmation de la plupart des bibliothèques en référence) et un petit module de classe.
 
Dernière édition:

adkheir

XLDnaute Occasionnel
Bonjour Redexcel ,Dranreb, le forum
Merci a toi Redexcel avec cette formule mon problème est résolu.
Merci a toi Dranreb pour ton poste , je serai tres reconnaissant que tu m'explique davantage sur ces lignes de codes:
For Each Crit1 In Gigogne(TableUnique(Feuil2.[A2:F2], Feuil1.[A2:F2]), 1, 2)
For Each Crit1 In Gigogne(TableUnique(Feuil2.[A2:F2], Feuil1.[A2:F2]), 2, 3)
cordialement
 

Dranreb

XLDnaute Barbatruc
Il y a une page d'aide dans GigIdx qui explique tout ça. On y trouve :
Function Gigogne(ByVal PlageOuTableau, ParamArray ColOrd() As Variant) As Collection
Renvoie une collection d'éléments de type SsGr. On la parcourt donc à l'aide d'au moins une variable déclarée As SsGr.
Ces éléments ont une propriété Id As Variant et une autre Co As Collection. Vous aurez à les utiliser aussi dans votre code.
Avec derrière la signification de PlageOuTableau (ici l'expression TableUnique(… etc.)
et de ColOrd (ici 1, 2)
Et :
Function TableUnique(ParamArray TP() As Variant) As Variant()
Renvoie un tableau unique où sont empilés l'un derrière l'autre plusieurs tableaux de diverses sources.
La seconde dimension des différents tableaux doit commencer à 1. Cependant dans le tableau résultant elle commencera à 0,
l'élément 0 restituant le numéro d'ordre de la source, la 1ère étant 0.
 

chris

XLDnaute Barbatruc
RE
Remarque: contrairement à ce que vous disiez au 1er poste (colonnes B et C) votre classeur suggère que ce sont les colonnes A et B qui doivent être comparées...

Non cela c'était quand le classeur contenait une colonne Nom en B et une colonne Prenom en C : Adkeir a changé la structure de son classeur (du moins sur l'exemple joint) en rassemblant les 2 mais pas adapté sa demande...

Ne pas oublier non plus l'aspect casse et espaces différents pour des noms "identiques" pour lui.
 

redexcel

XLDnaute Junior
Bonjour Redexcel ,Dranreb, le forum
Merci a toi Redexcel avec cette formule mon problème est résolu.
Merci a toi Dranreb pour ton poste , je serai tres reconnaissant que tu m'explique davantage sur ces lignes de codes:
For Each Crit1 In Gigogne(TableUnique(Feuil2.[A2:F2], Feuil1.[A2:F2]), 1, 2)
For Each Crit1 In Gigogne(TableUnique(Feuil2.[A2:F2], Feuil1.[A2:F2]), 2, 3)
cordialement


Cool
tu peux mettre un "j'aime" si ça te convient ;-)
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum

Bonsoir chris ;)
Puisque personne ne le fait, je remercie chris de nous avoir averti.
Je vois qu'à l'aube de 2018, le multipostage a encore de beaux jours devant lui :rolleyes:
Bonjour

Afin d'éviter que les bonnes volontés perdent du temps, je précise que adkheir a déjà posté sa demande ailleurs.

Demande qui évolue au fil des posts sans réponses claires aux questions posées.

Le but est de comparer une liste principale de l'ordre de 12 000 lignes, tour à tour avec chaque liste du classeur (dont le nombre n'est pas précisé).

Au début juste colorer (d'où la MFC présente dans le fichier joint mais qui ne correspond plus à la forme actuelle de la liste puisque à l'origine il y avait une colonne Nom et une colonne Prénom dans les listes), maintenant extraire...

adkheir a par ailleurs précisé que les noms ne sont pas parfaitement identiques : casse différente mais surtout espaces parasites.

Je pense que l'outil de Dranreb, que je salue;), est effectivement une solution si adkheir fait l'effort ici, non fait ailleurs, de clairement définir un besoin qui devrait être non fluctuant...

Edit : et sans doute en lien avec https://www.excel-downloads.com/threads/chercher-doublons-et-les-copiez.20021510/
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 206
Messages
2 086 219
Membres
103 158
dernier inscrit
laufin