Automatisation valeur cible

CISCO

XLDnaute Barbatruc
Bonjour à tous, et bonne année 2009

J'essaye d'automatiser la résolution d'équations du 1er degré en x, écrite sous n'importe quelle forme (cf le fichier exemple en pièce jointe), transformées automatiquement sous la forme f(x) = 0

Bien sûr, on peut faire cela en utilisant le scénario valeur cible, mais j'ai alors trois petits problèmes :

1) Certaines solutions sont fausses, mais proches de la solution exacte (imprécision). Cela ne me pose pas de problème car je peux faire un test dans la suite de mon programme ne demandant de ne comparer qu'un certain nombre de chiffre après la virgule. Toutefois, pourriez vous me dire comment faire pour modifier le nombre d'itérations utilisées par valeur cible, histoire d'essayer d'augmenter la précision des résultats obtenus ?

2) Certaines solutions sont complètement fausses, ou Excel ne trouve pas de solution (erreur). Bien sûr, en choississant mieux la valeur initiale de x, on finit par trouver, ou la solution exacte, ou une solution approchée acceptable. Malheureusement, cela ne me convient pas car cela veut dire entre autre que pour choisir correctement la valeur initiale de x, il faut déja connaitre la solution exacte !

3) Pour trouver la solution proposée par Excel, il faut à chaque fois ouvrir la fenêtre valeur cible, choisir la cellule où se trouve l'équation, la valeur à atteindre, la valeur à modifier. Ne serait-il pas possible d'avoir ou une équation, ou une macro calculant automatiquement la valeur de x, à l'ouverture du fichier, ou suite à la modification de l'équation (cf fichier).

Merci à tous, et bon W.E.

Francis
 

Pièces jointes

  • exemples valeur cible2003.xls
    34.5 KB · Affichages: 203

pierrejean

XLDnaute Barbatruc
Re : Automatisation valeur cible

bonjour CISCO

Pour l'automatisation , voir en Feuille 2
Mais...
sans veritable surprise les resultats sont les mêmes

Je regarderais plus avant lorsque j'aurais un peu plus de temps
 

Pièces jointes

  • exemples valeur cible2003.zip
    20.5 KB · Affichages: 250
  • exemples valeur cible2003.zip
    20.5 KB · Affichages: 261
  • exemples valeur cible2003.zip
    20.5 KB · Affichages: 252

pierrejean

XLDnaute Barbatruc
Re : Automatisation valeur cible

Re

J'ai trituré les options du Solveur sans avoir pu obtenir un resultat valable

La seule chose que j'ai pu faire c'est signaler les cas ou le Solveur n'est pas adapté
 

Pièces jointes

  • exemples valeur cible2003.zip
    22 KB · Affichages: 128
  • exemples valeur cible2003.zip
    22 KB · Affichages: 136
  • exemples valeur cible2003.zip
    22 KB · Affichages: 137

CISCO

XLDnaute Barbatruc
Re : Automatisation valeur cible

Bonjour à tous,
bonjour PierreJean, et grand merci.

Ton solveur marche drolement bien. Je devrai pouvoir faire avec, faute de mieux en ce qui concerne les imprécisions et les erreurs...
J'avais pensé à faire faire le calcul de x à partir de différentes valeurs initiales, puis à faire comparer les solutions proposées, puis en cas de différence, à faire envoyer un message d'erreur... Malheureusement, ce n'est pas très rigoureux, comme test...

En attendant mieux... Si quelqu'un a d'autres idées en ce qui concerne les imprécisions, et surtout les erreurs.

Encore merci, Pierrejean.

@ plus.
 

CISCO

XLDnaute Barbatruc
Re : Automatisation valeur cible

Bonsoir à tos

pas de nouvelle, bonne nouvelle.

Personne n'a une petite idée pour résoudre ces problèmes d'imprécision et ces erreurs (divergence ?) lors de l'utilisation de valeur cible ?

Merci d'avance
 

ODVJ

XLDnaute Impliqué
Re : Automatisation valeur cible

Bonsoir à tous,

j'ai ajouté 2 ou trois choses à ta macro, pierrejean
Code:
Sub test()
Range("B2:D65536").ClearContents
Range("B2:D65536").ClearFormats
With Application
    .MaxIterations = 2000
    .MaxChange = Range("F1")
End With
ActiveWorkbook.PrecisionAsDisplayed = False
For n = 2 To Range("A65536").End(xlUp).Row
Range("C" & n) = 1
x = Split(Range("A" & n), "=")
b = "=" & x(0) & "-(" & x(1) & ")"
b = Replace(b, "x", Range("C" & n).Address(0, 0))
Range("B" & n) = b
Range("B" & n).GoalSeek Goal:=0, ChangingCell:=Range("C" & n)
If Range("B" & n) <> 0 Then
 If Abs(Range("B" & n)) > Range("F1") Then
    Range("C" & n) = -1
    Range("B" & n).GoalSeek Goal:=0, ChangingCell:=Range("C" & n)
    If Range("B" & n) <> 0 Then
     If Abs(Range("B" & n)) > Range("F1") Then
        Range("D" & n) = "ERREUR : Le Solveur Ecxcel pédale dans la semoule"
        Range("B" & n & ":D" & n).Font.ColorIndex = 3
     Else
        Range("D" & n) = "Imprecision"
        Range("B" & n & ":D" & n).Font.ColorIndex = 4
     End If
    End If
 Else
    Range("D" & n) = "Imprecision"
    Range("B" & n & ":D" & n).Font.ColorIndex = 4
 End If
End If
Next n
End Sub


principaux ajouts :
  • une valeur absolue dans le test de précision
  • un paramétrage du nombre de boucles des itérations
  • un départ en -1 lorsque celui en 1 échoue
Cisco, pourquoi mets-tu des x au dénominateur? tu prends des risques avec le domaine de définition et tu passes en degré -1.
Quelle utilisation envisages-tu de faire de ce classeur?
Les résultats sont parfois folkloriques (essaye avec 2/x=3/x ou 2/X=2/x)

pour améliorer le point de départ du calcul valeur cible, il serait judicieux de mettre une petite dichotomie au départ de la macro pour identifier un intervalle "relativement petit" où la fonction change de signe.

cordialement
 

CISCO

XLDnaute Barbatruc
Re : Automatisation valeur cible

Bonjour à tous, bonjour ODVJ

Merci de te pencher sur mon problème.

Pourquoi est-ce que je met des x au dénominateur, et bien parce que...

Comme écrit dans mon premier post, j'essaye d'automatiser la résolution d'équations du "1er degré", quelle que soit la forme de celle-ci, même si ce n'est pas sous la forme a*x+b = c. Ce travail fait suite à celui présenté il y a 2 ans (cf.https://www.excel-downloads.com/threads/verification-dequations-du-1er-degre.70394/).

Explication : Je suis prof en lycée professionnel, et mes élèves (BEP, bac) gèrent plutôt difficilement et lentement ce type d'équations ! Histoire de leur faire acquérir quelques automatismes (distributivité, simplification de certaines fractions, opérations sur les fractions, déplacement de termes dans une équation, produit en croix...), j'ai créé 8 fichiers de 20 équations (cf 1 éq en pièce jointe). Dans ceux ci, l'élève écrit tous ou certains de ses calculs intermédiaires, et Excel lui dit si c'est faux ou vrai. Puis il continue jusqu'à trouver x = ... Sur le net, on trouve un programme libre, l'atelier d'algèbre, qui fait à peu près la même chose, et d'autres aussi, mais pas avec la même présentation, ni sur excel.
Les fichiers excel créés à l'époque, en 2006, ont quelque peu évolués depuis pour tenir compte de quelques problèmes (pb si on propose un calcul intermédiaire commençant par un moins, par ex - 2*x + 40 =..., pb d'arrondi certaines fois). Dans l'état actuel des choses, je suis forcé de rentrer dans une colonne les solutions (H sur le fichier ci-joint) (colonne cachée et protégée dans la version élève).
J'aimerai bien que cela soit Excel qui calcule cette solution, histoire :
* de pouvoir faire plus de fichiers facilement, pour varier les "plaisirs".
* de pouvoir faire écrire, choisir par les élèves les équations sur lesquelles ils vont travailler.

Je sais bien que mettre x au dénominateur peut poser problème coté domaine de définition, et qu'apparemment, cela pose parfois des problèmes de convergence à Excel, mais bon... cela serait bien pratique, et un peu plus intéressant, pédagogiquement parlant.

@ plus
 

Pièces jointes

  • Equation1erdegré1 sans arrondi 2003.xls
    46.5 KB · Affichages: 99

CISCO

XLDnaute Barbatruc
Re : Automatisation valeur cible

Bonjour à tous

Bonjour Pierrejean.

Je viens de tester ta macro sur un autre de mes 8 fichiers, et cela semble fonctionner à merveille : Il ni y a qu'un résultat légèrement imprécis, et encore... En affichant 18 chiffres après la virgule, je ne vois pas de différence entre la solution exacte et la solution proposée par Excel !

Je vous tiendrai au courant dès que j'aurai traité plus d'exemples.

Pierrejean, pourrais tu m'expliquer la méthode que tu as utilisée pour obtenir une convergence dans tous les cas ? D'accord, on peut augmenter le nombre d'itérations, et forcer la poursuite des calculs jusqu'à obtenir la valeur cible avec une certaine précision, tant que ce nombre d'itérations n'est pas dépassé. Toutefois, si la méthode est divergente dès le début...

@ plus
 

pierrejean

XLDnaute Barbatruc
Re : Automatisation valeur cible

Re
Je ne peux guere expliquer le comportement du solveur d'Excel
Pour obtenir la derniere macro ma reflexion a été la suivante:
Partant de l'idée d'ODVJ (que je salue et remercie) j'ai compris que la fonction a un point non defini pour x=0 et donc qu'il etait necessaire apres avoir testé en positif de tester en negatif
J'avais opté au depart pour 1 un peu au hasard
Cette fois j'ai mis le minimum de precision demandé en positif d'abord puis en negatif
Par contre j'ai fixé le maxchanges très bas soit:0.000000000001
Le nombre d'iteration ne m'a pas paru determinant et je l'ai laissé a 100
Comme tu le vois tout ceci est plutot experimental !!!
 

fym91

XLDnaute Nouveau
Re : Automatisation valeur cible

Bonjour amis Exceleur, je me prénomme Fred, et je souhaite automatiser une tâche fastidieuse à effectuer en manuel.
L'idée est de créer un macro qui me recalcule une valeur cible sur toute une colonne.
A = valeur initiale (valeur entrée)
B = coef multiplicateur (variable)
C = valeur initiale x coef multiplicateur (formule de calcul)
D = remise (valeur entrée)
E = VALEUR CIBLE (C x remise)

Y'a-t-il une machine de guerre ici, susceptible de m'indiquer la marche à suivre pour créer cette macro ?

Merci grandement par avance

Fred
 

Discussions similaires

Réponses
2
Affichages
249

Statistiques des forums

Discussions
313 866
Messages
2 103 082
Membres
108 521
dernier inscrit
manouba