Comparer plusieurs lignes à plusieurs lignes et afficher des

Bonjour,

J'ai 2 tableaux, l'un sur une feuille et l'autre sur une autre, le tout dans le même classeur. J'aimerai que c'est 2 tableaux soit comparés ligne par ligne et qu'il soit affiché le ou les résultats au bout des lignes.

Voici mon fichier pour mieux comprendre:

https://www.cjoint.com/c/DAdoRXRFEiI

Chaque ligne du tableau de la feuille 'donnée 2' doit être comparé avec toutes les lignes du tableau de la feuille 'donnée 1'. Si 3 critères ou plus du tableau de donnée 2 (critère 1 à critère 7) sont supérieur aux critères du tableau de donnée 1, alors il faudrait afficher le matricule du tableau de donnée 1 sur la même ligne avec laquelle a été faite la comparaison et la même feuille que le tableau de donnée 2. Si il existe plusieurs résultats alors il faudrait les afficher toujours sur la même ligne mais dans les colonne suivante.

Exemple:

Dans le tableau de 'Donnée 2':

la ligne du matricule "EEE" doit être comparée avec toutes celles du tableau de Donnée 1.

Lorsque l'on compare manuellement:

  • -le matricule "AAAA" à 2 critères qui sont supérieurs à "EEE" (critères 5 et 7);
  • -le matricule "BBBB" à 3 critères qui sont supérieurs à "EEE" (critères 2,3 et 7);
  • -le matricule "CCCC" à 2 critères qui sont supérieurs à "EEE" (critères 5 et 7);
  • -le matricule "DDDD" à 4 critères qui sont supérieurs à "EEE" (critères 1,3,6 et 7)
Je voudrait que les matricules "BBBB" et "DDDD" soient affichés sur la ligne de "EEE" (soit la ligne 12 de 'donnée 2'); qu'ils s'affichent dans l'ordre décroissant (du plus grand nombre de critères supérieurs au plus petit, et ce, dans des colonnes consécutives. Ici dans l'exemple, DDDD serait affiché dans la cellule "K12" de 'donnée 2' et "BBBB" dans la cellule "L12" de 'donnée 2'.

Les 2 tableaux ne sont pas limités en nombre lignes. Il est possible d'avoir 50 ligne comme 1000

Merci de votre aide car je suis un peu perdu dans tout sa et je ne sais pas quoi utiliser (formule ? macro ? si macro je n'en ai jamais fait...)

Salut et bienvenue sur le Forum,

Je pense que ton explication est contradictoire.

aymeric789852 a écrit :

Lorsque l'on compare manuellement:

--le matricule "AAAA" à 2 critères qui sont supérieurs à "EEE" (critères 5 et 7);

Mais en fait se sont les critères 5 et 7 du matricule EEE qui sont supérieurs aux deux critères correspondants du matricule AAAA.

Et ça, ça correspond à ce que tu dis plus haut

aymeric789852 a écrit :

Si 3 critères ou plus du tableau de donnée 2 (critère 1 à critère 7) sont supérieur aux critères du tableau de donnée 1,

C’est donc bien sur cette base que j’ai tenté une macro (voir le fichier ci-joint). A chaque fois que tu cliques sur le bouton en place, les anciennes données des colonnes K et suivantes de la feuille ‘donnée 2’ sont effacées et réinscrites en fonction des modifications sur tes deux feuilles.

Je n’ai pas encore cherché à classer les données comme demandé (par contre j’indique après le matricule trouvé le nombre de critères supérieurs) mais j’aimerais déjà savoir si cette première partie correspond déjà à ton attente.

A te relire.

joindre un fichier
114aymeric-v1.zip (11.15 Ko)

Bonjour Yvouille,

Merci beaucoup de ta réponse. En effet, je me suis un petit peu embrouillé, ce sont bien les critères du EEE qui sont supérieurs et tu as parfaitement compris ce que je voulais, merci beaucoup. Plus que le classement et se sera exactement ce que je recherchais .

Ton idée de mettre le nombre de critères supérieurs derriere le matricule est une bonne idée, si tu peu garder ça en faisant le classement, ça serai génialisime !!!!

Encore merci beaucoup

( je vais ouvrir la macro pour y regarder de près et essayé de comprendre un peu comment tu a fait (faut bien que j'essaye de sortir moins bête de cette histoire :/ )

Voici le tri en plus

Si tu as vraiment beaucoup de données, ça risque de galérer. A voir si ça va vraiment trop long.

Cordialement.

222aymeric-v2.zip (11.76 Ko)

ça fonctionne parfaitement !!!

Encore merci beaucoup, je vais rentrer toutes mes données et je reviendrai poster un message si il y a un probleme mais pour l'instant ça me convient parfaitement. A moi de me mettre a la macro maintenant en regardant de près se que tu as fait !!!

Encore merci beaucoup !!!

Re,

Juste pour voir, j’ai lancé la macro avec 500 lignes environ sur chacune des pages (dont environ 250'000 comparaisons de lignes et beaucoup de tris) et ça prend 1 minute sur mon PC au travail (plus rapide que celui que j’ai à domicile).

Mais je me suis alors rendu compte que les 256 colonnes d’Excel 2003 (.xls) peuvent ne pas suffirent. Dans le fichier ci-joint (.xlsm), il y a 64 fois plus de colonnes et si tu lances la macro avec le fichier tel quel, tu as parfois des résultats jusqu’à la colonne AMJ (voir la cellule AMJ 117 par exemple, c’est-à-dire la 1024ème colonne).

Cordialement.

106aymeric-v3.xlsm (184.52 Ko)

C'est tout aussi parfait !!

J'ai une question complémentaire sur la macro en elle meme. Sur la feuille 'donnée 1', si un second tableau de données est créé par exemple en colonne M, toujours sur la meme ligne (11) avec cette fois un nombre de critères qui est de 5. Ce tableau sera comparé avec un autre situé sur une autre feuille qu'on appelera "donnée 3", et comme colonne de début la colonne A et la ligne 11.

Il s'agit donc de la meme macro, enfin du moins du meme mécanisme. Qu'aurais je a changer sur la seconde macro par rapport a la premiere ?

Tu as déjà vu un exercice de trapèze sans filet ? Souvent l'artiste se casse la gueule par terre

Comme la première fois, peux-tu m'envoyer un fichier exemple sous forme de filet ?

A te relire.

Et voici le fichier Excel: sur 'donnée 1' le deuxieme tableau, et sur 'donnée 3' l'autre tableau.

62aymeric-2.zip (10.07 Ko)

Re,

J’ai copié et collé la macro xx et l’ai renommée yy. J’ai indiqué dans cette macro, directement dans le code, les modifications effectuées afin que ça joue pour tes deux autres tableaux.

Merci de bien contrôler que ça corresponde à ton attente.

Amicalement.

121aymeric-2-v2.xlsm (28.15 Ko)

Merci !!! je comprend déja un peu mieux a quoi correspond les differents parametres .

Par contre lorsque tu marque '+ 12 en plus,le +12 à quoi ça correspond sur la feuille ?

With Sheets("donnée 1")
    DerLig_1 = .Range("M" & Rows.Count).End(xlUp).Row 'M au lieu de A
    DerLig_2 = Range("A" & Rows.Count).End(xlUp).Row

    For i = 12 To DerLig_2
        For j = 12 To DerLig_1
            For k = 4 To 8 ' 8 au lieu de 10
                If Cells(i, k) > .Cells(j, k + 12) Then   ' + 12 en plus
                    Compteur = Compteur + 1
                End If
            Next k
            If Compteur > 2 Then
                DerCol = Cells(i, Columns.Count).End(xlToLeft).Column
                Cells(i, DerCol + 1) = .Cells(j, 1 + 12) ' + 12 en plus
                Cells(i, DerCol + 2) = Compteur
            End If
            Compteur = 0
        Next j
    Next i
End With

k vaut ici pour les colonnes. Dans le premier code, tu comparais des données des colonnes 4 à 10 (D à J) sur les deux feuilles concernées ; donc 4 devait prendre successivement les valeurs 4 à 10 dans la boucle 'For Next'.

Maintenant tu veux comparer les colonnes D à H sur la feuille ‘donnée 3’ (tu as oublié un s à données) - c’est-à-dire les colonnes 4 à 8 - avec les colonnes P à T de la feuille ‘donnée 1’, c’est-à-dire les colonnes 16 à 20. Donc quand k vaut 4, k + 12 vaut 16, etc. CQFD.

Je me rends compte maintenant qu’au lieu d’écrire

Cells(i, DerCol + 1) = .Cells(j, 1 + 12) ' + 12 en plus

, j’aurais plutôt dû écrire

Cells(i, DerCol + 1) = .Cells(j, 13) ' + 12 en plus

Amicalement.

d'accord !! .

J'ai essayé vite fait de créer une nouvelle feuille avec un nouveau tableau (donnée 4) et un autre tableau dans donnée 1, a la suite des autre. J'ai modifié ce que tu avais bien identifié dans le code et ça fonctionne correctement.

J'ai qu'une envie c'est de dire que le projet est résolu grâce à toi

Merci beaucoup

Rechercher des sujets similaires à "comparer lignes afficher"