Créer une boucle pour formule

bloomby

XLDnaute Occasionnel
Bonjour à tous,

Je désire faire une matrice,
Je voudrais créer une macro pour que cela se face automatiquement
EX: ici celle-ci va de B à I
mais, j'aimerais que cela soit conditionelle à si il y a une valeur dans la ligne 1 de la colonne


voici une partie du code

Code:
Sub Macro12()
'
' Macro12 Macro
'

'
    Range("B2").Select
    ActiveCell.FormulaR1C1 = _
        "=IF(RtnVsM!RC <> """",SUMPRODUCT(Decay!R2C2:OFFSET(Decay!R1C2,NbRtn,0),RtnVsM!RC2:OFFSET(RtnVsM!R[-1]C2,NbRtn,0),RtnVsM!RC:OFFSET(RtnVsM!R[-1]C,NbRtn,0)), """")"
    Range("C3").Select
    ActiveCell.FormulaR1C1 = _
        "=IF(RtnVsM!R[-1]C <> """",SUMPRODUCT(Decay!R2C2:OFFSET(Decay!R1C2,NbRtn,0),RtnVsM!R[-1]C3:OFFSET(RtnVsM!R[-2]C3,NbRtn,0),RtnVsM!R[-1]C:OFFSET(RtnVsM!R[-2]C,NbRtn,0)),"""")"
    Range("D4").Select
    ActiveCell.FormulaR1C1 = _
        "=IF(RtnVsM!R[-2]C <> """",SUMPRODUCT(Decay!R2C2:OFFSET(Decay!R1C2,NbRtn,0),RtnVsM!R[-2]C4:OFFSET(RtnVsM!R[-3]C4,NbRtn,0),RtnVsM!R[-2]C:OFFSET(RtnVsM!R[-3]C,NbRtn,0)),"""")"
    Range("E5").Select
    ActiveCell.FormulaR1C1 = _
        "=IF(RtnVsM!R[-3]C <> """",SUMPRODUCT(Decay!R2C2:OFFSET(Decay!R1C2,NbRtn,0),RtnVsM!R[-3]C5:OFFSET(RtnVsM!R[-4]C5,NbRtn,0),RtnVsM!R[-3]C:OFFSET(RtnVsM!R[-4]C,NbRtn,0)),"""")"
    Range("F6").Select
    ActiveCell.FormulaR1C1 = _
        "=IF(RtnVsM!R[-4]C <> """",SUMPRODUCT(Decay!R2C2:OFFSET(Decay!R1C2,NbRtn,0),RtnVsM!R[-4]C6:OFFSET(RtnVsM!R[-5]C6,NbRtn,0),RtnVsM!R[-4]C:OFFSET(RtnVsM!R[-5]C,NbRtn,0)),"""")"
    Range("G7").Select
    ActiveCell.FormulaR1C1 = _
        "=IF(RtnVsM!R[-5]C <> """",SUMPRODUCT(Decay!R2C2:OFFSET(Decay!R1C2,NbRtn,0),RtnVsM!R[-5]C7:OFFSET(RtnVsM!R[-6]C7,NbRtn,0),RtnVsM!R[-5]C:OFFSET(RtnVsM!R[-6]C,NbRtn,0)),"""")"
    Range("H8").Select
    ActiveCell.FormulaR1C1 = _
        "=IF(RtnVsM!R[-6]C <> """",SUMPRODUCT(Decay!R2C2:OFFSET(Decay!R1C2,NbRtn,0),RtnVsM!R[-6]C8:OFFSET(RtnVsM!R[-7]C8,NbRtn,0),RtnVsM!R[-6]C:OFFSET(RtnVsM!R[-7]C,NbRtn,0)),"""")"
    Range("I9").Select
    ActiveCell.FormulaR1C1 = _
        "=IF(RtnVsM!R[-7]C <> """",SUMPRODUCT(Decay!R2C2:OFFSET(Decay!R1C2,NbRtn,0),RtnVsM!R[-7]C9:OFFSET(RtnVsM!R[-8]C9,NbRtn,0),RtnVsM!R[-7]C:OFFSET(RtnVsM!R[-8]C,NbRtn,0)),"""")"
    Range("I10").Select
End Sub

merci
 

soenda

XLDnaute Accro
Re : Créer une boucle pour formule

Bonsoir le fil, Bloomby

j'aimerais que cela soit conditionelle à si il y a une valeur dans la ligne 1 de la colonne
DernièreColonne
Code:
DCol = = [A1].End(xlToRight).Column

Puis faire une boucle, ex:
Code:
Sub b
   Dim DCol%, L%, C As Integer

   C = 2
   DCol = = [A1].End(xlToRight).Column

   For L = 2 To 9
      Cells(L,C).FormulaR1C1 = "maFormuleAvecDCol"
      C = C + 1
   Next

End Sub
Attention les valeurs DCol, L et C doivent-être cohérentes ...

A plus
 
Dernière édition:

bloomby

XLDnaute Occasionnel
Re : Créer une boucle pour formule

Bonjour forum, fil et soenda,

Nous y somme presque :)

voici le code (premier pas) [B2]
=SUMPRODUCT(Decay!$B$2:OFFSET(Decay!$B$1,NbRtn,0),RtnVsM!$B2:OFFSET(RtnVsM!$B1,NbRtn,0),RtnVsM!B2:OFFSET(RtnVsM!B1,NbRtn,0))

Par la suite la macro donne en [C3]
=SUMPRODUCT(Decay!$B$2:OFFSET(Decay!$B$1,NbRtn,0),RtnVsM!$B3:OFFSET(RtnVsM!$B2,NbRtn,0),RtnVsM!C3:OFFSET(RtnVsM!C2,NbRtn,0))

Alors qu'en [C3], nous devrions avoir:
SUMPRODUCT(Decay!$B$2:OFFSET(Decay!$B$1,NbRtn,0),RtnVsM!$C2:OFFSET(RtnVsM!$C1,NbRtn,0),RtnVsM!C2:OFFSET(RtnVsM!C1,NbRtn,0))

La problématique:
ex: dans la formule B$1 est valable pour le XltoRight
mais lorsqu'on l'applique pour une autre ligne il devien $B2 alors qu'il devrait donner $C2

etc....

Merci de votre aide,
 

soenda

XLDnaute Accro
Re : Créer une boucle pour formule

Bonsoir le fil, bloomby

La problématique:
dans la formule $B1 est valable pour la ligne 1
mais lorsqu'on l'applique à la ligne suivante il devient $B2 alors qu'il devrait donner $C2
Au lieu de $B1, il faut écrire C & "1"
C est la variable Colonne, elle est initialisée à 2 (=B) au départ de la boucle.

J'aurais dû appeler cette variable : Col. :cool:

A plus

PS: je n'ai pas testé cette méthode, mais on peut faire autrement (au cas ou)
 
Dernière édition:

bloomby

XLDnaute Occasionnel
Re : Créer une boucle pour formule

Salut Soenda,

Je essayer cela, mais je crois que je mis prend pas de la bonne facon:

Sub b()
Dim DCol%, L%, C As Integer

C = 2
DCol = [A1].End(xlToRight).Column

For L = 2 To 9
Cells(L, C).FormulaR1C1 = "=SUMPRODUCT(Decay!$B$2:OFFSET(Decay!$B$1,NbRtn,0), RtnVsM!C:OFFSET(RtnVsM!C,NbRtn,0),RtnVsM!C:OFFSET(RtnVs M!C",NbRtn,0))"
C = C + 1
Next

End Sub
 

soenda

XLDnaute Accro
Re : Créer une boucle pour formule

Bonjour Bloomby

Un petit correctif à la Sub que j'ai proposée précédemment... :eek:

Copie la formule et passe à la ligne suivante (si la formule est copiée)
Code:
Sub b
   Dim L%, C As Integer

   L = 2

   For C = 2 To 9        ' de B à I

      If Cells([COLOR=Red][B]1[/B][/COLOR], C) <> "" then 
         Cells(L,C).FormulaR1C1 = "maFormule"
         L = L + 1
      End If

   Next

End Sub
Et pour la Formule, je pense qu'il faut utiliser la fonction DECALER
un exemple avec SOMME (à appliquer à ta formule et à traduire en VBA)
Code:
=SOMME(DECALER($B$1:$I$1;0;COLONNE()-2;;10-COLONNE()))
A plus
 
Dernière édition:

Discussions similaires

Réponses
22
Affichages
875

Statistiques des forums

Discussions
312 497
Messages
2 088 992
Membres
104 000
dernier inscrit
dinelcia