Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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.

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:

 

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...

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:

bloomby

XLDnaute Occasionnel
Re : Créer une boucle pour formule

Bonjour soenda,

Merci de ton aide, pour l'instant ca ne fonctionne pas encore mais
avec quelsques heures de travail,
cela va probablement fonctionner

merci
 

Discussions similaires

Réponses
22
Affichages
938
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…