Créer une plage nommée conditionnée

Bonjour à tous,

Pardon si mon erreur est très simple, je suis nouveau en VBA.

J'essaye de créer 93 plages nommées et veux que chaque plage se réfère à une formule comme celle qui suit :

=SI('After BLANK'!C294;'After BLANK'!C5:C293;0)

Au final, je veux donc une plage nommée conditionnée pour C5:C293, une pour D5:D293, etc jusqu'à CQ5:CQ293.

J'ai créé cette macro qui ajoute et nomme correctement les plages mais je n'arrive pas à écrire la formule.

Sub PlageNommée()

m = 2
For k = 3 To 95
    m = m + 1
    NomColonne = Worksheets(3).Cells(1, m).Address(RowAbsolute:=False, ColumnAbsolute:=False)
    NomColonne = CStr(Left(NomColonne, Len(NomColonne) - 1))
    Formule = "SI('After BLANK'!" & NomColonne & "294;'After BLANK'!" & NomColonne & "5:" & NomColonne & "293;0)"
    ActiveWorkbook.Names.Add Name:="Puit_" & Worksheets(3).Cells(4, m).Value, RefersTo:=Formule
Next k

End Sub

Quand je vais dans le Gestionnaire de Noms, la formule est écrite entre guillemets :

="SI('After BLANK'!C294;'After BLANK'!C5:C293;0)"

Je suis sûr que la solution est toute simple mais je n'arrive pas à la trouver en ligne.

Merci d'avance pour votre aide.

Pour ceux que ça pourrait intéresser, j'ai finalement j'ai trouvé une façon détournée de le faire :

Sub Plages()

m = 2
For k = 3 To 95
    m = m + 1
    NomColonne = Worksheets(3).Cells(1, m).Address(RowAbsolute:=False, ColumnAbsolute:=False)
    NomColonne = CStr(Left(NomColonne, Len(NomColonne) - 1))
    If Worksheets(3).Cells(294, m).Value = True Then
        ActiveWorkbook.Names.Add Name:="Puit_" & Worksheets(3).Cells(4, m).Value, RefersTo:=Worksheets(3).Range(Cells(5, m), Cells(293, m))
    Else
        ActiveWorkbook.Names.Add Name:="Puit_" & Worksheets(3).Cells(4, m).Value, RefersTo:=0
    End If
Next k

End Sub

Et pour que cette macro s'exécute à chaque fois qu'une cellule de C294:CQ294 est modifiée, j'ai d'abord écris ça :

Private Sub Worksheet_Change(ByVal Target As Range)

Dim KeyCells As Range
Set KeyCells = Range("C294:CQ294")
If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
    Call Plages
End If

End Sub

Mais ça n'a pas marché car les cellules C294:CQ294 sont liées à des CheckBoxes et Worksheet_Change ne détecte pas la modification des cellules quand celle-ci passe par des CheckBoxes. J'ai donc écrit ça à la place :

Sub InitCBs()

Dim cb As CheckBox
For Each cb In Worksheets(3).CheckBoxes
    With cb
        .OnAction = "Plages"
    End With
Next cb

End Sub

Et je lance cette macro à l'ouverture :

Private Sub Workbook_Open()

Call InitCBs

End Sub

Et voilà !

Rechercher des sujets similaires à "creer plage nommee conditionnee"