Insérez une formule dans une gamme de cellules via VBA en utilisant des cellules de reference

J'ai un code qui boucle et calcule une formule pour une colonne d'inputs pour une rangée de dates. C'est plutôt une boucle et une écriture assez lentes dans VBA. J'espérais plutôt coller la formule dans les cellules au lieu de la valeur calculée. Mon plan consiste à créer une gamme pour les résultats et à définir la plage égale à la formule.

Cependant, je suis coincé avec la formule. La formule utilise la réponse précédente plus d'autres données et je suis bloqué en essayant de créer la formule pour la gamme afin que les cellules de reference se déplacent pour chaque cellule dans la gamme.

La formule ressemblera à ceci pour la cellule N7

=IF(M7<>0,(M7-$D7)^(1/30.4),$B7*(1-$C7)^(1/$E7)) 

La formule ressemblera à ceci lors de la copy sur la cellule O7

  =IF(N7<>0,(N7-$D7)^(1/30.4),$B7*(1-$C7)^(1/$E7)) 

Pour O8, ça ressemblerait à ça

  =IF(N8<>0,(N8-$D8)^(1/30.4),$B8*(1-$C8)^(1/$E8)) 

Je comprends comment parcourir chaque cellule et écrire la formule, mais je ne pense pas que ce serait beaucoup plus rapide que le calcul et ensuite l'écriture de la réponse. J'espérais qu'il existe une façon de définir la gamme égale à une formule qui remplit les references de cellules correctes.

ActiveCell.Offset serait-il une solution?

Utiliser des references relatives:

 .FormulaR1C1 = "=IF(RC[-1]<>0,(RC[-1]-RC4)^(1/30.4),RC2*(1-RC3)^(1/RC5))" 

Vous pouvez utiliser ceci dans une gamme pour remplir en une seule fois si vous avez besoin plutôt que de boucler avec quelque chose comme ceci:

 Range("N7:P20").FormulaR1C1 = "=IF(RC[-1]<>0,(RC[-1]-RC4)^(1/30.4),RC2*(1-RC3)^(1/RC5))" 

R est une ligne et C est une colonne par rapport aux auto négatifs doivent être dans []

Vous pouvez également le faire en utilisant la A1 Notation .

 Range("N7:O8").Formula = "=IF(M7<>0,(M7-$D7)^(1/30.4),$B7*(1-$C7)^(1/$E7))" 

Il y a des avantages en utilisant la R1C1 Notation mais pour celle-ci, il est préférable de l'utiliser, plus facile à lire. HTH.