Bonsoir,
Procédure pour réaliser la synthèse à partir des données de trois feuilles source :
Sub Synthèse()
Dim Lib, LID, Syn, Tmp, f, i&, j&, k%
With ActiveSheet.Range("A1").CurrentRegion
Lib = .Rows(2).Value
.Offset(2).ClearContents
End With
With Worksheets("Feuil1").Range("A1").CurrentRegion.Offset(1)
Syn = .Resize(.Rows.Count - 1, UBound(Lib, 2)).Value
LID = .Resize(.Rows.Count - 1, 1).Value
End With
For Each f In Array("Feuil2", "Feuil3")
Tmp = Worksheets(f).Range("A1").CurrentRegion.Value
On Error Resume Next
For i = 2 To UBound(Tmp)
j = WorksheetFunction.Match(Tmp(i, 1), LID, 0)
k = WorksheetFunction.Match(Tmp(i, 2), Lib, 0)
If Err.Number = 0 Then
Syn(j, k) = "X"
Else
Err.Clear
End If
Next i
On Error GoTo 0
Next f
ActiveSheet.Range("A3").Resize(UBound(Syn, 1), UBound(Syn, 2)).Value = Syn
End Sub
Méthode : travail sur tableau reposant sur le fait que la source ID | Nom | Prénom est à rapatrier intégralement dans synthèse, les ID étant unique, il ne peut y avoir de doublon sur cette source qui sert ainsi de base à la constitution de la synthèse.
1) Sur la feuille synthèse, on récupère en tableau (Lib) la ligne 2 (2e ligne d'en-tête) qui servira de référence pour les positions de libellés des groupes et rôles,
puis on efface les données éventuellement existantes.
(NB- Noter la petite modification apportée à l'en-tête de la feuille afin de placer tous les noms de champs en 2e ligne.)
2) Sur la feuille 1 (source ID | Nom | Prénom), on récupère la totalité des données (en-tête exclue) mais e agrandissant le tableau (Syn) en nombre de colonnes pour l'aligner sur le tableau des libellés ; ce tableau Syn servira ainsi de support pour y adjoindre les données groupes et rôles ;
on récupère également la 1re colonne (sans en-tête) en tableau (LID), référence pour les positions des ID.
3) On démarre une boucle sur les deux autres feuilles (groupes et rôles), elles ont la même structure, ID en 1 et Groupe ou Rôle en 2, et peuvent donc être trraitées identiquement.
Prélèvement de l'ensemble des données dans un tableau (Tmp).
On parcourt les lignes de ce tableau de la ligne 2 à la fin ; pour chaque ligne :
- recherche du rang de l'ID dans LID
- recherche du rang du groupe ou rôle dans Lib
au moyen de Match (fonction EQUIV d'Excel).
Ces rangs correspondent aux index ligne et colonne dans le tableau Syn.
Disposant des coordonnées, on affecte la valeur "X" à cet emplacement dans le tableau.
La recherche est mise sous gestion d'erreur pour éviter qu'un faux Groupe ou Rôle ne puisse interrompre la procédure.
4) Une fois les deux feuilles traitées, on affecte à la plage de la feuille en A3, redimensionnée à la taille du tableau Syn, ledit tableau Syn.
Cordialement.