Microsoft 365 VBA - Mettre une formule dans une cellule (dans une boucle For i = ...)

Fab117

XLDnaute Impliqué
Hello,

Je fais une boucle où je souhaiterais mettre une formule

VB:
For i = 1 to 10
    'Je souhaiterais qu'il mette dans la cellule K&i la formule :  J&i divisé par la cellule K$2)
Next i

Le but étant de pouvoir déplacer mes lignes (en ajouter ou/et en supprimer, sans que ça n'influence le résultat) et/ou changer la valeur de la cellule K$2 et garder un résultat à jour.

J'ai essayé d'adapter :
Code:
Range("C2").Formula = "=A2*B2"

' avec des variantes de

Range("K" & i).Formula = "=Cells(i,10)/(K$2/2)"'

Mais sans succès jusque là.

Quelqu'un aurait-il la solution ?

Merci d'avance

Fab
 

Fab117

XLDnaute Impliqué
Bonjour Dranreb,

Merci beaucoup d'avoir pris le temps de regarder mon problème.

Tel que je l'ai formulé, votre formule fonctionne parfaitement. Mais j'avais un peu simplifier ma problématique.

1. En fait ma boucle de va pas de 1 à 10, mais de
VB:
For i = 6 To DerniereLignePlan


'Où '
DerniereLignePlan = = Cells(Rows.Count, 5).End(xlUp).Row

=> est-ce possbible d'appliquer votre formule sur une plage féfinie avec une variable ?

2. De plus j'ai plusieurs autres formules à insérer ailleurs dans mon onglet. P.ex.:
Code:
For i = 7 To DerniereLignePlan
    If Range("F" & i) = Range("F" & i - 1) Then
        Range("L" & i) = Range("L" & i - 1) + Range("F" & i)
        '*********************A remplacer par la mise en place de la fromule dans la cellule
    End If
Next i

=> pourriez-vous m'expliquer la logique du code ?

Mecri d'avance

Fab
 

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Je fais une boucle où je souhaiterais mettre une formule
For i = 1 to 10
'Je souhaiterais qu'il mette dans la cellule K&i la formule : J&i divisé par la cellule K$2)
Next i

Une proposition différente de celle de Bernard :
VB:
    For i = 1 To 10
        Range("K" & i).Formula = "=J" & i & "/K$2"
    Next i

ou ceci :
VB:
    With Range("K1")
        .Formula = "=J1/K$2"
        .Copy .Resize(10)
    End With

Bon, évidemment là ça ne rime pas à grand chose puisque ça fait écrire en K2 une formule qui fait référence à elle-même... Mais je suppose que c'est le principe que tu veux et non quelque chose d'exact. ;)
 

TooFatBoy

XLDnaute Barbatruc
Du coup mes propositions précédentes donneraient :

VB:
    For i = 6 To Range("A" & Rows.Count).End(xlUp).Row
        Range("K" & i).Formula = "=J" & i & "/K$2"
    Next i

et

VB:
    With Range("K6")
        .Formula = "=J6/K$2"
        .Copy .Resize(Range("A" & Rows.Count).End(xlUp).Row - 5)
    End With
 

Fab117

XLDnaute Impliqué
Bonjour,




Une proposition différente de celle de Bernard :
VB:
    For i = 1 To 10
        Range("K" & i).Formula = "=J" & i & "/K$2"
    Next i

ou ceci :
VB:
    With Range("K1")
        .Formula = "=J1/K$2"
        .Copy .Resize(10)
    End With

Bon, évidemment là ça ne rime pas à grand chose puisque ça fait écrire en K2 une formule qui fait référence à elle-même... Mais je suppose que c'est le principe que tu veux et non quelque chose d'exact. ;)

Merci beaucoup, c'est plus facile à comprendre our moi.
J'ai résolu ainsi presque tous mes points.
Il me reste juste:

VB:
    For i = 1 to cible)
        Range("M" & i) = Range("L" & i) + (Range("K" & i)*7)
    next i
    
    'J'ai essayé sans succès
    Range("M" & i).Formula = "=L" & i & ("+K" & i) * 7
 

TooFatBoy

XLDnaute Barbatruc
Merci beaucoup, c'est plus facile à comprendre pour moi.
Oui, je me doute un peu car pour moi aussi c'est plus simple à comprendre. ;)

Mais si Bernard a donné une autre possibilité, c'est certainement parce que c'est mieux et plus efficace.
Bernard a des connaissances qui sont à années-lumière de mes balbutiements !

Le problème du "Copy", c'est qu'il copie tout. Et si tu as des MFC (Mises en Forme Conditionnelles), ou des mises en forme de cellules, ça va aussi se recopier, et c'est pas bon ça...
 
Dernière édition:

ChTi160

XLDnaute Barbatruc
Bonjour le Fil
Une autre adaptation Lol

VB:
Sub AutofillTest()
Dim DerLgn as long
Dim SourceR as Range
Dim CibleR as Range
With Worksheets("Consolidation")
     Derlgn = .Cells(.Rows.Count, 10).End(xlUp).Row
              .Range("K6").FormulaR1C1 = "=RC[-1]/R2C"
Set SourceR = .Range("K6")
 Set CibleR = .Range("K6:K" & Derlgn)
SourceR.AutoFill Destination:=CibleR
CibleR.Value = CibleR.Value
End With
End Sub
Bonne fin de Journée
Jean marie
 
Dernière édition:

Discussions similaires

Réponses
4
Affichages
148
Réponses
2
Affichages
135