J'ai un code que je connais fonctionne, j'applique une formule SUMIF à une gamme de cellules. Ca marche mais ça ajoute une charge de rang supplémentaire en bas qui ne devrait pas être là. J'ai essayé d'ajouter une boucle "do" jusqu'à ce qu'elle se bloque dans une boucle infinie et se bloque.Appliquer la formule à une gamme de cellules
Ceci est mon premier lot de code qui fonctionne mais ajoute la ligne supplémentaire uniquement sur les colonnes qui ont été copiées.
Dim z As Workbook 'Budget Workbook
Dim y As Workbook 'Formatted - current workbook
Dim lastRow As Integer
Dim budgLastRow As Integer
Dim rng As Range
Set y = Workbooks("DLT.xlsm")
Set z = Workbooks.Open("C:\Reports\Budget.xlsx")
'Apply function to columns to pull costing data
With y.Worksheets("DLT")
lastRow = Cells(Rows.Count, 5).End(xlUp).Row
For Each rng In .Range("AI22:AI" & lastRow)
rng.Formula = "=SUMIF('[Budget.xlsx]DynamicReport'!$C:$C,$E" & rng.Row & ",'[Budget.xlsx]DynamicReport'!H:H)"
rng.Value = rng.Value
Next rng
For Each rng In .Range("AJ22:AJ" & lastRow)
rng.Formula = "=SUMIF('[Budget.xlsx]DynamicReport'!$C:$C,$E" & rng.Row & ",'[Budget.xlsx]DynamicReport'!I:I)"
rng.Value = rng.Value
Next rng
For Each rng In .Range("AN22:AN" & lastRow)
rng.Formula = "=SUMIF('[Budget.xlsx]DynamicReport'!$C:$C,$E" & rng.Row & ",'[Budget.xlsx]DynamicReport'!E:E)"
rng.Value = rng.Value
Next rng
For Each rng In .Range("AO22:AO" & lastRow)
rng.Formula = "=SUMIF('[Budget.xlsx]DynamicReport'!$C:$C,$E" & rng.Row & ",'[Budget.xlsx]DynamicReport'!G:G)"
rng.Value = rng.Value
Next rng
End With
Je pense que les autres lignes supplémentaires ont été copiés parce que le classeur budgétaire contient plus de données, puis le livre de travail formaté. Je sais avoir pensé à supprimer éventuellement l'autre rangée inutile qui ont été copiés croisés.
J'ai donc ajouté ce petit morceau de code dans
With y.Worksheets("Formatted")
lastRow = Cells(Rows.Count, 5).End(xlUp).Row - 1
budgLastRow = Cells(Rows.Count, 35).End(xlUp).Row
Rows("AI" & lastRow & ":AO" & budgLastRow).EntireRow.Delete
End With
Je reçois une erreur définie par l'application objet erreur définie sur la ligne
Rows("AI" & lastRow & ":AO" & budgLastRow).EntireRow.Delete
Ceci est probablement pas la façon la plus efficace de faites ceci, mais c'est la seule façon dont je pourrais penser. Je suis assez nouveau à VBA codant seulement quelques mois donc la plupart du temps juste essayer différentes façons et voir ce qui fonctionne. Quelqu'un peut-il m'aider s'il-vous-plaît.
merci, je n'ai même pas remarqué cela. Ça fonctionne maintenant – user3088476