Bonjour,
Private Sub Worksheet_Change(ByVal Target As Range)
Dim dnpe, pnpe, n%, i%, nf$
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, [NPE]) Is Nothing Then
n = Target.Row - 1
With [NPE]
For i = 1 To 3
If .Cells(n, i) = "" Then Exit Sub
Next i
nf = .Cells(n, 1) & " " & .Cells(n, 2)
For i = 1 To Worksheets.Count
If Worksheets(i).Name = nf Then Exit Sub
Next i
i = WorksheetFunction.Match(.Cells(n, 3), [Etab], 0)
dnpe = Array(.Cells(n, 1), .Cells(n, 2), .Cells(n, 3), [Etab].Cells(i, 2))
pnpe = Split("B3 B4 A1 C1")
End With
Application.ScreenUpdating = False
With Worksheets("Fiche modèle")
.Visible = True
.Copy after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = nf
.Visible = False
End With
With Worksheets(nf)
For i = 0 To 3
.Range(pnpe(i)) = dnpe(i)
Next i
End With
End If
End Sub
Procédure évènementielle à coller dans le module de la feuille LISTES SALARIES.
Voir aussi plages nommées (dynamiques) : NPE et Etab dans le Gestionnaire de noms.
La macro est lancée automatiquement lors de changements dans la plage NPE (qui couvre les 3 premières colonnes de la ligne 2 à la ligne qui suit la dernière ligne utilisée). Lorsqu'une nouvelle inscription est complète (3 colonnes), elle crée une feuille à partir du modèle masqué et l'initialise. Elle ne crée pas de feuille si celle-ci existe déjà.
(Pour les inscriptions existantes, il suffit d'éditer l'une des 3 cellules et la revalider pour provoquer la création de la fiche.
Cordialement.