Macro

katiaboutamdja Messages postés 16 Statut Membre -  
katiaboutamdja Messages postés 16 Statut Membre -
Bonjour,

J'ai un code pour calculer simplement la corrélation entre deux colonnes et l'afficher en C2, avec les données pour calculer les correl en A et B

J'arrive pas à le modifier pour calculer la corrélation 2 à 2 entre des données situer sur le range(C2:TA61) dans 7 feuilles excel et mettre un tableau de correl(7 lignes 7 colonnes) dans une 8ème feuille à créer

J'ai donc 7 feuilles excel (pour chaque client) avec mes données sur le range (C2:TA61)

Sub correl()

Dim ans As Double
Dim rRngA As Range
Dim rRngB As Range

Set rRngA = Range("A2", Range("A2").End(xlDown))
Set rRngB = rRngA.Offset(, 1)

ans = Application.WorksheetFunction.correl(rRngA, rRngB)
Range("C2") = ans

End Sub

Merci beaucoup pour votre aide
A voir également:

10 réponses

lermite222 Messages postés 9042 Statut Contributeur 1 191
 
Bonjour,
Tu a testé les adresses !
Sub correl()
Dim rRngA As Range
Dim rRngB As Range
Dim Lig As Long
    Lig = Range("A65536").End(xlUp).Row
    With Sheets("feuil1")
        Set rRngA = .Range(.Cells(2, 1), .Cells(Lig, 1))
        Set rRngB = .Range(.Cells(2, 2), .Cells(Lig, 2))
        .Range("C2") = Application.WorksheetFunction.correl(rRngA, rRngB)
    End With
End Sub

A+
0
katiaboutamdja Messages postés 16 Statut Membre 3
 
Merci beaucoup pour ta réponse
Ca me met erreur d'execution 1004
Impossible de lire la propriété correl de la fenetre d'execution

Et cque jveux faire c pas exactement ca , le code que j'ai mis au début il marche bien mais c jucte pour calculer la corrélation entre deux colonnes d'une meme feuille que je lui demande de me mettre sur C2 et justement jveux le changer:

c

MERCIIIIIII
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
Dans mon exemple il faut bien entendu adapter le nom de la feuille.
Pour ton tableau ?? entre C et TA il y a plus de 7 colonnes !, explique en plus clair.
Je commence à comprendre mais j'attend la suite.
0
katiaboutamdja Messages postés 16 Statut Membre 3
 
Merci encore pour ton aide

adapter le nom de la feuille ca bien sur je sais faire
bien sur qu'entre C et TA il y a plus de 7 colonnes, quand je dis 7 c'est pas 7 colonnes mais 7 feuilles excels, c'est les données qui se trouvent entre C et TA de la ligne 2 à 61

Et les corrélations qu'il faut calculer c'est pas entre des colonnes d'une meme feuille excel

mais la correl entre les 7 feuilles(entre les données qui se trouvent dans les 7 feuilles de C2 à TA61)

par exemple:
1ère correlationn que je veux: facile tu cliques sur fonction dans excel tu selectionne le range C2:TA61 de la première feuille dans la première ligne matrice1 de la fonction
puis dans la deuxième matrice de la fonction COEFFICIENT.CORRELATION de excel tu selectionne le range C2:TA61 de la deuxième feuille excel(y'en à 7 des feuilles)

Et ainsi de suite on aura en, tou 7*6corrélations ( parceque y'a 7 feuilles)

J'éspère pour moi que je me suis mieux fait comprendre

Merci beaucoup trop sympa pour ton aide
0

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

Posez votre question
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
Oui, mais suivant tes dernières explications ça ne donne que 7 résultats, comment en avoir 7*6 ????
sur quel Critère2 ??
Corel ne renvoyant qu'un seul résultat à la fois. ou s'il renvoi un tableau je connaît pas. Explique
J'ai déjà une macro qui travail sur 7 résultats et suivant ta réponse j'adapterais.
0
katiaboutamdja Messages postés 16 Statut Membre 3
 
c'est compliquer à faire comme code je reconnais

Voila ce qu'on veut ce tableau ( c ca les 7*6 car on a forcément des 1 en diagonale le coefficient de corrélation d'une plage de données à elle meme c forcément 1) on peut le mettre n'importe( ce tableau) ou sur une des 7 deja existantes ou en crér une 8ème pour le mettre spécialement dedans peut importe

Les chiffres je les ai mis au pif

Encore merci pour tout
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
désolé, je pense pas pouvoir t'aider, j'y comprend rien dans tes explications.
Une approche pour plusieurs test.. sans prétention..
Sub correl() 
Dim rRngA As Range 
Dim rRngB As Range 
Dim Lig As Long, i As Byte, LigC As Long, ColD As Integer 
Dim Wks As Worksheet 
Dim WkD As Worksheet 
Dim WkT As Worksheet 
    LigC = 3 'la première ligne du tableau..à adapter 
    ColD = 4 'la première colonne du tableau.. à adapter 
    Set WkD = Sheets("Data") ' à adapter au nom de la feuille de données 
    Set WkT = Sheets("Tableau") ' à adapter au nom de la feuille de réception corel 
    Lig = Wks.Range("A65536").End(xlUp).Row 
    Set rRngA = Wks.Range(Wks.Cells(2, 1), Wks.Cells(Lig, 1)) 'plage 1 
    For i = 1 To Sheets.Count 
        'adapter au noms des feuilles à éviter................... 
        If Sheets(i).Name <> "Tableau" And Sheets(i).Name <> "Data" Then 
        '....................................................... 
            Set Wks = Sheets(i) 
            With Wks 
                Set rRngB = .Range(.Cells(2, 2), .Cells(Lig, 2)) 
               If LigC = 3 Then  WkT.Cells(LigC - 1, ColD) = Wks.Name 
                WkT.Cells(LigC, ColD) = Application.WorksheetFunction.correl(rRngA, rRngB) 
                LigC = LigC + 1 
            End With 
        '....................................................... 
        End If 
    Next i 
End Sub

Ca pourra peut-être te donner des idées.
A+
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
Huummm, j'ai peut-être compris.
A adapter : les noms des feuilles à éviter et les plages.
Sub TabloCorel()  
Dim rRngA As Range  
Dim rRngB As Range  
Dim i As Byte, LigC As Long, ColD As Integer, Col As Integer  
Dim F As Integer  
Dim WkT As Worksheet  
    LigC = 3 'la première ligne du tableau..à adapter  
    Col = 4 'la première colonne du tableau.. à adapter  
    Set WkT = Sheets("Tableau") ' à adapter au nom de la feuille où placer le tableau corel  
    For i = 1 To Sheets.Count  
        'adapter au noms des feuilles à éviter...................  
        If Sheets(i).Name <> "Tableau"  Then  
            WkT.Cells(LigC, Col) = Sheets(i).Name: ColD = Col + 1  
            Set rRngA = Sheets(i).Range("C2:TA61") 'plage 1  
        '.......................................................  
            For F = 1 To Sheets.Count  
                'adapter au noms des feuilles à éviter...................  
                If Sheets(F).Name <> "Tableau"  Then  
                    With Sheets(F)  
                        Set rRngB = .Range("C2:TA61")  
                        WkT.Cells(LigC, ColD) = Application.WorksheetFunction.correl(rRngA, rRngB)  
                        ColD = ColD + 1  
                    End With  
                End If  
            Next F  
            LigC = LigC + 1  
        '.......................................................  
        End If  
    Next i  
    Set WkT = Nothing  
End Sub

Et y a pas 7 * 6 mais bien 7 * 7 (49) données pour 7 feuilles, à moins d'éviter la donnée 1 (ce qui est facilement faisable.)
A+
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
Offfuuiiit,
Pas envie de me remettre dans ce code sans explications complémentaires.
Met un classeur exemple (sans données confidentielles mais avec suffisement d'info pour extra-poler. ) Sur CiJoint.fr
Et prochaine fois, essaye de réagir un peu plus vite.
A+
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
0
katiaboutamdja Messages postés 16 Statut Membre 3
 
le fichier jla mis sur cijoint.fr, il se trouve à cette adresse

http://www.cijoint.fr/cjlink.php?file=cj201012/cijM5D6tpp.xls

dsl pour le retard et merci
0