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