Insertion d'une formule dans une cellule

Bonjour à tous,

Pour copier avec une macro, une formule dans une cellule j'ai écrit :

Range("a3").Select
x = 2023
ActiveCell.Offset(0, 2).Range("a1").Select
ActiveCell.FormulaR1C1 = "date(x;mois(a3);jour(a3))"

Sauf que cela ne fonctionne pas, VBA ne veut pas du signe "=" et refuse : "=date(x;mois(a3);jour(a3))"

Comment je peux faire fonctionner la formule sans intervention manuelle dans la feuille de calcul

merci

Bonjour,

J'ai bien peur que très peu de choses conviennent dans ce code.

Déjà, les .select ne servent à rien sinon à ralentir la procédure. Ensuite, que veux-tu lui faire faire avec le .offset ?

Bonjour,
21Formatic bonjour ! ravis de vous revoir sur un fil !

Sinon pour appréhender la façon de faire pour inscrire une formule dans une cellule vous pouvez lancer l'enregistreur de macro, cela est une "première" approche.
Une fois l'enregistreur en marche, vous cliquez sur A1, puis vous écrivez la formule normalement, par exemple ici si j'ai bien compris : =Date(2023;MOIS(A3);JOUR(A3)), puis entrée. vous arrêtez l'enregistreur et vous avez votre macro :

Sub Macro1()
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "=DATE(2023,MONTH(R[2]C),DAY(R[2]C))"
    Range("A2").Select
End Sub

Mais comme le dit 21Formatic, sur le code obtenu il faudra enlever pas mal de chose "inutiles" sous VBA mais vous verrez au moins la syntaxe pour inscrire une formule dans une cellule et vous obtenez ceci :

Sub Macro1()
    Dim X As Integer
    X = 2023
    Range("A1").FormulaR1C1 = "=DATE(" & X & ",MONTH(R[2]C),DAY(R[2]C))"
End Sub

Pour intégrer dans la formule la variable X il faut découper la chaine de caractère de cette dernière c'est pourquoi j'ai ajouté " & et & ", le premier guillemet arrête la chaine, le & permet de concaténer, on met la variable X puis un autre & pour continuer de concaténer et un nouveau guillemet pour reprendre la chaine.

@ bientôt

LouReeD

21Formatic, LouReeD, merci pour vos réponse.

21Formatic, pour le offset : J'ai besoin de travailler en position relative, j'ai appris il y très longtemps que la formule ActiveCell.Offset(0, 2).Range("a1").Select me servait à sélectionner sur la même ligne la deuxième ligne plus loin à droite ou à gauche en mettant -2. maintenant j'aimerai bien savoir comment faire en relatif pour faire plus rapide.

LouReeD, j'ai compris pourquoi cela ne fonctionnait pas, je n'avais pas fait la concaténation pour la variable de l'année. j'ai ait un essai et quand je met "x=2023" cela me renvoi dans la cellule: "2022". Est ce une erreur de ma part ou bien c'est normal

mon VBA est en français, l'écriture de la formule est différente(mais ce n'est que du détail). en fait mon but est de remplacer dans une cellule donnée où il y a déjà une date "jour/mois/année" , l'année par l'année précédente.

merci pour votre aide précieuse

paterbleutch

Bonjour paterbleuch,
Tu te positionnes en A3, puis tu dis avec le offset que tu veux sélectionner 2 colonnes à droite. Le range'"A1").select ne change rien du tout.

Si tu veux juste changer l'année, il n'y a à priori pas besoin de formule. La seule ligne de code suivante suffit dans l'absolu et est facile à modifier pour être intégrée dans une boucle :

Cells(3, 1).Offset(0, 2) = DateAdd("yyyy", -1, Cells(3, 1))

Mais comme tu n'es pas très précis dans ta demande et que l'on n'a pas de fichier exemple, ce n'est pas aisé de t'aider efficacement.

Si c'est juste pour faire suite à ta demande précédente, pas besoin de macro pour cela. Tu as la formule =mois.decaler(A3;-12) qui fait ce que tu veux, et tu dois pouvoir te passer de la fonction date que l'on t'avait proposée.

@Loureed Hello !

Je crois que c'est juste un passage rapide

21Formatic, Je me suis cassé le nez pour comprendre le fonctionnement et cela fonctionne

tu as parfaitement répondu à mon PB et tu m'a appris à quelque chose d'utile; MERCI

@ bientôt

LouReeD

Rechercher des sujets similaires à "insertion formule"