Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Comparer deux listes en vba

fabt33

XLDnaute Nouveau
Bonjour,

De nouveau je fais appel à vos connaissances, car les miennes sont limitées.

Je souhaiterais comparer deux listes de la manière suivante :

Feuil 2 -> « une liste variable », qui peut contenir un grand nombre d’entrées.
Elle peut être composée de plusieurs fois le même « ID » avec même valeur ou différente ou vide .
Elle n’est pas forcément classée par ordre alphabétique et peut contenir des lignes vides.
Il se peut aussi qu’il n’y ait pas de correspondance ( id ) à comparer.

Rechercher/comparer sur Feuil 1 -> « liste fixe »

Si « valeur » de feuil2 est égale à « vide » ne pas prendre en compte
Si « valeur » de feuil2 est différents de feuil1 mettait en évidence en feuil2 les résultats avec un marqueur « X » dans la cellule de gauche

Un petit exemple qui devrait être plus explicite





Si vous avez une solution avec une formule je pourrai certainement m’en contenter

D’avance merci pour vos retours.

Cdt,

Fabien
 

Pièces jointes

  • exemple.xlsm
    9.1 KB · Affichages: 8

fabt33

XLDnaute Nouveau
Bonjour Phil,

Tout d'abord merci pour ta proposition.
*l'image et le fichier joint ne sont là que pour exemples. Et pour être honnête j'ai fermé mon classeur sans l'enregistrer après avoir fait la Screenshots .. alors j'ai recommencé avec d'autres données

J'ai apporté une toute petite modification pour que ça corresponde à ma demande:
Code:
=SI(B2="";"";SIERREUR(SI(RECHERCHEV(A2;Feuil1!$A$2:$B$7;2;FAUX)=B2;"";"X");""))
Si B2="" ne rien afficher

Cette formule répond à mon attente, encore merci.

Néanmoins je laisse le sujet ouvert, si une personne se présente à proposer une solution en Vba je serai encore plus satisfait pour la suite de mon projet.

Très cordialement,

Fab.
 
Dernière édition:

Phil69970

XLDnaute Barbatruc
Bonjour @fabt33

Une autre version sur le même principe mais en VBA
Je suis partie du principe que la liste est fixe c'est à dire qu'l n'y a pas de nouvelle entrée
Rechercher/comparer sur Feuil 1 -> « liste fixe »
Bien sur tu peux modifier les valeurs de la feuille 1 mais pas rajouter de nouvelle ligne

*Merci de ton retour

@Phil69970
 

Pièces jointes

  • Compare V1.xlsm
    16.1 KB · Affichages: 10

fabt33

XLDnaute Nouveau
Bonjour Phil,

Dans un premier temps désolé de ma réaction légèrement tardive mes journées ont bien été remplies

Je tiens à te remercier pour ton implication et ta nouvelle proposition, qui en application est viable.

Dans la même idée j'étais parti sur une macro de ce type, sans boucle avec un contrôleur pour déclencher ( en fonction des modifications apporté à ma liste ).
VB:
Range("C1").Select

ActiveCell.Formula = "*FORMULE*"

Selection.AutoFill Destination:=Range("C1:C" & Range("a65536").End(xlUp).Row)

Mais pour la suite de mon projet ça implique que je dois copier/coller des colonnes et autres manipulations.
Ce n'est pas vraiment pratique ni optimisé pour mes besoins.
Il me faudrait une macro qui boucle sur toutes les lignes et qui effectue ma demande.
De plus je pourrais utiliser et adapter cette méthode sur d'autres besoins, j'ai d'autre comparaisons avec plusieurs critères du même acabit ( une fois que j'aurais compris le schmilblick )

De mon côté j'ai commencé un petit quelque chose qui n'est pas encore abouti:

VB:
Sub test()

Dim DATA As Object 'déclare la variable DATA (DATA liste variable )
Dim LISTE As Object 'déclare la variable LISTE (LISTE liste fixe)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim TC As Variant 'déclare la variable TC (Plage de cellule)
Dim I As Integer 'déclare la variable I (Incrément)
Dim RN As Range 'déclare la variable RN (Recherche Nom)
Dim RV As Range 'déclare la variable RN (Recherche Valeur)


Sheets("DATA").Select
Columns("C:C").Select
Selection.Clear


Set DATA = Sheets("DATA") 'définit l'onglet DATA
   Set LISTE = Sheets("LISTE") 'définit l'onglet LISTE
 
    DL = DATA.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée de la colonne 1(A) de l'onglet DATA
    TC = DATA.Range("A1:A" & DL) 'définit la plage
  
  
For I = UBound(TC, 1) To 2 Step -1 'boucle inversée sur toutes les lignes de ma plage TC (de la dernière à la première)
Set RN = LISTE.Columns(1).Find(TC(I, 1), , xlValues, xlWhole) ' Sur classeur: LISTE(liste var), colonne 1, si trouve une occurence sur classeur DATA: ma plage (TC) pour chacune des lignes alors:
    If Not RN Is Nothing Then DATA.Rows(I).Cells(3).Value = "X" 'ajout d'un marqueur "X" en colonne 3 (C)
Next I
  
    Range("A1").Select
      
End Sub

Pour le moment le résultat en sortie de la boucle ne fonctionne que sur les occurrences des colonnes A de la feuil "DATA" & colonne A de la feuil "LISTE "
Mon problème est que je ne sais pas vraiment comment imbriquer une seconde condition:

Si colonne A de DATA = colonne A LISTE, alors NE comparer que les valeurs des colonnes B/DATA & B/LISTE
Si résulta différent alors mettre un marqueur "x" en colonne C / DATA

J'ai bien essayé certaines choses, mais mes compétences et connaissances en VBA sont encore trop limitées

J'ai bien espoir que tu puisses m'éclairer de ta lanterne @Phil69970

Cdt,

Fabien
 

Pièces jointes

  • listefixe.xlsm
    20.5 KB · Affichages: 7
Dernière édition:

Phil69970

XLDnaute Barbatruc
Bonjour @fabt33

J'ai cru comprendre que le fichier de mon post #4 fonctionnait et correspondait à ta demande ?
Je tiens à te remercier pour ton implication et ta nouvelle proposition, qui en application est viable.

Donc je ne comprends pas ce que tu veux faire de plus.

*Je constate juste que dans le 1er fichier que tu as fourni tu as écrit :
Rechercher/comparer sur Feuil 1 -> « liste fixe »
1)Dans ton 2eme fichier ce n'est plus la même liste !

2)Les noms de tes onglets sont différents entre le 1er et 2eme fichier !

D’où l'utilité de fournir un fichier
- représentatif, même organisation des lignes et des colonnes, mêmes libellés, mêmes noms de feuilles...
- anonymisé, pas de données personnelles réelles tels nom, n° sécu, adresse ...
- simplifié, une quinzaine de lignes reproduisant l'ensemble des différents cas envisageables


Pour rappel le principe du forum une question ==> une ou des réponses de un ou plusieurs intervenants
-Si tu veux je peux adapter le fichier du post #4 avec par exemple un nombre variable de ligne pour l'onglet liste ? (On est toujours dans la même question avec une demande d'adaptation)

-Maintenant si tu veux complétement autre chose je te suggère de faire une autre demande avec ton autre question...

-Mais j'ai plutôt l'impression que tu veux réinventer la roue avec une usine à gaz et c'est beaucoup plus compliqué....

*Merci de ton retour

@Phil69970
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…