XL 2013 Formula R1C1 sans les symboles $

ZAKAO

XLDnaute Junior
Bonjour tout le monde,

J'espère que vous allez bien :)

Quelqu'un connaitrait-il le moyen de remplir une formule via vba avec l'instruction .formulaR1C1 sans qu'Excel rajoute les symboles $ entre les variables dans le tableau Excel ?

VB:
Target.FormulaR1C1 = "=IF(R" & Target.row & "C" & LLVL & "<R" & Target.row + 1 & "C" & LLVL & ",IFERROR(Arbo_Min(ROW(R" & Target.row & "C" & Target.Column & "),COLUMN(R" & Target.row & "C" & Target.Column & "),R" & Target.row & "C" & LLVL & "),""""),"""")"

'Résultat
'=SI($D$8<$D$9;SIERREUR(Arbo_Min(LIGNE($N$8);COLONNE($N$8);$D$8);"");"")

'Voulu
'=SI(D8<D9;SIERREUR(Arbo_Min(LIGNE(N8);COLONNE(N8);D8);"");"")

Avec : LLVL une variable.

Je vous remercie d'avance pour votre aide.

Cordialement,
ZAKAO
 
Solution
Bonjour ZAKAO, Bernard, Bruno,

On peut aussi utiliser la méthode Application.ConvertFormula, testez :
VB:
LLVL = 4
Set Target = [N8]
Target.FormulaR1C1 = Application.ConvertFormula("=IF(RC" & LLVL & "<R[1]C" & LLVL & ",IFERROR(Arbo_Min(ROW(),COLUMN(),RC" & LLVL & "),""""),"""")", xlR1C1, , xlRelative, Target)
A+

Dranreb

XLDnaute Barbatruc
Bonjour.
Essayez comme ça :
VB:
ZC = "C[" & LLVL - Target.Column & "]"
Target.FormulaR1C1 = "=IF(R" & ZC & "<R[1]" & ZC & ",IFERROR(Arbo_Min(ROW(),COLUMN(),R" & ZC & "),""""),"""")"
Êtes vous sûr quand même de la nécessité des laisser relative la référence à la colonne LLVL ?
 
Dernière édition:

ZAKAO

XLDnaute Junior
Bonjour,

Ou plus simplement 😜
VB:
Target.FormulaLocal = "=SI(D8<D9;SIERREUR(Arbo_Min(LIGNE(N8);COLONNE(N8);D8);"""");"""")"

A+
Bonjour,

Merci pour vos réponses, les colonnes et les lignes sont totalement dynamiques. C’est pour cela que j’utilise le .formulaR1C1 que je juge plus pratique avec des colonnes dynamiques car dans le formulaLocal, il faut faire varier des lettres.

La constante LLVL n’est qu’une des nombreuses constantes, elles sont obligatoires au fonctionnement et à la compréhension du code, d’où leur signification dans ma requête précédente.

Dès que je récupère mon pc, je teste vos solutions. Encore une fois merci.
 
C

Compte Supprimé 979

Guest
Re,
Je n'ai jamais compris lorsqu'on parle de plage dynamique que FormulaLocal soit un frein 🤔

Un exemple basique
VB:
Dim sForm as string
sForm = "=SI(#a8<#a9;SIERREUR(Arbo_Min(LIGNE(#b8);COLONNE(#b8);#a8);"""");"""")"
sForm = Replace(sForm,"#a","D"): sForm = replace(sForm,"#b","N")
Target.FormulaLocal = sForm

Mais bon c'est comme vous le voulez 🤪

Bonne soirée
 

Dranreb

XLDnaute Barbatruc
Pour ma part dans les macros j'aime bien le R1C1. Mais j'emploie beaucoup les références absolues. En général pour une ligne ou colonne autre que celle de la cellule portant la formule, le relatif lui étant seul réservé. J'ai même une macro qui met les dollars dans une formule. Elle procède par remplacement par leurs valeurs des expressions entre crochets droits dans leurs FormulaR1C1. Les "[0]" n'y existant pas, ils restent relatifs …
j'ai aussi une macro qui copie vers le presse papier le FormulaR1C1 de la plage sélectionnée. Je m'en sert énormément sur ce site. Presque chaque fois que vous voyez dans un de mes message un code commençant par .FormulaR1C1 = etc. c'est une formule mise au point manuellement dans une plage, donc en style A1 local, et produite par la dite macro ! Ça évite tout risque d'erreur !
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
En tout cas, et en résumé, pour éviter un "$" dans une référence A1 spécifiée sous forme R1C1, au lieu du numéro de ligne derrière "R" ou de colonne derrière "C" il faut y spécifier entre crochets droits sa différence avec celui de la cellule devant porter la formule, ou rien du tout s'il s'agit précisément de celui ci.
Si une variable Rng As Range représente la cellule cible vous pouvez aussi prendre Rng.Address(False, False, xlR1C1, RelativeTo:=Target) avec Target la cellule devant recevoir la formule.
 

job75

XLDnaute Barbatruc
Bonjour ZAKAO, Bernard, Bruno,

On peut aussi utiliser la méthode Application.ConvertFormula, testez :
VB:
LLVL = 4
Set Target = [N8]
Target.FormulaR1C1 = Application.ConvertFormula("=IF(RC" & LLVL & "<R[1]C" & LLVL & ",IFERROR(Arbo_Min(ROW(),COLUMN(),RC" & LLVL & "),""""),"""")", xlR1C1, , xlRelative, Target)
A+
 

ZAKAO

XLDnaute Junior
Re,
Je n'ai jamais compris lorsqu'on parle de plage dynamique que FormulaLocal soit un frein 🤔

Un exemple basique
VB:
Dim sForm as string
sForm = "=SI(#a8<#a9;SIERREUR(Arbo_Min(LIGNE(#b8);COLONNE(#b8);#a8);"""");"""")"
sForm = Replace(sForm,"#a","D"): sForm = replace(sForm,"#b","N")
Target.FormulaLocal = sForm

Mais bon c'est comme vous le voulez 🤪

Bonne soirée
Haha, votre formule fonctionne nickel mais les habitudes ont la vie dure… Je trouve R1C1 plus clair ^^'...

Merci beaucoup @BrunoM45 :)
 

ZAKAO

XLDnaute Junior
Bonjour ZAKAO, Bernard, Bruno,

On peut aussi utiliser la méthode Application.ConvertFormula, testez :
VB:
LLVL = 4
Set Target = [N8]
Target.FormulaR1C1 = Application.ConvertFormula("=IF(RC" & LLVL & "<R[1]C" & LLVL & ",IFERROR(Arbo_Min(ROW(),COLUMN(),RC" & LLVL & "),""""),"""")", xlR1C1, , xlRelative, Target)
A+
Merci @job75, je retiendrai votre solution qui s'intègre facilement. Merci tout le monde.

A une prochaine fois...
 

Discussions similaires

Statistiques des forums

Discussions
315 095
Messages
2 116 167
Membres
112 675
dernier inscrit
Tazra_IMOU