VBA: Copier Formule dans Colonne sans F.RC1C1 [Résolu/Fermé]

Signaler
-
 SaraBilmem -
Bonjour à tout le monde,

Savez-vous s'il est possible avec VBA de copier une formule dans une colonne par rapport à une colonne de référence de longueur variable sans utiliser "FormulaR1C1"?


L'idée serait que (en simplifiant):

- Ma colonne A contient une liste de noms (la longueur de la liste et les noms varient)
- Mes colonnes de B à Z contiennent des formules dans la 1ère cellule (pour l'instant je place le curseur sur toute ma ligne et "double-click" mais c'est pas terrible car je dois le faire sur un très grand nombre de colonnes et sur plusieurs feuilles). Tant qu'il y a des noms dans la colonne A, il y a besoin de recopier ces formules.

Mon but est de faire économiser du temps aux personnes qui utiliseront mon fichier par la suite.

En espérant avoir su m'exprimer clairement, je vous remercie d'avance pour votre aide:)

SaraNeden (novice en VBA)

4 réponses


Bonjour,

L'affectation d'une formule vers une cellule peut se faire
selon la propriété [ Value ], la propriété [ FormulaR1C1 ] est
utile pour lire la formule :

ex.:

Option Explicit

Sub TransfertFormule()

    'Application.ScreenUpdating = False ' Augmente la performance
    
    Dim LimiteL As Long, LimiteC As Long
    Dim BoucleL As Long, BoucleC As Long
    Dim Formule As String
    
    LimiteL = Range("A65535").End(xlUp).Row
    LimiteC = Range("A1").End(xlToRight).Column
    
    Range("A1").Select
    For BoucleL = 1 To Limite
        For BoucleC = 1 To LimiteC
            Formule = ActiveCell.Offset(0, BoucleC).FormulaR1C1
            ActiveCell.Offset(BoucleL, BoucleC).Value = Formule
        Next BoucleC
    Next BoucleL
    
    'Application.ScreenUpdating = True

End Sub
'


n.b. Pas testé, codé à la volé :-)

Cdt

Lupin
OK merci beaucoup, je vais essayer (ps: eh bien j'espère un jour pouvoir coder à la volé comme toi:))
Re, ma liste de formule allant de la cellule R3 à EM3, j'ai changé le code, mais rien ne se passe..



Option Explicit

Sub TransfertFormule()

Application.ScreenUpdating = False ' Augmente la performance

Dim LimiteL As Long, LimiteC As Long
Dim BoucleL As Long, BoucleC As Long
Dim Formule As String


LimiteL = ThisWorkbook.Sheets("IN").Range("A65535").End(xlUp).Row
LimiteC = ThisWorkbook.Sheets("IN").Range("R3").End(xlToRight).Column

ThisWorkbook.Sheets("IN").Range("R3").Select
For BoucleL = 3 To LimiteL
For BoucleC = 18 To LimiteC
Formule = ActiveCell.Offset(0, BoucleC).FormulaR1C1
ActiveCell.Offset(BoucleL, BoucleC).Value = Formule
Next BoucleC
Next BoucleL

Application.ScreenUpdating = True

End Sub


Est-il possible de m'éclairer?
Finalement tout est OK! Merci infiniment
!
Messages postés
24042
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
3 mai 2021
6 757
Bonjour,

en plus court :
[E2:G2].AutoFill Range("E2:G" & Cells(Rows.Count, 1).End(xlUp).Row)
recopie les formules présentes en E2:G2 vers le bas jusqu'à la dernière ligne remplie de A.

eric

Bonjour,

Comme tu peux voir Sara, il existe des méthodes plus courte
comme eric nous a montré.

Je suis plustôt du style explicite et je passe par le chemin qui
semble le plus long mais étant donné que tu avais spécifié
que tu étais novice sous VBA, je préconise plus une approche
explicite.

Néanmoins, si tu continue dans cette voie, tu pourras bientôt
toi aussi codé à la volé. Comme le disait Einstein :

La connaissance s'acquiert par l'expérience,
tout le reste n'est que de l'information.

Cdt

Lupin
Bonjour,

En cherchant des solutions à mes problèmes, je suis retombée sur la question que j'avais moi-même posé mais n'avez pas vu la fin des réponses.

Merci pour vos conseils, je dois dire que depuis le temps, je me suis un peu améliorée!

Bonne journée

SaraBilmem