IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Corrélation dans un array VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 48
    Points : 49
    Points
    49
    Par défaut Corrélation dans un array VBA
    Bonjour,

    Je m'aperçois que j'aurais très certainement du poster ma question sur ce forum là plutôt qu'ici : http://www.developpez.net/forums/d15...ion-array-vba/
    Peut-on déplacer la discussion ?

    Je m'interroge sur la possibilité ou non de calculer une corrélation dans un array VBA ?
    Par exemple, je créé un array de n lignes et 2 colonnes. Est-il possible de calculer la corrélation des deux colonnes de l'array ? Jusqu'ici j'affichais les résultats sur une feuille excel avant de faire la corrélation. Mais cela prend évidemment du temps, très certainement inutilement.

    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    dim rng as range, c as range
    dim n as integer, i as integer
     
    set rng = range(cells(1,1),cells(1,1).end(xldown))
     
    for each c in rng
       if c < 0 then
             i=i+1
       end if
    next c
     
    redim tab(i,2) as double
     
    for each c in rng
       if c < 0 then
             tab(n,1) = c.value
             tab(n,2) = c.offset(0,1)
             n=n+1
       end if
    next c
    Je souhaiterais maintenant effectuer la corrélation des éléments de la 1ère et 2ème colonne de l'array "tab".
    Peut-on le faire directement ? Je ne vois pas comment utiliser le "worksheetfunction.correl" dans ce cas-là. Ou bien dois-je remettre les données de "tab" sur une feuille excel ?

    D'avance merci

  2. #2
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Bonjour.


    Ca semble fonctionner avec des tables du type Variant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    ReDim tablo(1, 0) As Variant
    ReDim tablo2(1, 0) As Variant
     
    For Each c In rng
     
       If c < 0 Then
     
       ReDim Preserve tablo(1, n) As Variant
       ReDim Preserve tablo2(1, n) As Variant
             tablo(1, n) = c.Value
             tablo2(1, n) = c.Offset(0, 1).Value
             n = n + 1
       End If
    Next c
     
    aa = WorksheetFunction.Correl(tablo, tablo2)
    Cordialement

    Docmarti.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 48
    Points : 49
    Points
    49
    Par défaut
    Bonjour,
    Merci.
    Tu as donc eu besoin de déclarer 2 variables tableau. N'est-il pas possible de d'en utiliser qu'un ?
    En tout cas je vais essayer cette option.

  4. #4
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Je ne connais pas la fonction Correl, mais utiliser un seul tableau avec cette fonction ne permettrait pas de trouver directement une corrélation entre 2 séries de données. Il faudrait quand même créer 2 autres tableaux, l'un contenant la première colonne et l'autre la deuxième colonne.
    Cordialement

    Docmarti.

  5. #5
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Un seul tableau avec Application.Index pour récupérer les 2 colonnes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Sub Un_seul_Tableau()
     
    Dim rng As Range, c As Range
    Dim n As Integer, i As Integer
     
    Set rng = Range(Cells(1, 1), Cells(1, 1).End(xlDown))
     
    ReDim tablo(1 To 2, 1 To 1) As Variant
     
     n = 0
    For Each c In rng
     
       If c >= 0 Then
     
       Else
         n = n + 1
            ReDim Preserve tablo(1 To 2, 1 To n) As Variant
            tablo(1, n) = c.Value
            tablo(2, n) = c.Offset(0, 1).Value
     
       End If
    Next c
     
    t = Application.Transpose(tablo)
     
    ' Application.Index(t, , 1) 'retourne la premiere colonne du tableau
    ' Application.Index(t, , 2) 'retourne la seconde colonne du tableau
     
    cc = WorksheetFunction.Correl(Application.Index(t, , 1), Application.Index(t, , 2))
     
    End Sub
    Cordialement

    Docmarti.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Corrélation dans un array VBA
    Par Maxnihilist dans le forum Général VBA
    Réponses: 3
    Dernier message: 02/01/2016, 20h19
  2. [XL-2010] Comment prendre en compte un tableau (Array) dans une fonction vba?
    Par statista dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 07/04/2011, 15h16
  3. Réponses: 5
    Dernier message: 18/11/2005, 22h11
  4. Insérer dans un array
    Par PrinceMaster77 dans le forum ASP
    Réponses: 3
    Dernier message: 29/03/2005, 09h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo