VBA: Calculer un tableau avec corrélations

Fermé
vlad22 - 30 juil. 2009 à 18:11
 Vlad22 - 2 févr. 2010 à 10:57
Bonjour,
Je souhaite faire un tableau me calculant des corrélations, avec une petite macro VB. Je ne souhaite pas surcharger mes fichiers avec des formules Excel.
J'ai donc un tableau de 17 colonnes, chacune de ces colonnes comporte 30 lignes. Et je veut étudier la corrélation de chaque colonne avec chaque autre colonne dans un autre classeur Excel.
Les lignes d'observations à comparer sont fixes (ça va toujours de la ligne 2 à la ligne 31 dans le classeur2), et mes résultats sont dans le classeur 1. Sur la ligne2 je compare la colonne 2 à toutes les autres colonnes . Puis sur la ligne 3 la colonne 3 à toutes les autres colonnes, Puis sur la ligne 4 la colonne 4 à toutes les autres etc.

J'ai donc essayé avec le code suivant:

Sub Tablo_Corrr()
j1 = 2
j2 = 3
coeff_corr As Double
Do 'boucle qui bouge d'une colonne
i = 2 'ligne de la variable incriminée
Range(Sheets("classeur2").Cells(2, j1), Sheets("Moyliss5").Cells(31, j1)) = X
Range(Sheets("classeur2").Cells(2, j2), Sheets("Moyliss5").Cells(31, j2)) = Y
Sheets("classeur1").Select 'on choisit la bonne sheets
Sheets("classeur1").Cells(i, j1).Select 'on prend la bonne colonne de la variable à étudier

Do 'boucle qui bouge de ligne
coeff_corr = Application.WorksheetFunction.Correl(X, Y)
i = i + 1
j2 = j2 + 1
Loop Until i = 19 'on regarde jusqu'à ce qu'on tombe sur une ligne vide

j1 = j1 + 1
Loop Until j1 = 19


End Sub


Et il me dit:
"Compile error:
Statement invalid outside type block"

Merci de m'aider. C'est la galère!!
A voir également:

5 réponses

Bonsoir,

Ce qui ne va pas, ce sont ces deux lignes et tes variables j1 et j2 :
il faut plutot prendre deux lettre j et k

et c'est ton range.
Range = selection de cellules dans une même feuilles. Tu ne paux pas faire comme ca
Range(Sheets("classeur2").Cells(2, j1), Sheets("Moyliss5").Cells(31, j1)) = X
Range(Sheets("classeur2").Cells(2, j2), Sheets("Moyliss5").Cells(31, j2)) = Y


sheets("classeur2").select
v = cells(2,j).select
sheets("Moyliss5").select
w = cells(31,j).select
X = "(" & v & "," & w & ")"

sheets("classeur2").select
v = cells(2,k).select
sheets("Moyliss5").select
w = cells(31,k).select
Y = "(" & v & "," & w & ")"

et je ne suis pas sure que cette formule soit bien écrite :
coeff_corr = Application.WorksheetFunction.Correl(X, Y)
0
Salut Melanie 1324,

Merci de ton conseil. J'ai changé le range de la façon mentionnée ci-dessus, mais malheureusement, le même message d'erreur apparait (à savoir "Compile error: Statement invalid outside type block)

Lorsque cette erreur apparait, il est clair que c'est la variable coeff_corr qui en est responsable, car l'erreur se situe au niveau de la ligne " coeff_corr As Double "

Soit ma déclaration de variable n'est pass juste (et je ne vois pas pourquoi), soit comme tu le pressens, la fonction associée à coeff_corr n'est pas juste (en l'occurrence coeff_corr = Application.WorksheetFunction.Correl(X, Y) )

Est-ce que quelqu'un sait comment utiliser une fonction d'Excel en VB? Merci d'avance
0
J'ai l'impression que le Sub au départ peut aussi être une source de conflit? Faut-il que je créée une fonction séparée?
0
je pense que le problème viens de :

coeff_corr As Double 



faut que tu écrit :

dim coeff_corr As Double 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ploupy33 Messages postés 1 Date d'inscription samedi 30 janvier 2010 Statut Membre Dernière intervention 30 janvier 2010
30 janv. 2010 à 04:10
c bon ?
0
J'ai trouvé une autre solution, mais merci.
En gros je recalcule la formule manuellement, un peu long mais ça marche. Je ne suis pas fan de l'utilisation des formules excel en vb.
0