XL 2010 Trouver les différences dans un tableau

Cayou3131

XLDnaute Nouveau
Bonjour à tous!

Désolé pour ma question très basique mais je ne trouve pas la solution à une formulation de base.

J'ai 2 tableaux dans le même fichier. L'un est ANCIEN et l'autre est RÉCENT. Je veux les comparer et faire ressortir SEULEMENT les lignes ou il y a des changements.

Donc afficher toute la ligne en question et INDIQUER la cellule différente en couleur AINSI que le numéro référence de la ligne.

Possible sans VBA svp.

Merci les amis

Simon
 

Pièces jointes

  • Wednesday.xlsx
    14.5 KB · Affichages: 21

cathodique

XLDnaute Barbatruc
Bonjour @Cayou3131 , Le Forum,

un essai mais je ne vois pas comment obtenir ton modèle en feuille différence sans vba.
j'ai utilisé une mfc en feuille nouveau (image ci-dessous)
1623549562004.png

Ensuite formule en feuille1. Ton fichier en retour

Bonne journée.
 

Pièces jointes

  • Wednesday.xlsx
    31.3 KB · Affichages: 6

soan

XLDnaute Barbatruc
Inactif
Bonjour Simon, cathodique,

ton fichier en retour. :)

regarde la 1ère feuille "Ancien", j'ai amélioré la présentation ; les données sont toutes visibles entièrement ; fais Ctrl F2 ; tu peux voir que l'Aperçu avant impression est en mode paysage, sur une seule page ➯ c'est tout prêt à être imprimé ! appuie sur Echap pour quitter l'Aperçu ; va sur la 2ème feuille "Nouveau" ; j'y ai fait la même chose ; va sur la 3ème feuille "Différence" ; idem ; fait Ctrl e ➯ travail effectué ! 😊



code VBA de Module1 :

VB:
Option Explicit

Sub ShowDiff()
  If ActiveSheet.Name <> "Différence" Then Exit Sub
  Dim m&, n1&, n2&, n3&: m = Rows.Count
  Dim sh1 As Worksheet: Set sh1 = Worksheets("Ancien")
  n1 = sh1.Cells(m, 1).End(3).Row: If n1 = 1 Then Exit Sub
  Dim sh2 As Worksheet: Set sh2 = Worksheets("Nouveau")
  n2 = sh2.Cells(m, 1).End(3).Row: If n1 = 1 Then Exit Sub
  Dim D(1 To 15), P1&, G1$, P2&, G2$, i&, j%, k As Byte
  n3 = Cells(m, 1).End(3).Row: Application.ScreenUpdating = 0
  If n3 > 3 Then
    With Range("A4:O" & n3)
      .Interior.ColorIndex = -4142: .ClearContents
    End With
  End If
  n3 = 4
  For i = 2 To n1
    P1 = sh1.Cells(i, 1): G1 = sh1.Cells(i, 2)
    P2 = sh2.Cells(i, 1): G2 = sh2.Cells(i, 2)
    If (P1 = P2) Or (G1 = G2) Then
      Erase D: k = 0
      For j = 1 To 15
        If sh1.Cells(i, j) <> sh2.Cells(i, j) Then
          D(j) = 1: k = k + 1
        End If
      Next j
      If k > 0 Then
        sh2.Cells(i, 1).Resize(, 15).Copy Cells(n3, 1)
        For j = 1 To 15
          If D(j) = 1 Then Cells(n3, j).Interior.Color = 255
        Next j
        n3 = n3 + 1
      End If
    End If
  Next i
End Sub

si besoin, tu peux demander une adaptation.
à te lire pour avoir ton avis. ;)

soan
 

Pièces jointes

  • Wednesday.xlsm
    27 KB · Affichages: 7

Dranreb

XLDnaute Barbatruc
Bonjour.
Étant donné qu'il était précisé "Possible sans VBA svp."
Je m'attendais à ce que quelqu'un propose une solution avec Power Query.
Mais comme ce n'est pas le cas j'y vais aussi de ma solution VBA.
 

Pièces jointes

  • GigogneCayou3131.xlsm
    69.8 KB · Affichages: 4

soan

XLDnaute Barbatruc
Inactif
Possible sans VBA svp.

@Simon

j'espère que tu es en bonne santé ! :) mais supposons qu'on soit en hiver, que tu as été faire du ski, et que par manque de chance, tu t'es cassé une jambe ! 😭 alors bien sûr, on t'a amené à l'hôpital, et le docteur vient pour te soigner et te mettre un plâtre ; du moins, c'est ce qu'il avait l'intention de faire... car toi, tu lui dit : « docteur, guérissez-moi s'il-vous-plaît, mais surtout, ne me mettez pas un plâtre ! » ; alors j'imagine la réponse du docteur : « que dois-je faire, alors ? espérez-vous que j'arrive à vous guérir par l'imposition des mains ? voulez-vous que je fasse appel à un rebouteux ? mais peut-être préférez-vous l'intervention d'un sorcier vaudou ? »

ben désolé : moi, en tout cas, j'ai aucune solution par formule à proposer ! 😭 c'est pour ça que j'ai proposé une solution par VBA dans mon post #3. (si tu ne l'as pas déjà vue, clique sur le lien bleu pour aller dessus)

soan
 

Cayou3131

XLDnaute Nouveau
WOW .....vous êtes des MACHINES les amis!!

Mon fichier REEL compte 500 lignes par 35 colonnes.

Mon inexpérience dans le VBA vient de me faire la leçon que je n'aurais pas dû vous cacher ce petit détail.

Question1 : Est-il possible d'agrandir le VBA pour cette dimension?

Question 2: Si je veux comparer 2 fichiers, puis-je mettre une ligne indiquant manuellement la date et l'heure à laquelle elle fait référence ( donc différent de ANCIEN et NOUVEAU) dans chacun de ces onglets (ANCIEN et NOUVEAU).

Merci de aide précieuse encore une fois!!!
 

chris

XLDnaute Barbatruc
Bonjour à tous
Étant donné qu'il était précisé "Possible sans VBA svp."
Je m'attendais à ce que quelqu'un propose une solution avec Power Query.
Cela suppose que Cayou installe l'add on PowerQuery. Cela prend 5 mn

Mon fichier REEL compte 500 lignes par 35 colonnes
et fournisse un fichier représentatif, PowerQuery s'appuyant sur les titres de colonnes
Or l'exemple n'a que 15 colonnes...
 

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 153
Membres
103 136
dernier inscrit
Zoulander