calcul par itération ?

lao31

XLDnaute Occasionnel
Bonjour a tous,

pour m'eviter de rentrer chaque fois des valeurs a la main, je suis intimement convaincu qu'il y a un moyen de trouver la valeur que je cherche. Probablement un calcul par iteration, mais en fait je n'en sais rien.
j'ai cherché des posts sensiblement equivalent, mais je rame.
cela serai pour anticiper un renversement de tendance.
Je vous joint un petit fichier qui j'espere pourra vous aider plus que mes explications qui sont toujours a la limite de la comprehension.
merci par avance
Michel
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : calcul par itération ?

Re,

Autre solution avec ce fichier (4) et cette macro :

Code:
Sub Copie()
'Ctrl+A pour lancer la macro
If Selection.Row < 4 Or Selection.Areas.Count > 1 Then Exit Sub
Selection(0, 1).EntireRow.Copy Selection.EntireRow
With Selection.EntireRow.Columns(1)
  .FormulaR1C1 = "=(R[-1]C6/(1-2/(R1C5+1))-R[-1]C2*(1-2/(R1C2+1))-R[-1]C3*(2/(R1C3+1)-1)+R[-1]C5)/(2/(R1C2+1)-2/(R1C3+1))"
  .Value = .Value 'supprime la formule
End With
End Sub
A+
 

Pièces jointes

  • iteration(4).xls
    65.5 KB · Affichages: 49
Dernière édition:

job75

XLDnaute Barbatruc
Re : calcul par itération ?

Bonjour le fil, le forum,

Il est intéressant de tester sur une grande plage.

Sur A26:A50025 la macro précédente s'exécute en 4,2 secondes chez moi (Win XP - Excel 2003).

Les erreurs de calcul se cumulent : la 7ème décimale colonne F est modifiée à partir de la ligne 15163.

A+
 

job75

XLDnaute Barbatruc
Re : calcul par itération ?

Re,

Le cumul des erreurs est quand même un sérieux inconvénient.

On peut l'éviter en arrondissant les cellules en colonne F.

Par exemple à la 8ème décimale avec ARRONDI(xxx;8).

Voyez les formules du fichier (5) et cette macro :

Code:
Sub Copie()
'Ctrl+A pour lancer la macro
[A26:A50025].Select 'juste pour tester
If Selection.Row < 4 Or Selection.Areas.Count > 1 Then Exit Sub
Selection(0, 1).EntireRow.Copy Selection.EntireRow
With Selection.EntireRow.Columns(1)
  .FormulaR1C1 = "=(R[-1]C6/(1-2/(R1C5+1))-R[-1]C2*(1-2/(R1C2+1))-R[-1]C3*(2/(R1C3+1)-1)+R[-1]C5)/(2/(R1C2+1)-2/(R1C3+1)))"
  .Value = .Value 'supprime la formule
End With
End Sub
Nota : ça va encore avec ARRONDI(xxx;9) mais pas avec ARRONDI(xxx;10)...

A+
 

Pièces jointes

  • iteration(5).xls
    67.5 KB · Affichages: 38
Dernière édition:

lao31

XLDnaute Occasionnel
Re : calcul par itération ?

Bonjour le Forum, JOB75

Je passai par hasard et je vois encore une amelioration de la part de JOB75, que dire de plus...
Quand des passionnés se mettent au service d'autrui sans aucune pensée que de rendre service cela me trou le cul excusez moi pour le langage mais j'en ai le souffle coupé.
Le plaisir de la perfection , que j'aimerai avoir cette faculté et ces competences, il faut bosser a 60 piges pas evident.
Bravo et merci encore , c'est exactement ce qu'il me fallait même mieux car cela m'ouvre d'autres portes ou autres prises de tête mais je reviendrai avec grand plaisir.
Cordialement
Michel
 

job75

XLDnaute Barbatruc
Re : calcul par itération ?

Re,

Notez que suivant les arrondis faits en colonne F les résultats des autres colonnes sont un peu différents.

Avec ARRONDI(xxx;7) => A50025 = -3235489,90009332

Avec ARRONDI(xxx;8) => A50025 = -3235481,56260699

Avec ARRONDI(xxx;9) => A50025 = -3235483,22822806

On ne peut pas avoir le beurre et l'argent du beurre.

A+
 

job75

XLDnaute Barbatruc
Re : calcul par itération ?

Re,

Cette solution me paraît nettement meilleure que l'arrondi.

Entrer en F3 et tirer vers le bas la formule :

Code:
=SI(ABS(D3-E3-F2)<0,00000001;F2;D3-E3)
Le 0,00000001 peut être remplacé par une valeur plus grande si nécessaire.

Fichier (6).

A+
 

Pièces jointes

  • iteration(6).xls
    67.5 KB · Affichages: 38

Discussions similaires

Réponses
3
Affichages
590

Statistiques des forums

Discussions
312 790
Messages
2 092 130
Membres
105 230
dernier inscrit
soil59