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

  • Initiateur de la discussion Initiateur de la discussion Fab117
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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
 
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. 😉
 
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
 
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
 
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:
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:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
235
Réponses
10
Affichages
388
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
247
Retour