Formule matricielle avec plages de données variables

Résolu/Fermé
Pouschkine Messages postés 13 Date d'inscription mardi 23 juin 2015 Statut Membre Dernière intervention 22 avril 2016 - Modifié par Pouschkine le 22/04/2016 à 11:00
Pouschkine Messages postés 13 Date d'inscription mardi 23 juin 2015 Statut Membre Dernière intervention 22 avril 2016 - 22 avril 2016 à 11:36
Bonjour,

J'aurais besoin de votre aide. J'ai un problème concernant l'utilisation d'une formule matricielle et malgré mes recherches sur internet je ne trouve pas la solution.

Je voudrais obtenir dans une colonne 1 d'une feuille 1 les coefficients directeurs de droites obtenues par régression linéaire. J'utilise pour cela la formule :
=INDEX(DROITEREG(yrange;xrange);0)
(yrange et xrange sont des plages de cellules contenues dans une feuille 2)

Les lignes de début et de fin de plages de données varient. J'ai réalisé une macro qui m'a permis d'obtenir en feuille 1 :
- en colonne 2 la ligne de début de plage
- en colonne 3 la ligne de fin de plage.

pour obtenir le résultat souhaité j'utilise la macro :
Sub droite()

Dim m As Integer
Dim i As Long
Dim k As Long
Dim xrange As Range
Dim yrange As Range

For m = 9 To 71 'lignes pour lesquelles je souhaite obtenir le coefficient directeur

i = Worksheets("Feuille1").Cells(m, 17).Value 'ligne de début de la plage
k = Worksheets("Feuille1").Cells(m, 19).Value 'ligne de fin de la plage

Set xrange = Worksheets("Data").Range("Y" & i & ":Y" & k)
Set yrange = Worksheets("Data").Range("O" & i & ":O" & k)

Worksheets("Feuille1").Cells(m, 15).Select
Selection.FormulaArray = _
"=INDEX(LINEST(" & yrange.Address & "," & xrange.Address & "),0)"

Next

End Sub


J'ai une erreur au niveau de :
i = Worksheets("Feuille1").Cells(m, 17).Value

13 incompatibilité de type.
De plus, la formule est insérée sur les premières lignes mais prend les plages y et x dans la feuille 1 au lieu de la feuille 2

Merci de votre aide

Pauline

1 réponse

pijaku Messages postés 12259 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 9 août 2022 2 703
22 avril 2016 à 10:32
Bonjour,

Une plage, donc un objet Range doit être "alimentée" grâce au mot clé Set :

Dim xrange As Range
Set xrange = WorkSheets("Feuil1").Range("A1:G125") 


0
Pouschkine Messages postés 13 Date d'inscription mardi 23 juin 2015 Statut Membre Dernière intervention 22 avril 2016
22 avril 2016 à 10:54
Merci pour votre réponse.

Effectivement je me suis rendue compte de mon erreur et ai changé mon post initial (surement pendant que vous étiez en train de me répondre).

Du coup maintenant j'ai une nouvelle erreur : 13 incompatibilité de type.
La macro commence à me remplir la colonne 5 lignes mais la formule qui est insérée est :
=INDEX(DROITEREG($O$56675:$O$56683;$Y$56675:$Y$56683);0)

Ainsi elle prend :
- les bonnes plages
- pas la bonne feuille (feuille 1 au lieu de la feuille 2)
0
pijaku Messages postés 12259 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 9 août 2022 2 703 > Pouschkine Messages postés 13 Date d'inscription mardi 23 juin 2015 Statut Membre Dernière intervention 22 avril 2016
22 avril 2016 à 10:59
Pour l'erreur 1004 sur le Select, utilises donc un bloc With End With.
Je supposes que ta feuille active est la feuille "datas" :
Sub droite()

Dim m As Integer 
Dim i As Long    
Dim k As Long
Dim xrange As Range
Dim yrange As Range

For m = 9 To 71 'lignes pour lesquelles je souhaite obtenir le coefficient directeur
    With Worksheets("Feuille1")
        i = .Cells(m, 17).Value   'ligne de début de la plage
        k = .Cells(m, 19).Value   'ligne de fin de la plage

       Set xrange = Worksheets("Data").Range("Y" & i & ":Y" & k)
       Set yrange = Worksheets("Data").Range("O" & i & ":O" & k)

        .Cells(m, 15).FormulaArray = _
        "=INDEX(LINEST(" & yrange.Address & "," & xrange.Address & "),0)"
    End With
Next
End Sub


Sinon, dans une formule, il faut aussi indiquer le nom de la feuille, exemple :
Data!A1:F152
0
Pouschkine Messages postés 13 Date d'inscription mardi 23 juin 2015 Statut Membre Dernière intervention 22 avril 2016 > pijaku Messages postés 12259 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 9 août 2022
22 avril 2016 à 11:15
La feuille active est la feuille dans laquelle est insérée la macro ? Par ce que si c'est le cas ma feuille active et la "Feuille 1" (on peut pas dire que je sois très douée en VBA)

J'ai essayé votre code mais j'ai toujours la même erreur de type 13 sur la ligne
 i = .Cells(m, 17).Value

C'est du au fait de ce ne soit pas la bonne feuille qui est active ?

Et concernant votre dernière remarque portant sur l'insertion du nom de la feuille dans la formule. C'est bien dans la formule Index avant yrange et xrange que je dois insérer Data! ?

Merci encore
0
Pouschkine Messages postés 13 Date d'inscription mardi 23 juin 2015 Statut Membre Dernière intervention 22 avril 2016
22 avril 2016 à 10:57
L'incompatibilité de type est sur la ligne :
i = Worksheets("Feuille1").Cells(m, 17).Value
0
pijaku Messages postés 12259 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 9 août 2022 2 703 > Pouschkine Messages postés 13 Date d'inscription mardi 23 juin 2015 Statut Membre Dernière intervention 22 avril 2016
22 avril 2016 à 11:04
C'est parce que ta cellule Worksheets("Feuille1").Cells(m, 17) contient autre chose qu'un nombre...
0