VBA - Problème avec formule matricielle
Résolu/Fermé
cavalo
-
26 janv. 2010 à 09:49
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 26 janv. 2010 à 15:04
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 26 janv. 2010 à 15:04
A voir également:
- Vba formule matricielle
- Formule si et - Guide
- Formule excel pour additionner plusieurs cellules - Guide
- Formule excel moyenne - Guide
- Formule excel - Guide
- Excel mise en forme conditionnelle formule - Guide
12 réponses
tompols
Messages postés
1273
Date d'inscription
jeudi 29 juillet 2004
Statut
Contributeur
Dernière intervention
25 novembre 2013
435
26 janv. 2010 à 14:28
26 janv. 2010 à 14:28
Re,
essaie comme ça, ça fonctionne chez moi...
L'astuce ds un cas comme ça, c'est par exemple de taper la formule en A1 avec des plages fixes, fixer les memes plages dans le code et simplement comparer :
:)
essaie comme ça, ça fonctionne chez moi...
.FormulaArray = "=INDEX(LINEST(" & xrange.Address & "," & yrange.Address & "^{1;2;3}),1,{1;2;3})"
L'astuce ds un cas comme ça, c'est par exemple de taper la formule en A1 avec des plages fixes, fixer les memes plages dans le code et simplement comparer :
MsgBox "=INDEX(LINEST(" & xrange.Address & "," & yrange.Address & "^{1;2;3}),1,{1;2;3})" & vbCrLf & Range("A1").FormulaArray
:)
garion28
Messages postés
1545
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
3 avril 2011
406
26 janv. 2010 à 09:55
26 janv. 2010 à 09:55
essaye formulalocal a la place de formulaarray
c'est pour utiliser les formules de la feuille de calcul dans du vba
c'est pour utiliser les formules de la feuille de calcul dans du vba
tompols
Messages postés
1273
Date d'inscription
jeudi 29 juillet 2004
Statut
Contributeur
Dernière intervention
25 novembre 2013
435
26 janv. 2010 à 10:37
26 janv. 2010 à 10:37
Bonjour,
poscoeff.FormulaArray = "=INDEX(DROITEREG( "& xrange & ";" & yrange & "^{1,2,3}); 1; {1,2,3})"
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
tompols
Messages postés
1273
Date d'inscription
jeudi 29 juillet 2004
Statut
Contributeur
Dernière intervention
25 novembre 2013
435
26 janv. 2010 à 12:50
26 janv. 2010 à 12:50
Bonjour,
Ok, si xrange et yrange sont des objets range alors:
poscoeff.FormulaArray = "=INDEX(DROITEREG( "& xrange.address & ";" & yrange.address & "^{1,2,3}); 1; {1,2,3})"
Ok, si xrange et yrange sont des objets range alors:
poscoeff.FormulaArray = "=INDEX(DROITEREG( "& xrange.address & ";" & yrange.address & "^{1,2,3}); 1; {1,2,3})"
J'ai une erreur d'execution 424 : objet requis.
Pour info mes variables sont définies comme suit :
xrange = Sheets("Traitement des données").Range(Cells((cl - counter - 1), 3), Cells((cl - 1), 3))
yrange = Sheets("Traitement des données").Range(Cells((cl - counter - 1), 4), Cells((cl - 1), 4))
J'ai essayé de déclarer mes variables xrange et yrange pour voir si ça venait de là:
Dim xrange as range
Dim yrange as range
Set xrange = Sheets("Traitement des données").Range(Cells((cl - counter - 1), 3), Cells((cl - 1), 3))
Set yrange = Sheets("Traitement des données").Range(Cells((cl - counter - 1), 4), Cells((cl - 1), 4))
Mais dans ce cas j'ai une erreur d'execution 1004 : impossible de définir la propriété FormulaArray de la classe Range...
Pour info mes variables sont définies comme suit :
xrange = Sheets("Traitement des données").Range(Cells((cl - counter - 1), 3), Cells((cl - 1), 3))
yrange = Sheets("Traitement des données").Range(Cells((cl - counter - 1), 4), Cells((cl - 1), 4))
J'ai essayé de déclarer mes variables xrange et yrange pour voir si ça venait de là:
Dim xrange as range
Dim yrange as range
Set xrange = Sheets("Traitement des données").Range(Cells((cl - counter - 1), 3), Cells((cl - 1), 3))
Set yrange = Sheets("Traitement des données").Range(Cells((cl - counter - 1), 4), Cells((cl - 1), 4))
Mais dans ce cas j'ai une erreur d'execution 1004 : impossible de définir la propriété FormulaArray de la classe Range...
garion28
Messages postés
1545
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
3 avril 2011
406
26 janv. 2010 à 13:49
26 janv. 2010 à 13:49
j'ai l'impression que ta syntaxe est mauvaise pour Sheets("Traitement des données").Range(Cells((cl - counter - 1), 3), Cells((cl - 1), 3))
, as tu essayé de voir si ca renvoyai bien la valeur souhaité ?
, as tu essayé de voir si ca renvoyai bien la valeur souhaité ?
Merci beaucoup tompols!!
Ta formule ne marchait pas au début, il faut remplacer {1;2;3} par {1,2,3}, ce que j'ai pu voir grace à ta petite astuce!
La syntaxe exacte est donc :
poscoeff.FormulaArray = "=INDEX(LINEST(" & yrange.Address & "," & xrange.Address & "^{1,2,3}),1,{1,2,3})"
Merci encore
:)
Ta formule ne marchait pas au début, il faut remplacer {1;2;3} par {1,2,3}, ce que j'ai pu voir grace à ta petite astuce!
La syntaxe exacte est donc :
poscoeff.FormulaArray = "=INDEX(LINEST(" & yrange.Address & "," & xrange.Address & "^{1,2,3}),1,{1,2,3})"
Merci encore
:)
tompols
Messages postés
1273
Date d'inscription
jeudi 29 juillet 2004
Statut
Contributeur
Dernière intervention
25 novembre 2013
435
26 janv. 2010 à 15:04
26 janv. 2010 à 15:04
Oki, chez moi ct bien {1;2;3}, surement une histoire de séparateurs, d'où l'utilité de la ptite astuce ;)
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
26 janv. 2010 à 15:04
26 janv. 2010 à 15:04
Bonjour,
Le pb peut se résoudre par la fonction evaluate mais le calcul se fait sans inscrire la formule dans la cellule
Par exemple je calcule ci dessous la somme des 3 plus grande valeurs de la plage A1:A36
si la plage de cellule n'est pas variable on peut écrire (dans mon exemple)
--------
pour droitereg= linest en anglais
La formule de Tompols pourrait apparemment convenir en remplacant les points-virgules par des virgules ( patois VBA anglais) et en mettant un espace dans le premier "& (---> " espace & )
Nota: il est rare qu'on y arrive du premier coup (erreur 2015): restez zen et polis... bref! pas comme moi ;-)
EDIT 15h06: Excusez moi je n'avais pas rafraichi !!!
Le pb peut se résoudre par la fonction evaluate mais le calcul se fait sans inscrire la formule dans la cellule
Par exemple je calcule ci dessous la somme des 3 plus grande valeurs de la plage A1:A36
xrange = Range("A1:A36").Address Range("E2") = Evaluate("SUM(large(" & xrange & ",{1,2,3}))")
si la plage de cellule n'est pas variable on peut écrire (dans mon exemple)
Range("E3") = [SUM(large(A1:A36,{1,2,3}))]
--------
pour droitereg= linest en anglais
La formule de Tompols pourrait apparemment convenir en remplacant les points-virgules par des virgules ( patois VBA anglais) et en mettant un espace dans le premier "& (---> " espace & )
Nota: il est rare qu'on y arrive du premier coup (erreur 2015): restez zen et polis... bref! pas comme moi ;-)
EDIT 15h06: Excusez moi je n'avais pas rafraichi !!!