Comparaison données dans 2 feuilles

Bonjour,

Avant toute chose et surtout avant de poster une question, j'ai lu des tas de forum, sans trouver la réponse à mon besoin.

Habituellement je me débrouille pour des macros simple, mais là je cale.

Je suis en Excel 2016 EN

Mon besoin ;

Comparer dans 2 fichiers ayant des colonnes identiques.

Le nombre de lignes n'est pas forcement le même dans les 2 fichiers (même rarement en fait)

Une colonne contient un matricule, et une 2nd contient un Numero de DPT , une 3ieme un Numero de série.

Je dois extraire les lignes (entières) quand pour un matricule donné, l'une des deux autres données (ou les deux) à changé .

Idéalement cette extraction produit un fichier contenant uniquement les lignes ou il y a eu un changement dans la triplette.

Je poste 2 Fichiers. Celui qui termine par 2, est le nouveau que l'on doit comparer au 1.

Il a moins de ligne que le 1 (volontairement) et j'ai crée 4 changement ( marqués pour faciliter, dans la colonne 'Job Responsability' avec le mot 'Changement')

Pour repérer les colonnes à comparer je les ai colorisées en vert.

Merci par avance à vous.

PS : Je dois faire cette comparaison chaque semaine, et les fichiers contiennent environ 15.000 lignes

12fichier1.zip (8.29 Ko)
14fichier2.zip (8.19 Ko)

Bonjour,

2 pour le prix d'1 :

La première macro détecte aussi les nouveaux : Ligne 3 => Y9CBTD...

La deuxième macro ne s'intéresse qu'aux Matricules existants.

Nota : Dans les 2 cas il y a un changement que tu n'as pas détecté : Ligne 31 => Y99CCP

Les 2 classeurs doivent être ouvert avant de lancer la macro.

Attention au nom du fichier Cible !

Le rapport est sorti Feuil2...

A+

17leyeti.xlsm (24.28 Ko)

Hello,

Je vois que je ne suis pas le seul Hiboux qui traine sur les forum au milieu de la nuit

J'ai testé la macro mais je n'arrive pas au résultat dont j'ai besoin et surtout je n'arrive pas à l'arranger car je ne comprends pas la syntaxe de certaine fonction qui m'étaient inconnues jusqu'alors ( ca viendra)

En résumé : J'ai modifié les 2 fichiers à comparer

La base de la comparaison c'est le matricule et la feuille 1

Les changements que l'on doit pouvoir extraire sont les suivants :

  • Matricule qui disparaissent entre la feuille 1 et la 2 ( personne qui part )
  • Matricule qui apparaissent sur la feuille 2 ( nouvel arrivant )
  • Changement de DPT1 ou DPT2 sur la feuille 2 ( changement de l'un ou l'autre des DPT )

Toutes les lignes qui ont subit l'une de ces 3 conditions doivent être mise dans une nouvelle sheet. ( je ne conserve que ces modifications)

Un grand merci aux passionnés qui apportent leur soutient.

Pour faciliter le test, dans les deux feuilles, dans la colonne 'Job Responsability', j'ai mis ce qui change 8)

7fichier1.xlsx (13.99 Ko)
8fichier2.xlsx (13.95 Ko)

bonjour,

dans ce cas utilise ces 2 macros :

Option Explicit
DefBool Y
Sub DetecteLesIntrus()
Dim WbO As Workbook, WbS As Workbook, i%, ii%, k%, kk%, x%
Dim a As Variant, b As Variant, Y, YY, Y1, Y2, Y3
Set WbO = ThisWorkbook
a = WbO.Worksheets("BP").[A1].CurrentRegion.Value
Set WbS = Workbooks("Fichier2.xls")
b = WbS.Worksheets("BP").[A1].CurrentRegion.Value
kk = 1
For i = 1 To UBound(b)
   For ii = 1 To UBound(a)
      Y1 = b(i, 2) = a(ii, 2): Y2 = b(i, 3) = a(ii, 3): Y3 = b(i, 10) = a(ii, 10)
      If Y1 Then YY = True
      If Y1 And Y2 And Y3 Then
         Y = True: Exit For
      End If
   Next
   If Not Y Then
      For k = 1 To 14
         WbO.Worksheets(2).Cells(kk, k) = b(i, k)
      Next
      If YY Then WbO.Worksheets(2).Cells(kk, 15) = "Modif" Else WbO.Worksheets(2).Cells(kk, 15) = "New"
      kk = kk + 1
   End If
   YY = False
   Y = False
Next
Disparus (kk)
End Sub
Sub Disparus(x%)
Dim WbO As Workbook, WbS As Workbook, i%, ii%, k%, kk%
Dim a As Variant, b As Variant, Y
Set WbO = ThisWorkbook
a = WbO.Worksheets("BP").[A1].CurrentRegion.Value
Set WbS = Workbooks("Fichier2.xls")
b = WbS.Worksheets("BP").[A1].CurrentRegion.Value
For i = 1 To UBound(a)
   For ii = 1 To UBound(b)
      If a(i, 2) = b(ii, 2) Then
         Y = True
            Exit For
      End If
   Next
   If Not Y Then
      For k = 1 To 14
         WbO.Worksheets(2).Cells(x, k) = a(i, k)
         WbO.Worksheets(2).Cells(x, 15) = "exit"
      Next
      x = x + 1
   End If
   Y = False
Next
End Sub

A+

Merci pour les macros. Je vais tester vendredi (demain ) car trop de taf pour le moment.

Cette formule bug ( Subscript out of range) et je ne trouve pas la raison ( surtout que je ne comprend pas la fin de la syntaxe avec le A1 et la suite ) :

 a = WbO.Worksheets("BP").[A1].CurrentRegion.Value   

bonjour,

Tu peux remplacer par :

a = WbO.Worksheets("BP").Range("A1").CurrentRegion.Value

ça transpose ta base de donnée dans un Array (tableau virtuel)

ça suppose bien entendu que ta base de donnée commence en A1...

Attention aussi au nom des fichiers xls ou xlsx ou xlsm...

Attention au nom des feuilles "BP" Les 2 fichiers doivent être oiuvert dans la même instance d'Excel...

A+

Rechercher des sujets similaires à "comparaison donnees feuilles"