OVH Cloud OVH Cloud

Évaluation matricielle, peut-être !

4 réponses
Avatar
garnote
Bonsoir à tous toutes,

J'utilise cette macro pour construire des graphiques XY.
Question :
Est-ce possible de remplacer le «For each» par
une évaluation matricielle ?
Et si oui, comment ?

Sub Fonction()
Dim f As String
'[B4] contient une expression en x
'et est formatée «texte»
'C'est ma fonction.
'Exemple :
'(x^2)^(1/3)-sin(-x^2)+EXP(1)^(-2*x^2)
f = [B4]
f = Replace(f, ",", ".")
f = Replace(f, "-x", "+0-x")
'La plage nommée «vx» (en colonne) contient
'50 valeurs numériques de -5 à 5.
Set ici = Range("vx")
'Évalue la fonction pour chaque valeur de x :
For Each valeur In ici
i = i + 1
v = Replace(ici(i, 1), ",", ".")
ici(i, 2) = Evaluate(Replace(f, "x", v))
Next
'Question : Est-ce possible de remplacer le
'«For each» par une évaluation matricielle ?
'Serge
End Sub

;-))) et merci

Serge

4 réponses

Avatar
AV
Pourquoi pas :

Sub zzzzz()
f = [B4]
[vx].Offset(0, 1) = Evaluate(Replace(Replace(f, ",", "."), "x", v))
End Sub


PS : > 'La plage nommée «vx» (en colonne)
Il me semble (d'après lecture de ton code) que la plage est plutôt en lignes

AV

"garnote" a écrit dans le message news:
8rIbb.24584$
Bonsoir à tous toutes,

J'utilise cette macro pour construire des graphiques XY.
Question :
Est-ce possible de remplacer le «For each» par
une évaluation matricielle ?
Et si oui, comment ?

Sub Fonction()
Dim f As String
'[B4] contient une expression en x
'et est formatée «texte»
'C'est ma fonction.
'Exemple :
'(x^2)^(1/3)-sin(-x^2)+EXP(1)^(-2*x^2)
f = [B4]
f = Replace(f, ",", ".")
f = Replace(f, "-x", "+0-x")
'La plage nommée «vx» (en colonne) contient
'50 valeurs numériques de -5 à 5.
Set ici = Range("vx")
'Évalue la fonction pour chaque valeur de x :
For Each valeur In ici
i = i + 1
v = Replace(ici(i, 1), ",", ".")
ici(i, 2) = Evaluate(Replace(f, "x", v))
Next
'Question : Est-ce possible de remplacer le
'«For each» par une évaluation matricielle ?
'Serge
End Sub

;-))) et merci

Serge





Avatar
garnote
Salut AV,

Je voulais dire «sur une colonne».
L'imbrication des Replace et l'utilisation
des [ ] m'a permis d'obtenir ceci :

Sub Fonction()

' Ma fonction, formatée «texte» en A4:
' 1,01*(x^2)^(1/3)-sin(-x^2)/2+EXP(1)^(-x^2)-1,8
' Valeurs de x de C6 à C55, nommées vx.

f = Replace(Replace([A4], ",", "."), "-x", "+0-x")
For Each v In [vx]
r = Replace(v, ",", ".")
v.Offset(0, 1) = Evaluate(Replace(f, "x", r))
Next

End Sub

MAIS je ne sais toujours pas où insérer ta formule matricielle !
Comment remplacer matriciellement les virgules de [vx]
par des points et ensuite évaluer matriciellement f
pour chaque valeur de [vx] ?

Serge



"AV" a écrit dans le message de news:

Pourquoi pas :

Sub zzzzz()
f = [B4]
[vx].Offset(0, 1) = Evaluate(Replace(Replace(f, ",", "."), "x", v))
End Sub


PS : > 'La plage nommée «vx» (en colonne)
Il me semble (d'après lecture de ton code) que la plage est plutôt en
lignes


AV

"garnote" a écrit dans le message news:
8rIbb.24584$
Bonsoir à tous toutes,

J'utilise cette macro pour construire des graphiques XY.
Question :
Est-ce possible de remplacer le «For each» par
une évaluation matricielle ?
Et si oui, comment ?

Sub Fonction()
Dim f As String
'[B4] contient une expression en x
'et est formatée «texte»
'C'est ma fonction.
'Exemple :
'(x^2)^(1/3)-sin(-x^2)+EXP(1)^(-2*x^2)
f = [B4]
f = Replace(f, ",", ".")
f = Replace(f, "-x", "+0-x")
'La plage nommée «vx» (en colonne) contient
'50 valeurs numériques de -5 à 5.
Set ici = Range("vx")
'Évalue la fonction pour chaque valeur de x :
For Each valeur In ici
i = i + 1
v = Replace(ici(i, 1), ",", ".")
ici(i, 2) = Evaluate(Replace(f, "x", v))
Next
'Question : Est-ce possible de remplacer le
'«For each» par une évaluation matricielle ?
'Serge
End Sub

;-))) et merci

Serge









Avatar
AV
Ne reste plus qu'à se débarrasser du «For each» pour la
rendre encore plus incompréhensible !!!


Et ma proposition elle fait quoi hein ?
Pfffff....

AV

Avatar
garnote
;-)))

[vx].Offset(0, 1) = Evaluate(Replace(Replace(f, ",", "."), "x", v))

Mais où je la dépose là-dedans :

Sub Fonction()
f = Replace(Replace([A4], ",", "."), "-x", "+0-x")
For Each v In [vx]
v.offset(0,1) = Evaluate(Replace(f, "x", Replace(v, ",", ".")))
Next v
End Sub

ta super proposition ?

Serge


"AV" a écrit dans le message de news:
#3ANU$
Ne reste plus qu'à se débarrasser du «For each» pour la
rendre encore plus incompréhensible !!!


Et ma proposition elle fait quoi hein ?
Pfffff....

AV