Comparaison 2 fichiers et mise à jour automatique

Bonjour à tous. Je suis débutant en macro, pouvez me conseiller pour débuter une macro (si c'est faisable)

J'ai 2 fichiers différents (qui porteront tjrs le même nom), un qui est la base de données (Classeur1 sur la photo) et un qui contient sa mise à jour (Classeur2).

Dans ces fichiers, 2 colonnes identiques à chaque fois avec la première qui comporte la référence et la deuxième le numero d'indice.

J'aurais voulu pouvoir comparer les numéros d'indice de chaque référence et pouvoir mettre à jour mon fichier base de données si il y a une différence dans la colonne numéro de version.

De plus si des Documents supplémentaires sont présent dans le 2ème fichier, est-il possible de copier ces lignes à la suite de mon 1er fichier?

Merci d'avance

comparaison

Hello,

Une proposition ( à noter que je suis sous windows, les dossiers sont séparés par des anti slah ) :

Sub diff_wkb()

Const path_wkb As String = "C:\Users\Dahmien\Documents\EXCEL_VBA\Nouveau dossier\" 'Chemin fichier
Const name_file1 As String = "Classeur1.xlsx" 'Nom fichier BASE avec extension
Const name_file2 As String = "Classeur2.xlsx" 'Nom fichier UPDATE avec extension
Dim wkb1_base As Workbook, wkb2_update As Workbook
Dim wkb1_sheet As Worksheet, wkb2_sheet As Worksheet
Dim f_row_data&, f_column_data&
Dim array_update
Dim Rng As Range
' Def des classeurs
Set wkb1_base = Workbooks.Open(path_wkb & name_file1)
Set wkb2_update = Workbooks.Open(path_wkb & name_file2)
'Def des feuilles
Set wkb1_sheet = wkb1_base.Sheets(1)
Set wkb2_sheet = wkb2_update.Sheets(1)
'Determine la premiere ligne & premiere colonne du tableau pour le fichier MAJ + mise en memoire
f_row_data = 1
f_column_data = 1
array_update = wkb2_sheet.Cells(f_row_data, f_column_data).CurrentRegion
With wkb1_sheet 'Vide la base
    With .Cells
        .ClearContents
    End With
    Set Rng = .Range(.Cells(f_row_data, f_column_data), _
        .Cells(UBound(array_update, 1) - LBound(array_update, 1) + f_row_data, _
        UBound(array_update, 2) - LBound(array_update, 2) + f_column_data))
End With
Rng.Value2 = array_update 'Injecte les données du fichier UPDATE
wkb1_base.Close True 'Ferme la BASE + enregistre
wkb2_update.Close False 'Ferme la BASE + sans enregistrer
'Libère la mémoire
Set wkb1_base = Nothing
Set wkb2_update = Nothing
Set wkb1_sheet = Nothing
Set wkb2_sheet = Nothing

End Sub

Slt. Merci!

J'ai essayé, le fichier de base ouvre bien celui de l'update mais pas de changement.

Je vois que tu mets dans ton code une ligne pour vider la base. Est-ce que cela efface la base pour copier l'update? Il faudrait en fait que je garde la base comme elle est car même l'update n'aura pas forcément le même nombre de lignes et ca va mettre le bordel dans mes autres colonnes.

Tu crois que c'est possible de comparer juste les indices de chaque document et de mettre à jour ceux-ci? En sachant qu'ils ne seront pas forcement dans le même ordre.

Pareil si des nouvelles lignes sont présentes dans l'update, il faudrait qu'elles s'ajoutent à la fin.

J'ai ajouté mes fichiers test (j'a peut-être oublié de modifier quelques chose dans ton code)

8base.xlsm (22.59 Ko)
10update.xlsx (14.35 Ko)

Hello,

Je ne comprends pas :

Il faudrait en fait que je garde la base comme elle est car même l'update n'aura pas forcément le même nombre de lignes

et

Pareil si des nouvelles lignes sont présentes dans l'update, il faudrait qu'elles s'ajoutent à la fin

tu veux récupérer les lignes de l'update ou pas ?

Est-ce que cela efface la base pour copier l'update?

Oui, pour ta demande et les fichiers que tu présentes, je ne vois pas pourquoi faire +. Par exemple ceci :

Tu crois que c'est possible de comparer juste les indices de chaque document et de mettre à jour ceux-ci

Concernant :

ca va mettre le bordel dans mes autres colonnes.

Il faut juste délimiter une plage de données

array_update = wkb2_sheet.Range("C2:D65000").value
Rechercher des sujets similaires à "comparaison fichiers mise jour automatique"