Probleme formule

Résolu/Fermé
messin57000 Messages postés 67 Date d'inscription lundi 2 septembre 2013 Statut Membre Dernière intervention 9 décembre 2013 - 2 sept. 2013 à 09:12
messin57000 Messages postés 67 Date d'inscription lundi 2 septembre 2013 Statut Membre Dernière intervention 9 décembre 2013 - 11 sept. 2013 à 13:46
Bonjour,

J'ai un problème , bon je sais pas trop comment expliquer mais dans mon fichier aujourd huit j'ai un tableau ou sont marqué les données d'une pompes centrifuge ( courant, puissance, debit ...) et pour chacun de ces données on les modélise par une équation de degré 6 avec coéfficient devant ( a0, a1 ... a6) ce qui donne y=a0+a1*Q+a2*Q^2 ... +a6*Q^6.

Mon probleme c'est que ces coefficient je l'es ai eu ( droitereg) dans un tableau à part, et quand je rentre ma formule dans la cellule j'ai que l'emplacement de chaque coeff, alors que moi je veu que sur la formule apparaisse la valeur brut du coeff!!
c'est a dire par exemple , pour le coeff a0 supposon il est dans B3 dans la formule j'aurai = B3+B4*... alors que moi je veu sa valeur qui apparai dans la formule par exemple 1.2365 + 0.12364*Q+...

Pourrai-je avoir de l'aide??

Je vous remerci

4 réponses

melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
2 sept. 2013 à 09:42
Bonjour,

alors tu as écrit :
= B3+B4*...
Pour avoir :
1.2365 + 0.12364*Q+...

écrit ca :
=gauche(B3;nbcar(B3)+gauche(B4;nbcar(B4)*Q+....
0
messin57000 Messages postés 67 Date d'inscription lundi 2 septembre 2013 Statut Membre Dernière intervention 9 décembre 2013
2 sept. 2013 à 10:00
Merci pour votre réponse rapide , mais je pense pour moi ça sera le meme probleme car je souhaite que dans ma formule les valeur brut apparaissent sans que je sois amener à les taper manuellement, alors que dans ta solution dans la formule j'aurai pas les valeur brut.

ce que je veux c'est avoir 1.2365 + 0.12364*Q... dans ma formule pas le résultat de la formule, je dois mal m'exprimer !

je sais pas si ca existe une fonction ou faut il peut etre faire une macro...
0
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
2 sept. 2013 à 11:05
Bonjour,

voici un exemple et vous verrez que ma formule convient :
https://www.cjoint.com/?CIcle7YiEoO
0
messin57000 Messages postés 67 Date d'inscription lundi 2 septembre 2013 Statut Membre Dernière intervention 9 décembre 2013
2 sept. 2013 à 11:17
Oui votre formule marche bien mais le probleme c'est qu'elle donne le resultat que je veut mais dans la cellule pas dans la formule de la cellule. je dois mal m'exprimer.
Voici un exemple c'est marquer en rouge ce que je veut et en jaune la cellule en question.

http://cjoint.com/13sp/CIclq0JiVvT.htm

merci
0
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
2 sept. 2013 à 12:06
Re,

je ne sais pas faire et je ne crois pas que ce soit possible.
soit tu écris en dur tes coefficients
soit tu laisses ta formule comme ca.

je laisse la place à quelqu'un d'autre.
0
messin57000 Messages postés 67 Date d'inscription lundi 2 septembre 2013 Statut Membre Dernière intervention 9 décembre 2013
2 sept. 2013 à 14:47
Merci en tout cas c'est gentille d'avoir voulu m'aider :)

Youssef
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
Modifié par eriiic le 2/09/2013 à 12:42
Bonjour,

Sans détruire ta formule, une fonction personnalisée qui affiche (dans une autre cellule donc) les paramètres évalués.
Les références à évaluer doivent être dans des plages nommées qui commence par "ev_" :
Function evalParamFormule(formule As Range)
    Dim f2 As String, fEval As String, param As Variant, f
    Dim pl As Range, pl2 As Range, nom As Name, i As Long
    fEval = formule.Formula
    f2 = formule.Formula
    If Left(f2, 1) <> "=" Then
        evalParamFormule = CVErr(xlErrValue)
        Exit Function
    End If
    f2 = Mid(f2, 2)
    f2 = Replace(Replace(Replace(Replace(Replace(Replace(f2, "+", "µ"), "-", "µ"), "*", "µ"), "/", "µ"), "(", "µ"), ")", "µ")
    ' découpage de la formule sur +, -, *, /, (, et ) pour récup des paramètres
    param = Split(f2, "µ")
    For i = 0 To UBound(param)
        'pour chaque paramètre
        Set pl = Nothing
        On Error Resume Next
        Set pl = Range(param(i))
        On Error GoTo 0
        If Not pl Is Nothing Then
            ' si le paramètre est une référence
            For Each nom In Names
                'pour chaque nom
                If Left(nom.Name, 3) = "ev_" Then
                    ' si le nom commence par ev_
                    Set pl2 = Intersect(Range(nom), pl)
                    If Not pl2 Is Nothing Then
                        If Intersect(Range(nom), pl).Count = pl.Count Then
                            'et que le paramètre intégralement est inclus dans le nom
                            fEval = Replace(fEval, param(i), Range(param(i)).Value)
                        End If
                    End If
                End If
            Next nom
        End If
    Next i
    evalParamFormule = fEval
End Function

Le découpage de la formule se limite aux opérateurs simples, et les références à évaluer doivent avoir une seule lettre. Suffisant pour ta demande, et beaucoup de travail en plus pour des références sur 2 lettres et plus.
https://www.cjoint.com/c/CIcmNeWLTjh

eric


Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
0
messin57000 Messages postés 67 Date d'inscription lundi 2 septembre 2013 Statut Membre Dernière intervention 9 décembre 2013
2 sept. 2013 à 14:47
bonjour Eric,

J'ai essayé ta méthode Eric j'y arrive pas a avoir le resultat voulu vu que les coefficient n'apparaissent pas en brut ça doit être un probleme dans la macro quand je l'ai appliqué sur ma feuille excel... ( je maitrise pas encore le language VBA ^^) .
Voici le lien de ma feuille ou j'ai essayé d'appliquer la fonction :)

http://cjoint.com/13sp/CIcoPVQIRdg.htm

Merci Pour ta reponse

Youssef
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
Modifié par eriiic le 2/09/2013 à 16:31
Re,

Les références à évaluer doivent être dans des plages nommées qui commence par "ev_"
Il ne manque que ça.
Je me base dessus pour savoir s'il faut évaluer la référence ou non. Elle doit appartenir intégralement à une plage dont le nom commence par ev_
Sélectionne B19:H19 et nomme la plage ev_1 (ou ev_ce_qu_tu_veux)

eric
0
messin57000 Messages postés 67 Date d'inscription lundi 2 septembre 2013 Statut Membre Dernière intervention 9 décembre 2013
2 sept. 2013 à 16:42
Merci Eric ca marche en fait je savais pas comment nommer une plage...
Merci beaucoup pour ton aide :)
0
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
2 sept. 2013 à 17:10
Bonjour messin57000,

J'aurais plutôt pensé à la fonction CONCATENER... qui devrait éviter de nommer une plage et l'usage de VBA...

A+
0
messin57000 Messages postés 67 Date d'inscription lundi 2 septembre 2013 Statut Membre Dernière intervention 9 décembre 2013
2 sept. 2013 à 21:40
Bonjour Zoul67,

oui effectivement j'avais pensé à ca aussi mais c'est quand même plus propre quand on maitrise le language vba mais sinon oui ta raison concatener c'était le seul recours :)

A plus
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
Modifié par eriiic le 2/09/2013 à 17:21
J'ai fait évoluer un peu la fonction.
Ajout de 2 paramètres optionnels :
- nbSignificatifs : nombre de chiffres significatifs conservés (6 par défaut)
- ing : notation ingénieur, puissances de 10 multiples de 3 (FAUX par défaut)

https://www.cjoint.com/?CIcrmgjRS5S

eric

edit: je crois qu'il y a une erreur dans l'exposant mais pas le temps de corriger. Ce soir sans doute...

Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
Modifié par eriiic le 2/09/2013 à 19:57
Fonction corrigée :
Function evalParamFormule(formule As Range, Optional nbSignificatifs As Long = 6, Optional ing As Boolean = False)
    ' évalue certains paramètres de la formule
    ' ceux dont la référence appartient à une plage dont le nom commence par ev_ sont évalués
    ' ces plages doivent être limitées aux colonnes A:Z
    ' Paramètres optionnels
    ' nbSignificatifs: nombre de chiffres significatifs à afficher
    ' ing: affichage au format ingénieur (exposant multiple de 3)

    Dim a19 As String, fEval As String, param As Variant, a
    Dim pl As Range, pl2 As Range, nom As Name, i As Long
    Dim Exposant As Long, Parts() As String, valeur As String

    fEval = formule.Formula
    a19 = formule.Formula
    If Left(a19, 1) <> "=" Then
        evalParamFormule = CVErr(xlErrValue)
        Exit Function
    End If
    a19 = Mid(a19, 2)
    a19 = Replace(Replace(Replace(Replace(Replace(Replace(a19, "+", "µ"), "-", "µ"), "*", "µ"), "/", "µ"), "(", "µ"), ")", "µ")
    ' découpage de la formule sur +, -, *, /, (, et ) pour récup des paramètres
    param = Split(a19, "µ")
    For i = 0 To UBound(param)
        'pour chaque paramètre
        Set pl = Nothing
        On Error Resume Next
        Set pl = Range(param(i))
        On Error GoTo 0
        If Not pl Is Nothing Then
            ' si le paramètre est une référence
            For Each nom In Names
                'pour chaque nom
                If Left(nom.Name, 3) = "ev_" Then
                    ' si le nom commence par ev_
                    Set pl2 = Intersect(Range(nom), pl)
                    If Not pl2 Is Nothing Then
                        If Intersect(Range(nom), pl).Count = pl.Count Then
                            'et que le paramètre intégralement est inclus dans le nom
                            Parts = Split(Format(Range(param(i)).Value, "0.0#############E+0"), "E")
                            Exposant = 3 * Int(Parts(1) / 3)
                            valeur = Round(Parts(0), nbSignificatifs - 1) * 10 ^ (Parts(1) - Exposant)
                            If ing Then
                                valeur = valeur & IIf(Exposant, "E" & Exposant, "")
                            Else
                                valeur = CDbl(valeur & "E" & Exposant)
                            End If
                            fEval = Replace(fEval, param(i), valeur)
                        End If
                    End If
                End If
            Next nom
        End If
    Next i
    evalParamFormule = Replace(fEval, "+-", "-")
End Function

https://www.cjoint.com/?CIct3wJ3l6d

eric
0
messin57000 Messages postés 67 Date d'inscription lundi 2 septembre 2013 Statut Membre Dernière intervention 9 décembre 2013
11 sept. 2013 à 13:46
Merci Eric pour ta réponse :)
0