Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

manipuler une formule en VBA

4 réponses
Avatar
bourby
bonjour,

dans une macro, je souhaite faire la chose suivante:
- récupérer la formule présente dans une cellule
- transformer toutes les adresses relatives ("A1") en absolues ("$A$1")
- écrire cette nouvelle version de la formule dans une autre cellule.

Je n'y suis pas arrivé. Quelqu'un peut-il m'aider?

D'avance merci.

Bourby

4 réponses

Avatar
electron
Tu as plusieurs solutions :

1) Si tu souhaites remplacer la référence "A1" dans des formules inscrites
dans des cellules, tu peux faire comme suit (directement dans la feuille du
classeur):
Sélectionne les cellules concernées et vas dans Edition puis Remplacer, et
inscrit A1 dans rechercher puis $A$1 dans Remplacer par et clique sur
Remplacer tout

2) Même opération via une macro : (exemple avec une plage de cellules D1 à D3)
Range("D1:D3").Select
Selection.Replace What:="A1", Replacement:="$A$1", LookAt:=xlPart,
SearchOrder:=xlByRows

Tu peux également affecter un nom à la cellule A1 et mettre ce nom dans tes
formules. Si tu fais une copie incrémentée de tes cellules contenant des
formule, le nom reste figé et fera donc référence à ta cellule A1. Pour
affecter un nom : tu vas dans le menu Insertion puis Nom puis Definir et tu
tappes un nom ; tu verras que lorsque tu sélectionne la cellule en question,
la référence A1 par exemple, sera remplacée par ton nom. Pour atteindre cette
cellule avec une macro il faut écrire Application.Goto
Reference:="nom_que_tu_as_affecté"





bonjour,

dans une macro, je souhaite faire la chose suivante:
- récupérer la formule présente dans une cellule
- transformer toutes les adresses relatives ("A1") en absolues ("$A$1")
- écrire cette nouvelle version de la formule dans une autre cellule.

Je n'y suis pas arrivé. Quelqu'un peut-il m'aider?

D'avance merci.

Bourby



Avatar
bourby
bonsoir et merci pour ces précisions.

je connais tout ça, et j'utilise systématiquement les noms, mais mon
problème est différent. Je fais des calculs dans des tableaux à double
entrée (avec autant de cellules ou plages nommées que possible). Je les
empile les uns au dessous des autres, car il s'agit en général d'étudier
plusieurs aspects d'un même problème.
Mais j'ai besoin de faire des "études de sensibilité", c'est à dire de
refaire les mêmes calculs avec des variantes dans les données (p.ex. +
et - 10% sur une donnée). Je mets ces clones de chaque tableau à droite
de leur "tableau maître". Pour cela, j'ai réussi à écrire quelques
macros bien pratiques qui conservent les mêmes antécédants lorsqu'elles
dupliquent un tableau à un nouvel emplacement.
Mais il arrive que certaines adresses qui étaient en coordonnées
relatives doivent être converties en absolues. Et je n'ai pas trouvé de
solution pour ce cas.Comme j'ai plein de variables à faire varier
séparément, ça devient très lassant de corriger toutes les formules.

Est-ce plus concret comme ça? Et quelqu'un peut-il m'éclairer?

D'avance merci

Bourby

electron wrote:
Tu as plusieurs solutions :

1) Si tu souhaites remplacer la référence "A1" dans des formules
inscrites

dans des cellules, tu peux faire comme suit (directement dans la
feuille du

classeur):
Sélectionne les cellules concernées et vas dans Edition puis
Remplacer, et

inscrit A1 dans rechercher puis $A$1 dans Remplacer par et clique sur
Remplacer tout

2) Même opération via une macro : (exemple avec une plage de cellules
D1 à D3)

Range("D1:D3").Select
Selection.Replace What:="A1", Replacement:="$A$1", LookAt:=xlPart,
SearchOrder:=xlByRows

Tu peux également affecter un nom à la cellule A1 et mettre ce nom dans tes
formules. Si tu fais une copie incrémentée de tes cellules contenant des
formule, le nom reste figé et fera donc référence à ta cellule A1. Pour
affecter un nom : tu vas dans le menu Insertion puis Nom puis Definir et tu
tappes un nom ; tu verras que lorsque tu sélectionne la cellule en question,
la référence A1 par exemple, sera remplacée par ton nom. Pour atteindre cette
cellule avec une macro il faut écrire Application.Goto
Reference:="nom_que_tu_as_affecté"






bonjour,

dans une macro, je souhaite faire la chose suivante:
- récupérer la formule présente dans une cellule
- transformer toutes les adresses relatives ("A1") en absolues ("$A$1")
- écrire cette nouvelle version de la formule dans une autre cellule.

Je n'y suis pas arrivé. Quelqu'un peut-il m'aider?

D'avance merci.

Bourby





Avatar
Jean-François Aubert
salut bourby,

un début d'idée, à modifier à ta convenance ?

'***********************************
Sub Relatif_To_Absolu_Ou_Vice_Versa()

Dim c As Range

Dim LaFormule As String

For Each c In Selection

LaFormule = c.Formula

If LaFormule Like "*$*" Then

c.Value = Application.ConvertFormula _

(Formula:=LaFormule, fromReferenceStyle:=xlA1, _

toReferenceStyle:=xlA1, ToAbsolute:=xlRelative)

Else

c.Value = Application.ConvertFormula _

(Formula:=LaFormule, fromReferenceStyle:=xlA1, _

toReferenceStyle:=xlA1, ToAbsolute:=xlAbsolute)

End If

Next c

End Sub


'***********************************



--
Amicalement

Jean-François Aubert
{Vaudois de la Côte Lémanique}


"bourby" a écrit dans le message de news:

bonjour,

dans une macro, je souhaite faire la chose suivante:
- récupérer la formule présente dans une cellule
- transformer toutes les adresses relatives ("A1") en absolues ("$A$1")
- écrire cette nouvelle version de la formule dans une autre cellule.

Je n'y suis pas arrivé. Quelqu'un peut-il m'aider?

D'avance merci.

Bourby


Avatar
bourby
bonjour Jean-François,

je rentre d'une semaine de déplacement; ta réponse me donne sûrement le
moyen de faire ce que j'ai besoin de faire. Je vais essayer au bureau
dès que le problème se représente.

Merci beaucoup.

Bourby



Jean-François Aubert wrote:
salut bourby,

un début d'idée, à modifier à ta convenance ?

'***********************************
Sub Relatif_To_Absolu_Ou_Vice_Versa()

Dim c As Range

Dim LaFormule As String

For Each c In Selection

LaFormule = c.Formula

If LaFormule Like "*$*" Then

c.Value = Application.ConvertFormula _

(Formula:=LaFormule, fromReferenceStyle:=xlA1, _

toReferenceStyle:=xlA1, ToAbsolute:=xlRelative)

Else

c.Value = Application.ConvertFormula _

(Formula:=LaFormule, fromReferenceStyle:=xlA1, _

toReferenceStyle:=xlA1, ToAbsolute:=xlAbsolute)

End If

Next c

End Sub


'***********************************