Insérer/Créer une formule en vba dans une cellule
Bonjour,
J'essai d'insérer dans une cellule une formule construire entièrement à la main. Je dois la construire à la main car le nombre de ligne de ma feuille general_report peux-être variable. (Elle provient d'un export de
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| Sub writeFormula()
Dim strFormula As String
Dim row As Long
row = lastRow("general_report")
strFormula = "=COUNTIFS(general_report!$BH$5:$BH$" & row & ";""S0 - Blocking"";general_report!$Q$5:$Q$" & row & ";""*""&DefectBySeverityAndSubSystem!B3&""*"";general_report!$E$5:$E$" & row & ";""<>Canceled"";general_report!$E$5:$E$" & row & ";""<>Resolved"";general_report!$E$5:$E$" & row & ";""<>UAT Resolved"";general_report!$E$5:$E$" & row & ";""<>Closed"")"
On Error GoTo errorHandler
Debug.Print strFormula
Debug.Print "=COUNTIFS(general_report!$BH$5:$BH$" & row & ";""S0 - Blocking"";general_report!$Q$5:$Q$" & row & ";""*""&DefectBySeverityAndSubSystem!B3&""*"";general_report!$E$5:$E$" & row & ";""<>Canceled"";general_report!$E$5:$E$" & row & ";""<>Resolved"";general_report!$E$5:$E$" & row & ";""<>UAT Resolved"";general_report!$E$5:$E$" & row & ";""<>Closed"")"
Worksheets("DefectBySeverityAndSubSystem").Activate
'range("D11").Value = strFormula
'range("D11").Formula = strFormula
'range("D11").FormulaR1C1 = strFormula
'range("D11").Value = "=COUNTIFS(general_report!$BH$5:$BH$" & row & ";""S0 - Blocking"";general_report!$Q$5:$Q$" & row & ";""*""&DefectBySeverityAndSubSystem!B3&""*"";general_report!$E$5:$E$" & row & ";""<>Canceled"";general_report!$E$5:$E$" & row & ";""<>Resolved"";general_report!$E$5:$E$" & row & ";""<>UAT Resolved"";general_report!$E$5:$E$" & row & ";""<>Closed"")"
'range("D11").Formula = "=COUNTIFS(general_report!$BH$5:$BH$" & row & ";""S0 - Blocking"";general_report!$Q$5:$Q$" & row & ";""*""&DefectBySeverityAndSubSystem!B3&""*"";general_report!$E$5:$E$" & row & ";""<>Canceled"";general_report!$E$5:$E$" & row & ";""<>Resolved"";general_report!$E$5:$E$" & row & ";""<>UAT Resolved"";general_report!$E$5:$E$" & row & ";""<>Closed"")"
'range("D11").FormulaR1C1 = "=COUNTIFS(general_report!$BH$5:$BH$" & row & ";""S0 - Blocking"";general_report!$Q$5:$Q$" & row & ";""*""&DefectBySeverityAndSubSystem!B3&""*"";general_report!$E$5:$E$" & row & ";""<>Canceled"";general_report!$E$5:$E$" & row & ";""<>Resolved"";general_report!$E$5:$E$" & row & ";""<>UAT Resolved"";general_report!$E$5:$E$" & row & ";""<>Closed"")"
'ActiveWorkbook.Names.Add Name:="myFormula", RefersToR1C1:= _
' "=COUNTIFS(general_report!$BH$5:$BH$" & row & ";""S0 - Blocking"";general_report!$Q$5:$Q$" & row & ";""*""&DefectBySeverityAndSubSystem!B3&""*"";general_report!$E$5:$E$" & row & ";""<>Canceled"";general_report!$E$5:$E$" & row & ";""<>Resolved"";general_report!$E$5:$E$" & row & ";""<>UAT Resolved"";general_report!$E$5:$E$" & row & ";""<>Closed"")"
' ActiveWorkbook.Names("myFormula").Comment = ""
errorHandler:
MsgBox Err.Number & vbLf & Err.Description
End Sub
Function lastRow(nameSheet As String) As Long
Dim sht As Worksheet
Set sht = ThisWorkbook.Worksheets(nameSheet)
lastRow = sht.Cells.Find(What:="*", After:=[A1], _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).row
End Function |
J'ai une erreur 1004.
Quand je prends la formule écrite dans la fenêtre "Immediate" et que je la copie/colle dans une cellule elle marche parfaitement bien.
J'ai essayé plusieurs choses, (en commentaire) notament de créer à la volé une formule pour ensuite l'affecter à une cellule (le code en commentaire) mais là aussi en vain.
Ma formule serait-elle trop compliquée pour être insérer en vba ?
Merci pour votre aide.
Shiyatsu.