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)
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.
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
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.
ç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.
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.
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.
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 Withk 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 plusAmicalement.
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