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 ColonneD'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.PasteBonjour,
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
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 jLa 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:=xlFormatFromLeftOrAboveCordialement
Bonjour,
merci pour l'optimisation, je l'intègre.
Cordialement