J'ai une grande quantité de données que j'ai collectées à partir de différents fichiers. Dans ce classeur principal, j'ai différents types de formules pour chaque cellule. Dans la plage A à F, les données des autres fichiers sont collectées. Dans la plage H à AC, j'ai la formule que je remplis automatiquement en la faisant glisser manuellement vers le bas chaque fois que de nouvelles données sont entrées. Le code ci-dessous est ce que j'ai utilisé et il n'a que 6 formules différentes que je veux remplir automatiquement.
Application.ScreenUpdating = False
lastRow = Range("B" & Rows.Count).End(xlUp).Row
Range("D2").Formula = "=$L$1/$L$2"
Range("D2").AutoFill Destination:=Range("D2:D" & lastRow)
Range("E2").Formula = "=$B2/2116"
Range("E2").AutoFill Destination:=Range("E2:E" & lastRow)
Range("F2").Formula = "=$D$2+(3*SQRT(($D$2*(1-$D$2))/2116))"
Range("F2").AutoFill Destination:=Range("F2:F" & lastRow)
Range("G2").Formula = "=$D$2-(3*SQRT(($D$2*(1-$D$2))/2116))"
Range("G2").AutoFill Destination:=Range("G2:G" & lastRow)
Range("H2").Formula = "=IF($E2>=$F2,$E2,NA())"
Range("H2").AutoFill Destination:=Range("H2:H" & lastRow)
Range("I2").Formula = "=IF($E2<=$G2,$E2,NA())"
Range("I2").AutoFill Destination:=Range("I2:I" & lastRow)
ActiveSheet.AutoFilterMode = False
Application.ScreenUpdating = True
Cependant, dans le classeur principal, il y a environ 15 formules différentes que je veux qu'il remplisse automatiquement chaque fois que de nouvelles données entrent. J'ai plusieurs classeurs principaux et la formule n'est pas constante. L'insertion du code ci-dessus pour chaque formule est pénible. Existe-t-il un moyen permettant au programme de le faire glisser automatiquement? Dans le classeur principal, j'ai déjà écrit les formules. J'ai essayé de nombreux codes différents pour le remplir automatiquement, mais jusqu'à présent, celui ci-dessus est le seul qui fonctionne sans me donner d'erreurs. J'ai essayé d'utiliser quelque chose comme ça ou une version similaire à celle-ci, mais aucune ne fonctionne:
With wbList.Sheets("Attribute - 10 mil stop")
lastRow = Worksheets(ActiveSheet.Name).Range("B2").Rows.Count
'Worksheets(ActiveSheet.Name).Range(Selection, Selection.End(xlDown)).Select
Worksheets(ActiveSheet.Name).Range("D2:I2").Select
Selection.AutoFill Destination:=Range("D2:I" & Range("B2" & Rows.Count).End(xlDown).Row)
End With
Je me suis tellement amusé avec le code. Je ne sais même pas si c'est supposé être comme ça. Merci pour l'aide!
L'approche que vous recherchez est FillDown
. Une autre façon de ne pas avoir à vous botter la tête à chaque fois est de stocker des formules dans un tableau de chaînes. Les combiner vous donne une méthode puissante de saisie de formules par la multitude. Le code suit:
Sub FillDown()
Dim strFormulas(1 To 3) As Variant
With ThisWorkbook.Sheets("Sheet1")
strFormulas(1) = "=SUM(A2:B2)"
strFormulas(2) = "=PRODUCT(A2:B2)"
strFormulas(3) = "=A2/B2"
.Range("C2:E2").Formula = strFormulas
.Range("C2:E11").FillDown
End With
End Sub
Captures d'écran:
Résultat en ligne: .Range("C2:E2").Formula = strFormulas
:
Résultat en ligne: .Range("C2:E11").FillDown
:
Bien sûr, vous pouvez la rendre dynamique en stockant la dernière ligne dans une variable et en la transformant en quelque chose comme .Range("C2:E" & LRow).FillDown
, un peu comme ce que vous avez fait.
J'espère que cela t'aides!
Sur la base de mon commentaire, voici une façon d'obtenir ce que vous voulez faire:
Commencez par sélectionner n'importe quelle cellule de votre plage et appuyez sur Ctrl + T
Cela vous donnera ce pop-up:
assurez-vous que le texte Où est votre tableau est correct et cliquez sur ok, vous aurez maintenant:
Maintenant, si vous ajoutez un en-tête de colonne en D, il sera automatiquement ajouté au tableau jusqu'à la dernière ligne:
Maintenant Si vous entrez une formule dans cette colonne:
Après l'avoir saisie, la formule sera automatiquement remplie jusqu'à la dernière ligne:
Maintenant, si vous ajoutez une nouvelle ligne à la ligne suivante sous votre table:
Une fois entré, il sera redimensionné à la largeur de votre tableau et toutes les colonnes contenant des formules seront également ajoutées:
J'espère que ceci résoudra votre problème!