comparer 2 fichiers et extraire les modifications

olive323

XLDnaute Occasionnel
Bonjour a tous,

Je souhaiterais comparer 2 fichiers et extraire les modification apportées.

si une ligne à été supprimé qu'elle apparaisse dans l'onglet extraction avec une police en rouge.

si une ligne à été modifié qu'elle apparaisse dans l'onglet extraction avec une police en bleu sur la cellule modifié.

si une ligne à été ajouté qu'elle apparaisse dans l'onglet extraction avec une police en vert.

J' ai adapter une macro qui fonction pour les lignes ajoutées mais qui ne me parait pas tres fiable.

Si quelqu'un à une idée.

Cordialement
 

Pièces jointes

  • extraction des lignes ajoutées.zip
    22.1 KB · Affichages: 56

job75

XLDnaute Barbatruc
Re : comparer 2 fichiers et extraire les modifications

Bonjour olive323,

si une ligne à été supprimé qu'elle apparaisse dans l'onglet extraction avec une police en rouge (...)

si une ligne à été ajouté qu'elle apparaisse dans l'onglet extraction avec une police en vert (...)

Si quelqu'un à une idée.

Pas d'idée : je ne sais pas colorer une ligne quand elle n'existe pas :rolleyes:

A+
 

olive323

XLDnaute Occasionnel
Re : comparer 2 fichiers et extraire les modifications

Bonjour,

Ok je n'ai pas été bien clair:rolleyes:

Si une ligne apparait dans l'ancien fichier et qu'elle n'apparait plus dans le nouveau fichier. Est-il possible de repérer cette ligne et de la faire afficher dans l'onglet extraction avec une police en rouge.

Suis je plus clair?
 

ROGER2327

XLDnaute Barbatruc
Re : comparer 2 fichiers et extraire les modifications

Bonjour à tous
À olive323 : j'ai besoin d'une précision sur le sens à donner à ligne modifiée. La comparaison porte-t-elle sur tous les champs ou porte-t-elle sur les champs 2 et suivants des lignes ayant le même premier item ?

Autrement dit, doit-on comparer les lignes du genre
(Ancien) TOTO 35 AB
(Nouveau)TUTU 35 AB
ou bien ne doit-on comparer que les lignes dont le premier item est identique, comme, par exemple
(Ancien) TOTO 35 AB
(Nouveau)TOTO 36 AB ?
S'il s'agit de ce deuxième cas, se peut-il qu'il existe des doublons dans le premier champ, et, le cas échéant quel en est le protocole de traitement ?

(Je penche pour la deuxième interprétation, mais autant en être certain avant de se lancer…)

ROGER2327

#4658


Mercredi 4 Sable 138 (Sainte Barbe (femme à), femme-canon, SQ)
14 Frimaire An CCXIX
2010-W48-6T16:40:31Z
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : comparer 2 fichiers et extraire les modifications

Bonjour
Comme la foire aux bestiaux télévisée me les brisait menu, j'ai bricolé sur la base de la deuxième hypothèse, en imaginant qu'il n'y a pas de doublon dans la première colonne.

Code du bouton Comparaison sur la feuille Ancien fichier :
Code:
[COLOR=DarkSlateGray][B]Private Sub Comparaison_Click()
  toto "Ancien fichier", "Nvx fichier", "Extraction"
End Sub[/B][/COLOR]
Code dans le module ROGER2327 :
Code:
[COLOR=DarkSlateGray][B]Option Explicit

Sub toto(ancien$, nouveau$, destination$)
Dim af, nf, Laf&, Caf&, Lnf&, Cnf&, Lex&, tmp$, i&, oColl As New Collection
Dim Naf As Worksheet, Nnf As Worksheet, Nex As Worksheet, Tobj As Object
  Set Naf = Sheets(ancien)
  Set Nnf = Sheets(nouveau)
  Set Nex = Sheets(destination)
  Set Tobj = xtrct(Naf)
  If Not Tobj Is Nothing Then af = Tobj.Value
  Set Tobj = xtrct(Nnf)
  If Not Tobj Is Nothing Then nf = Tobj.Value
  Set Tobj = xtrct(Nex)
  With Application: .ScreenUpdating = 0: .Calculation = -4135: .EnableEvents = 0: End With
  If Not Tobj Is Nothing Then Tobj.Clear
  Set Tobj = Nothing
  Select Case (VarType(af) = 0) + 2 * (VarType(nf) = 0)
    Case 0: [COLOR=DarkOrange]'af et nf non vides[/COLOR]
      If UBound(af, 2) = UBound(nf, 2) Then
        Lex = 1
        For Laf = 1 To UBound(af, 1)
          tmp = af(Laf, 1)
          For Lnf = 1 To UBound(nf, 1)
            If tmp = nf(Lnf, 1) Then Exit For
          Next Lnf
          If Lnf > UBound(nf, 1) Then [COLOR=DarkOrange]'Enregistrement supprimé[/COLOR]
            Lex = Lex + 1
            Naf.Cells(1, 1).Offset(Laf, 0).EntireRow.Copy destination:=Nex.Cells(1, 1)(Lex)
            Nex.Cells(1, 1)(Lex).Resize(1, UBound(af, 2)).Font.Color = RGB(255, 0, 0)
          End If
        Next Laf
        For Lnf = 1 To UBound(nf, 1)
          tmp = nf(Lnf, 1)
          For Laf = 1 To UBound(af, 1)
            If tmp = af(Laf, 1) Then Exit For
          Next Laf
          If Laf > UBound(af, 1) Then [COLOR=DarkOrange]'Enregistrement ajouté[/COLOR]
            Lex = Lex + 1
            Nnf.Cells(1, 1).Offset(Lnf, 0).EntireRow.Copy destination:=Nex.Cells(1, 1)(Lex)
            Nex.Cells(1, 1)(Lex).Resize(1, UBound(nf, 2)).Font.Color = RGB(64, 192, 0)
          Else
            For Cnf = 2 To UBound(nf, 2)
              If af(Laf, Cnf) <> nf(Lnf, Cnf) Then oColl.Add Cnf
            Next Cnf
            If oColl.Count > 0 Then [COLOR=DarkOrange]'Enregistrement modifié[/COLOR]
              Lex = Lex + 1
              With Nex.Cells(1, 1)(Lex)
                Nnf.Cells(1, 1).Offset(Lnf, 0).EntireRow.Copy destination:=.Cells
                For i = 1 To oColl.Count
                  .Offset(0, oColl(i) - 1).Font.Color = RGB(0, 0, 255)
                Next i
              End With
              Set oColl = Nothing
            End If
          End If
        Next Lnf
      Else
        MsgBox "Les enregistrements ne sont pas comparables."
      End If
    Case -1: [COLOR=DarkOrange]'af vide et nf non vide[/COLOR]
      With Nex.[A2].Resize(UBound(nf, 1), UBound(nf, 2)): .Value = nf: .Font.Color = RGB(64, 192, 0): End With
    Case -2: [COLOR=DarkOrange]'af non vide et nf vide[/COLOR]
      With Nex.[A2].Resize(UBound(af, 1), UBound(af, 2)): .Value = af: .Font.Color = RGB(255, 0, 0): End With
    Case -3: [COLOR=DarkOrange]'af et nf vides[/COLOR]
      MsgBox "Il n'y a rien à traiter"
  End Select
  Nex.Activate
  Set Nex = Nothing
  Set Nnf = Nothing
  Set Naf = Nothing
  With Application: .EnableEvents = 1: .Calculation = -4105: .ScreenUpdating = 1: End With
End Sub

Private Function xtrct(f As Worksheet) As Object
Dim Tobj As Object
  With f
    Set Tobj = .Range(.Cells(1, 1), .Cells(.Cells(.Rows.Count, 1).End(xlUp).Row, .Cells(1, 1).End(xlToRight).Column))
  End With
  If Tobj.Rows.Count > 1 Then Set xtrct = Tobj.Offset(1, 0).Resize(Tobj.Rows.Count - 1)
End Function[/B][/COLOR]
C'est un premier jet, voyez si vous pouvez en tirer quelque chose…
ROGER2327
#4662


Jeudi 5 Sable 138 (Sainte Savate, avocate, SQ)
15 Frimaire An CCXIX
2010-W48-7T01:00:11Z
 

Pièces jointes

  • Projet_olive323.xls
    38 KB · Affichages: 125
Dernière édition:

olive323

XLDnaute Occasionnel
Re : comparer 2 fichiers et extraire les modifications

Bonjour Roger 2327

Vous avez bien fait de ne pas contribuer à l'audience de Miss saucisse ou Miss jambon.

Pour ma part "les yeux jaunes de crocodiles" m'a aidé à trouver le sommeil.

Encore du grand art Roger!!! :)

Je test en live mais ça ma l'air de repondre à mes attentes.

Je reviens vers vous.

Merci beaucoup
 

ROGER2327

XLDnaute Barbatruc
Re : comparer 2 fichiers et extraire les modifications

Re...
Une petite question je n'arrive pas à faire les boutons de macro comme vous le faite. pourriez vous svp m'expliquer?
J'utilise le Bouton de commande de la boîte à outils Contrôles. Un clic-droit sur le bouton en Mode Création me permet d'accéder à ses propriétés et de régler couleurs, police, taille et tutti quanti
Pour accéder à la boîte à outils Contrôles, faire un clic-droit dans la barre des menus.
ROGER2327
#4668


Jeudi 5 Sable 138 (Sainte Savate, avocate, SQ)
15 Frimaire An CCXIX
2010-W48-7T10:36:13Z
 

Discussions similaires

Statistiques des forums

Discussions
312 400
Messages
2 088 087
Membres
103 712
dernier inscrit
Charles authentique