Problème : fonction Evaluate récursive

Sunfreez

XLDnaute Nouveau
Bonjour à tous,

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 !
 

pyfux

XLDnaute Occasionnel
Re : Problème : fonction Evaluate récursive

Bonjour,

Votre fonction "REFERENCES_C1", n'est pas récursive!

Pour que le forum puisse vous aider, ce serait bien de préciser votre besoin et de mettre un fichier en exemple...
 

Sunfreez

XLDnaute Nouveau
Re : Problème : fonction Evaluate récursive

Bonjour Pyfux,

Ce n'est pas la fonction en elle même qui est récursive (je me suis mal exprimé, désolé). La fonction en elle même n'est pas intéressante, c'est surtout la formule (et l'utilisation de Evaluate) qui me préoccupe.

Ma formule à besoin d'avoir la valeur précédemment calculée. Hors je n'arrive pas à la récupérer correctement (j'obtiens une erreur de type 2015 et par conséquent dans ma feuille de calcul, j'obtiens la valeur #VALEUR! dans mes cellules (si je mets le résultat contenu à l'index précédent sous forme de texte, avec CStr(TABL(i-1,1)). Si je ne fais pas ça, j'ai tout simplement un message d'erreur :" erreur de typage" car je ne peux pas utiliser directement le résultat obtenu par Evaluate).

J'ai réussi en insérant au fur et à mesure dans mes cellules le résultat de l'évaluation, mais c'est beaucoup trop long (environ 1,5s par cellule, fois 1500 (pour la colonne), fois 17 (pour le nombre de colonnes contenant chacune différentes formules), fois 80 (pour le nombre de feuilles totales contenant chacune en colonne C des valeurs différentes), cela me prendrai donc 1h environ ^^)

Au niveau du fichier, je ne peux pas vous en envoyer car ces données sont confidentielles (j'ai donc modifié mon code pour obtenir celui du dessus)

Mon besoin est donc de savoir comment utiliser la valeur obtenue après évaluation, à l'incrémentation suivante

Merci.
 

Staple1600

XLDnaute Barbatruc
Re : Problème : fonction Evaluate récursive

Bonsoir à tous


Au niveau du fichier, je ne peux pas vous en envoyer car ces données sont confidentielles (j'ai donc modifié mon code pour obtenir celui du dessus)
Et ce qui est confidentiel ne peut pas être anonymisé par hasard ?
C'est pourtant assez rapide à faire avec les fonctionnalités offertes par Excel
(Edition/Remplacer, ALEA(), Recopier vers le bas etc...)
 

Discussions similaires

Réponses
12
Affichages
289
Réponses
1
Affichages
139
Réponses
6
Affichages
173

Statistiques des forums

Discussions
312 529
Messages
2 089 368
Membres
104 148
dernier inscrit
VICVIC