Bonjour,
J'ai pris la liberté d'ajouter une feuille que j'ai nommée Conciliation.
Sur cette feuille apparaissent un tableau des paramètres de conciliation et deux boutons.
Le bouton Sélectionner permet de faire apparaître tour à tour, à chaque appui, le nom de l'un des fichiers Rapport (avec les paramètres de colonnes sur la ligne), puis les noms de 2 de ces fichiers, puis les noms des 3 fichiers, puis aucun, et on recommence. (On modifie simplement la couleur de police pour faire apparaître ou disparaître...)
A partir de cette sélection, le 2e bouton opèrera une boucle pour détecter les fichiers sélectionnés et lancera autant de fois la procédure en lui passant les noms de fichier, les décalages à opérer pour que les plages testées soient prélevées de façon que la première et la dernière colonnes soient les deux colonnes à considérer, les nombres de colonnes de ces plages, et une valeur booléenne à True si la colonne Montant se trouve en première colonne.
Ces éléments étant passés à la procédure de conciliation, elle saura sur quelles feuilles opérer, effectuer le prélèvement en tableau des plages, disposant de la 1re colonne et du nombre de colonnes, en déduira les indices de ces tableaux (la première colonne est d'indice 1, et la dernière d'indice égal au nombre de colonnes) et pourra inverser les indices s'il y a inversion des colonnes.
Les procédures des boutons (ActiveX) se trouveront dans le module de la feuille Conciliation.
Dim n As Integer, slct As Boolean
Private Sub cbConcil_Click()
Dim fB$, fR$, dB%, dR%, nB%, nR%, i%, k%, kk%, ivB As Boolean, ivR As Boolean
With Me.Range("B4:G6")
fB = .Cells(1, 1)
For i = 1 To 3
If .Cells(i, 4).Font.Color = vbBlack Then
fR = .Cells(i, 4)
k = Me.Range(.Cells(i, 2) & 1).Column
kk = Me.Range(.Cells(i, 3) & 1).Column
If kk < k Then ivB = True
dB = IIf(ivB, kk, k) - 1
nB = IIf(ivB, k, kk) - dB
k = Me.Range(.Cells(i, 5) & 1).Column
kk = Me.Range(.Cells(i, 6) & 1).Column
If kk < k Then ivR = True
dR = IIf(ivR, kk, k) - 1
nR = IIf(ivR, k, kk) - dR
Concilier fB, fR, dB, dR, nB, nR, ivB, ivR
End If
Next i
End With
End Sub
Private Sub cbSélect_Click()
Dim Slc, i%, s%
Slc = Array(0, 1, 2, 4, 3, 5, 6, 7)
With Me.Range("C4:G6")
If Not slct Then
For i = 1 To 3
s = s + IIf(.Cells(i, 3).Font.Color = vbBlack, 2 ^ (i - 1), 0)
Next i
n = WorksheetFunction.Match(s, Slc, 0) - 1
slct = True
End If
For i = 1 To 3
.Rows(i).Font.Color = IIf(2 ^ (i - 1) And Slc(n), vbBlack, vbWhite)
Next i
n = (n + 1) Mod 8
End With
End Sub
La procédure principale est déjà modifiée, sauf un petit point qui me reste à coder : les colorations et décolorations (au démarrage), qui doivent être individualisées par sécurité, compte tenu des dispositions variables (puis un minimum de test pour vérifier qu'il n'y a pas d'erreur fatale au lancement !)
Je ne peux te garantir que je vais faire ce dernier codage dans la soirée, mais tu devrais avoir le résultat définitif demain.
Cordialement et bon dimanche.