Bon alors définissez RngDon comme ça :
Set RngDon = Intersect(Wsh.[12:1000000], Wsh.UsedRange)
Comme ça sa propre ligne 1 sera toujours la ligne 12 de la feuille.
S'il ne risque plus d'y avoir de feuille avec une seule cellule renseignée comme dans le fichier de test ça ne sert plus à rien de traiter le cas: affectez juste T = RngDon.Value
C'est parfait ca marche Impec,
sur mon fichier les cellules à masque sont sur des onglets qui commencent tous par le même nom
mapomme m'avait aidé dans ce sens avec le code ci-dessous
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Const PreFix = "Parent"
Dim i&, col1$, col2$
If LCase(Sh.Name) Like LCase(PreFix) & "*" Then
With Sh
If LCase(.Range("d2")) = "kom" Then
' cas des colonnes C et D -> type M1
col1 = "c": col2 = "d"
ElseIf LCase(.Range("d2")) = "mok" Then
' cas des colonnes D et E -> type M2
col1 = "d": col2 = "e"
Else
Exit Sub
End If
Application.ScreenUpdating = False
.UsedRange.EntireRow.Hidden = False
For i = .Cells(.Rows.Count, "d").End(xlUp).Row To 3 Step -1
.Rows(i).Hidden = (.Cells(i, col1) = 0) And (.Cells(i, col2) = 0)
Next i
Application.ScreenUpdating = True
End With
End If
End Sub
Mais je ne sais pas l'adapter au code que vous m'avez aidé à réaliser
Je pense que ca augmenterait l'efficacité de l'optimisation