Alimenter une formule dynamiquement par des variables

Bonjour,

je me permet de vous solliciter car je souhaite mettre à jour une formule de calcul en fonction de variables issues d'un tableau ( numéro des lignes où le curseur est positionné) en impactant plusieurs colonnes pour la ligne considérée.

La formule dans une cellule Excel apparait "classiquement" comme cela "=S8*$D9"

Dans mon contexte, les lignes "8" et "9" ainsi que la colonne "S" sont des variables tandis que la colonne "D" restera relative avec son "$" ( au pas car j'utilise le $ pour réaliser la formule via la feuille excel ... via VBA, il n'y aura pas (plus) besoin de l'utiliser ... enfin je pense ;-))

Sur la base des informations recherchées, je pense intégrer la commande "Formula" ou "FormulaR1C1" en lien avec la cellule cible "ActiveCell" ou bien Cells(l,c).Select.

Maintenant, je ne vois pas bien comment reconstituer ma formule de calcul au sein de la procédure afin qu'elle apparaisse dans la feuille Excel de cette manière "=S8*$D9"

Dans l'esprit j'avais pensé à cela ... sans conviction car la cellule prend le résultat et non la formule attendue

            For Colonne = 19 To 36
                Cells(x, Colonne).Formula = Cells(x, 4) * Cells(x - 1, Colonne)
            Next Colonne

D'avance merci pour votre éclairage sur le sujet et à disposition si besoin d'éléments de compréhension complémentaires

Cordialement

Bonjour

x vaut combien ?

Cordialement

Bonjour Dan,

x est une variable qui correspond à mon numéro de ligne qui provient de la lecture d'un tableau (au sein d'une boucle)

Merci pour la recommandation concernant l'ajout de fichier mais je ne préfère pas pour des aspects de sécurité échanger des fichiers.

Merci de votre compréhension.

Cordialement

x est une variable qui correspond à mon numéro de ligne qui provient de la lecture d'un tableau (au sein d'une boucle)

x commence à quelle ligne ?

Sans cette valeur on ne sait pas vous donner une formule
Si on connait la première ligne, on sait où placer la formule entre les colonnes 19 et 36

Dan,

je comprends mais je ne peux vous fournir strictement un numéro de ligne. ci dessous le code que j'utilise (potentiellement pas optimisé) pour lequel

sur la feuille en question, je colle un bloc de "n" lignes connues puis à la suite "y" blocs ... chacun des "y" blocs auront par la suite un nombre de lignes variables.

En effet, au sein de ces "n" lignes pour un bloc donné, je viens insérer à partir de l'avant dernière ligne "z" lignes en fonction de la variable "NombreRefPfBox"

Je viens copier au sein de ce bloc, une ligne de référence et coller l'ensemble des cellules sélectionnées au niveau des lignes précédemment insérées

Simplement, ma ligne de référence présente une formule qui fait appel à une ligne dédiée du bloc mais lorsque que je vais un "simple" copier/coller je perds cette référence à cette ligne ... cela marche classiquement pour le premier bloc (bloc n°1)... mais par la suite les autres blocs font référence à la ligne dédiée du bloc n°1.

D'où mon souhait de reconstituer la formule à partir de variables ligne et colonne

Espérant avoir été plus clair et vous permettant de comprendre pourquoi je ne peux vous fournir un numéro de ligne unique.

            ' SE POSITIONNER SUR LA DERNIERE LIGNE
                Range("A1").Select
                Selection.End(xlDown).Select
                x = ActiveCell.Row
                Rows(x & ":" & x + NombreRefPfBox - 2).Select

           'INSERER UNE OU PLUSIEURS LIGNES
                Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

            'SE POSITIONNER SUR LA LIGNE DE REFERENCE = AVANT DERNIERE LIGNE
                x = x - 1
                Rows(x & ":" & x).Select
            'COPIER LA LIGNE DE REFERENCE
                Selection.Copy
            ' COLLER SUR LES LIGNES PRECEDEMMENT INSEREES
                x = x + 1
                Range(Cells(x, 1), Cells(x + NombreRefPfBox - 2, 1)).Select
                ActiveSheet.Paste

Bonjour,

ci-dessous l'extrait de mon code qui permet de répondre à mon besoin.

Désolé Dan, je n'ai pas bien compris votre demande concernant le numéro de ligne dans tous les cas merci de votre retour.

For j = x To x + NombreRefPfBox - 2
            For Colonne = 19 To 36

                Col = 4 - Colonne
                Lin = LigneFormule - j
                Cells(j, Colonne).Formula = "=RC[" & Col & "]*R[" & Lin & "]C"

            ' R signifie row, C column.
            ' La cellule portant la formule se note en référence relative,
            ' RC[-1] pour celle à sa gauche, RC[1] celle à sa droite,
            ' R[-1]C celle juste au dessus et R[1]C celle juste en dessous.

            Next Colonne
Next j

La variable Col me permet de calculer le décalage des colonnes par rapport à la valeur de la colonne de la cellule portant la formule

La variable Lin me permet de calculer le décalage des lignes par rapport à la la valeur de la ligne de la cellule portant la formule.

Les variables sont concaténées en sein de la syntaxe "RC" décrit en commentaire dans le code.

Cordialement

Bonjour

Désolé Dan, je n'ai pas bien compris votre demande concernant le numéro de ligne dans tous les cas merci de votre retour.

Comment pourrais-je donner une formule basée sur cette instruction sans connaitre la valeur de x ?

Cells(x, Colonne).Formula = Cells(x, 4) * Cells(x - 1, Colonne)

J'avais besoin de savoir si x était une variable fixe ou faisant partie d'une boucle.
Mais plus besoin puisqu'il semble que vous avez une solution

Par contre votre code au début pourrait être ceci

'SE POSITIONNER SUR LA DERNIERE LIGNE
     x = Range("A1").End(xlDown)

'INSERER UNE OU PLUSIEURS LIGNES
     Rows(x & ":" & x + NombreRefPfBox - 2).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

Cordialement

Bonjour,

merci pour l'optimisation, je l'intègre.

Cordialement

Rechercher des sujets similaires à "alimenter formule dynamiquement variables"