Bien, sous réserve du cas où la colonne M est vide, un double-clic sur FICHIER en colonne M va déclencher :
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim F$, ln
If Target.Column = 13 Then
If Target <> "" And IsNumeric(Target.Offset(, -12)) Then
F = CStr(Target.Offset(, -12))
On Error Resume Next
Worksheets(F).Activate
If Err.Number <> 0 Then
CréerFiche F
ln = Target.Row
AlimF F, ln
End If
Cancel = True
End If
End If
End Sub
La procédure (évènementielle dans le module de la feuille) s'assure que l'on a bien double-cliqué en M, que la cellule double-cliquée n'est pas vide, et que la cellule en colonne A de la même ligne contient une valeur numérique. A ces conditions, elle récupère dans une variable cette valeur (convertie en texte) et tente d'activer la feuille ainsi désignée.
Si elle existe elle est activée, sinon erreur prise en charge, pour lancer une procédure de création de cette feuille : CréerFiche (placée dans le module de la feuille) à laquelle on passe le nom.
Sub CréerFiche(nf As String)
With Worksheets("Fiche")
.Visible = xlSheetVisible
.Copy after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = nf
.Visible = xlSheetHidden
End With
End Sub
Elle démasque le modèle, en fait une copie à la fin (après les autres feuilles), la nomme, et remasque le modèle.
Elle rend la main à la procédure appelante qui, sachant que la feuille est désormais créée, lance alors une procédure destinée à alimenter la Fiche : AlimF (dans Module1).
Sub AlimF(nf As String, ln As Integer)
Dim kF, kB, i%, wsS As Worksheet
kF = Split("G1 G2 G3 G4 G5 A14 B17 B18 B21 D21 G21 G22 A23 E23 E24 E25 B40 B41 E40 G40")
kB = Array(11, 5, 4, 2, 20, 9, 11, 10, 13, 14, 3, 12, 15, 17, 16, 18, 11, 4, 10, 5)
Set wsS = Worksheets("FICHIER")
Application.ScreenUpdating = False
With Worksheets(nf)
For i = 0 To 19
.Range(kF(i)) = wsS.Cells(ln, kB(i))
Next i
End With
End Sub
Cette procédure crée un tableau des référence de cellules cibles à servir, crée un autre tableau des numéros de colonnes des cellules sources destinées à alimenter les premières), et une boucle sur ces deux tableaux en concordance permet d'affecter à chaque cellule cible la valeur de la cellule source qui lui revient.
Cordialement.