1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| Sub Refresh()
Dim wbA As Workbook, wbB As Workbook
Dim wsA As Worksheet, wsB As Worksheet
Dim nbLigA As Long, nbLigB As Long, i As Long, j As Long
Dim ClasseurA As String, ClasseurB As String
Dim copyRange As Range
ClasseurA = "ClasseurA.xlsx"
ClasseurB = "ClasseurB.xlsx"
' Vérifier si les classeurs sont déjà ouverts
If Not WorkbookIsOpen(ClasseurA) Then
Set wbA = Workbooks.Open("C:\chemin\vers\ClasseurA.xlsx")
Else
Set wbA = Workbooks(ClasseurA)
End If
If Not WorkbookIsOpen(ClasseurB) Then
Set wbB = Workbooks.Open("C:\chemin\vers\ClasseurB.xlsx")
Else
Set wbB = Workbooks(ClasseurB)
End If
Set wsA = wbA.Sheets("Feuil1")
Set wsB = wbB.Sheets("Feuil1")
' Trouver le nombre de lignes dans chaque feuille de calcul
nbLigA = wsA.Range("D" & wsA.Rows.Count).End(xlUp).Row
nbLigB = wsB.Range("D" & wsB.Rows.Count).End(xlUp).Row
' Si ClasseurB a des données, passer à la ligne suivante
If nbLigB > 1 Then nbLigB = nbLigB + 1
' Parcourir les lignes dans ClasseurA
For i = 1 To nbLigA
' Vérifier si l'identifiant client existe dans ClasseurB
If IsError(Application.Match(wsA.Cells(i, 4), wsB.Range("D:D"), 0)) Then
' Copier toute la ligne à ClasseurB si l'identifiant client n'existe pas
Set copyRange = wsA.Rows(i)
copyRange.Copy Destination:=wsB.Rows(nbLigB)
nbLigB = nbLigB + 1
End If
Next i
' Supprimer les lignes dans ClasseurB qui ne sont pas dans ClasseurA
For j = nbLigB - 1 To 1 Step -1
If IsError(Application.Match(wsB.Cells(j, 4), wsA.Range("D:D"), 0)) Then
wsB.Rows(j).Delete
End If
Next j
' Enregistrer et fermer les classeurs
If Not WorkbookIsOpen(ClasseurA) Then
wbA.Close SaveChanges:=False
End If
If Not WorkbookIsOpen(ClasseurB) Then
wbB.Close SaveChanges:=True
End If
End Sub |
Partager