XL 2010 Comment insérer Formule en VBA[RESOLU]

cp4

XLDnaute Impliqué
Bonjour:),

Suite à mes recherches infructueuses, je m'emmêle les pinceaux avec les références R1C1.
Voilà, je crée le fichier ci-joint en VBA à partir d'un autre classeur et je voudrais dans le code insérer une formule sur la ligne total pour sommer les colonnes.
La sommation concerne les colonnes B à F, de la ligne 2 (1er jour du mois) à la dernière ligne (dernier jour du mois).
En utilisant l'enregistreur de macro, la formule est de ce genre----> Range("D22").FormulaR1C1 = "=SUM(R[-19]C:R[-1]C)"
Je trouve des difficultés à adapter à mon cas. Vu que la cellule qui reçoit la formule change de ligne en fonction du mois, ainsi que le nombre de jours à sommer.

En vous remerciant par avance.
Bonne journée.
 

Fichiers joints

pierrejean

XLDnaute Barbatruc
Bonjour Cp4

A tester:
VB:
Sub test()
For Each sh In Sheets
 Set c = sh.Columns(1).Find("Total", LookIn:=xlValues, lookat:=xlWhole)
 If Not c Is Nothing Then ligne = c.Row
 For m = 2 To 6
    sh.Cells(ligne, m).FormulaR1C1 = "=SUM(R[-" & ligne - 3 & "]C:R[-1]C)"
 Next
Next
End Sub
 
  • J'adore
Reactions: cp4

cp4

XLDnaute Impliqué
Bonjour Pierrejean ;),

Très gentil de ta part. Merci aussi pour la célérité de ta réponse.
Je vais réfléchir quant à l'utilisation de ton code qui répond bien à ma demande.
Mais j'ai trouvé une solution en insérant la formule dans la cellule par code avec la ligne ci-dessous
Range("f" & nbj + 1).Formula = "=Sum(f3:f" & nbj & ") "
Il ne me reste plus qu'à boucler sur les colonnes concernées.
Je me suis inspiré de cette discussion, cette réponse d'Hippolite (que je salue;) en passant).

Avec tous mes remerciements.
Bonne journée.:cool:
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Pourquoi ne mettez vous pas un '$' devant le numéro de ligne qui doit toujours être le même ?
En utilisant l'enregistreur de macro, la formule devientrait ----> Range("D22").FormulaR1C1 = "=SUM(R3C:R[-1]C)"
Vous auriez aussi intérêt à l'affecter en une fois à toute la ligne.
VB:
Cells(Ligne, "B").Resize(, 5).FormulaR1C1 = "=SUM(R3C:R[-1]C)"
 
Dernière édition:
  • J'adore
Reactions: cp4

cp4

XLDnaute Impliqué
Bonjour.
Pourquoi ne mettez vous pas un '$' devant le numéro de ligne qui doit toujours être le même ?
En utilisant l'enregistreur de macro, la formule devientrait ----> Range("D22").FormulaR1C1 = "=SUM(R3C:R[-1]C)"
Vous auriez aussi intérêt à l'affecter en une fois à toute la ligne.
VB:
Cells(Ligne, "B").Resize(, 5).FormulaR1C1 = "=SUM(R3C:R[-1]C)"
Bonjour Dranreb ;),
En effet, ta formule avec l'enregistreur est plus juste. J'avais utilisé un autre classeur pour enregistrer la macro, juste pour avoir la "syntaxe" de la formule.
Oui, je vais suivre ton conseil ($) devant le numéro de ligne. Merci pour ta formule.

Mes remerciements:)
 
Haut Bas