Bonjour à tous,
Après plusieurs heures de recherches, je sèche sur un problème dû à la fonction Evaluate.
Ce que souhaite faire :
Ce que je fais:
Mon problème :
Voici mon code (je n'ai pas tout mis, car je dois faire cela pour 17 formules, pour 80 feuillles) :
Merci à vous !
Après plusieurs heures de recherches, je sèche sur un problème dû à la fonction Evaluate.
Ce que souhaite faire :
J'aimerai évaluer une formule récursive sur 1500 lignes (plutôt que de mettre simplement la formule dans les 1500 cellules). Cette formule dépend du résultat obtenu dans la cellule précédente.
Ce que je fais:
Pour faire cela je sélectionne ma plage, puis je créer un tableau temporaire de la taille de la plage. Pour chacune des cases du tableau je met le résultat de l'évaluation dans le tableau. Une fois le traitement terminé je recopie les données du tableau dans ma plage.
Mon problème :
Mon souci est que la fonction Evaluate ne fonctionne pas correctement car la valeur de la case précédement évaluée n'est pas inséré dans la feuille. Donc j'ai voulu, au lieu de prendre la valeur de la cellule précédente, prendre à la place la valeur contenu dans le tableau intérmédiaire, à l'index précédent. Mais cela ne fonctionne pas (j'ai une erreur de typage).
Voici mon code (je n'ai pas tout mis, car je dois faire cela pour 17 formules, pour 80 feuillles) :
Code:
Private Sub REFERENCES_C1()
Dim WS_SHEET As Worksheet
DIM_SELECTION_C3 As Range
Dim SELECTION_C1 As Range
Dim FORMULE As String
Dim TABL()
Dim TABL2()
Set WS_SHEET = Sheets("test")
WS_SHEET.Activate
'* Pour l'exemple, on rempli la colonne C par 1,2,3 ***************************
SET SELECTION_C3 = Range("C34:C1500")
TABL2() = SELECTION_C3.Value
For i=1 to 1500
TABL2() = i-1
Next i
SELECTION_C3.Value = TABL2()
'******************************************************************************
Set SELECTION_C1 = Range("A34:A1500")
TABL() = SELECTION_C1.FormulaLocal
For i = 1 To 1500 - 33
If i <> 1 then
FORMULE = "=IF(C" & i + 33 & "=0,VNS," & TABL(i-1,1) +1 & ")" '* On récupère la valeur précédente
Else
FORMULE = "=IF(C" & i + 33 & "=0,VNS,A" & i + 32 & "+1)" '* On récupère la cellule précédente
END IF
TABL(i, 1) = Evaluate(FORMULE)
Next i
SELECTION_C1.FormulaLocal = TABL()
Erase TABL()
Erase TABL2()
Set SELECTION_C1 = Nothing
Set SELECTION_C3 = Nothing
Set WS_SHEET = Nothin.g
End Sub
Merci à vous !