Macro

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

10 réponses

  1. 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
    1. Contributeur
      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
      1. Contributeur
        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
        1. Contributeur
          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
          1. 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
            1. Contributeur
              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
              1. 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
                1. Contributeur
                  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
                  1. 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
                    1. Contributeur
                      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