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 :

Utilisation de la fonction CORREL sous VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2024
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2024
    Messages : 7
    Par défaut Utilisation de la fonction CORREL sous VBA
    Bonjour,

    J'ai besoin de calculer le coefficient de corrélation entre deux séries numériques, mais qui sont de longueur variable suivant les différentes configurations.
    J'ai paramétré les deux séries numériques ainsi :
    Dim LigneFinRegression As Integer
    LigneFinRegression = 141 + nbpays
    Dim Plage1 As String
    Dim Plage2 As String
    Plage1 = "BA141:" & "BA" & LigneFinRegression
    Plage2 = "BB141:" & "BB" & LigneFinRegression

    J'ai tenté de calculer ainsi le coefficient de corrélation
    Range("BA141").Select
    ActiveCell.FormulaR1C1 = "=+CORREL(Plage1,Plage2)"
    Mais ma syntaxe de la fonction CORREL n'est pas bonne.
    Merci de votre aide !

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 357
    Par défaut
    Bonjour,

    Il faut écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Range("BA141").Formula = "=CORREL(" & Plage1 & "," & Plage2 & ")"
    Il serait préférable d'utiliser un tableau, ce qui éviterait de passer par du code VBA.
    Le tableau permet d'ajouter ou supprimer des lignes sans qu'il y ait à recalculer les plages, et donc la formule.

    Cordialement.
    Fichiers attachés Fichiers attachés

  3. #3
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2024
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2024
    Messages : 7
    Par défaut Pb avec le format tableau
    Merci pour cette réponse rapide.
    J'aimerais bien qu'en utilisant le format tableau cela fonctionne mais hélas si on filtre ou si on utilise un segment pour ne choisir que les lignes correspondant à un critère donné, le résultat du calcul du coefficient de corrélation ne change pas. Excel prend en compte les lignes masquées.
    Je regarde pour modifier mon code Vba


    Cordialement !

  4. #4
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 357
    Par défaut
    Effectivement. Eventuellement cette solution sur cette page.
    Cordialement.

  5. #5
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2024
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2024
    Messages : 7
    Par défaut
    Bonjour,

    J'ai avancé mais j'ai une erreur de syntaxe dans le script suivant :

    Fin est le numéro de la ligne où doit s'arrêter le calcul que j'ai récupéré avec la fonction Active.Cell.Row
    fin = ActiveCell.Row - 1

    ActiveCell.FormulaR1C1 = "=+CORREL("BC60" & ":" & "BC" & Fin & "," & "BB60" & ":" & " BB" & Fin)"

    Merci de votre aide !

  6. #6
    Membre Expert Avatar de Nain porte koi
    Homme Profil pro
    peu importe
    Inscrit en
    Novembre 2023
    Messages
    1 000
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : peu importe

    Informations forums :
    Inscription : Novembre 2023
    Messages : 1 000
    Par défaut
    Hello,

    voici une version corrigée (et j'ai simplifié la formule)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.Formula = "=CORREL(BC60:BC" & Fin & "," & "BB60:BB" & Fin")"
    FormulaR1C1 fait référence à des numéros de lignes et de colonnes donc sous la forme "R10C45" pas "BA142"...

    Voici la version (légèrement modifié) que EricDgn vous avait proposé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim Fin As Long
    Fin = ActiveCell.Row - 1
    Dim Plage1 As String
    Dim Plage2 As String
    Plage1 = "BC60:BC" & Fin
    Plage2 = "BB60:BB" & Fin
    ActiveCell.Formula = "=CORREL(" & Plage1 & "," & Plage2 & ")"
    Ceci dit, ActiveCell.Row - 1 fait référence à la ligne de la cellule active - 1, ce qui voudrait dire que vous devez forcément sélectionner la dernière ligne +1 et que la formule va s'inscrire dans cette cellule (et écrasé le contenu).

    Il y a certainement d'autres solution mais vous devrez nous donner plus de précision sur ce que vous voulez faire.
    JièL
    Membre des AMIS
    Anti Macro Inutilement Superfétatoire

  7. #7
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2024
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2024
    Messages : 7
    Par défaut
    Tout d'abord grand merci. Le calcul de coefficient de corrélation fonctionne.
    Mais je suis un vrai emmerdeur car je veux représenter sur un graphique X,Y les deux séries en question.

    J'ai tenté d'utiliser ActiveChart de la manière suivante:

    ActiveChart.FullSeriesCollection(1).XValues = "$BC$60:$BC$" & Fin

    ActiveChart.FullSeriesCollection(1).Values = "$BB$60:$BB$" & Fin

    J'ai également essayé
    ActiveChart.FullSeriesCollection(1).XValues = Plage1

    ActiveChart.FullSeriesCollection(1).Values = Plage2

    Dans les deux cas vba me retourne le message suivant :
    Erreur d'exécution "91"
    Variable objet ou variable de bloc With non définie

    Merci encore pour vos aides EXCELentes !

  8. #8
    Membre Expert Avatar de Nain porte koi
    Homme Profil pro
    peu importe
    Inscrit en
    Novembre 2023
    Messages
    1 000
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : peu importe

    Informations forums :
    Inscription : Novembre 2023
    Messages : 1 000
    Par défaut
    Votre façon de faire me laisse dubitatif
    Je me trompe en disant que vous ne connaissez rien au macro (voire à excel en général *) et que vous jouez à l'apprenti sorcier ? (ce n'est pas péjoratif, juste une question)

    Vous utiliser Activemachintruc, ça oblige donc à ce que machintruc soit sélectionné, c'est surprenant dans une macro.

    Bref, voici comment changer la source des données du graphique actif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveChart.SetSourceData Source:=Range("BB60:BC" & Fin)
    * une formule commence par =, il n'y a pas de raison d'ajouter un +
    JièL
    Membre des AMIS
    Anti Macro Inutilement Superfétatoire

  9. #9
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2024
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2024
    Messages : 7
    Par défaut
    Merci pour ce retour rapide.
    Pour répondre à la question sur ma pratique EXCEL, j'ai environ 40 ans de pratique des tableurs, Multiplan en premier puis Lotus123 et EXCEL depuis la fin des années 90.
    J'ai réalisé de nombreux tableaux dont certains très complexes mais je n'ai pas d'expertise en Vba.
    Les macros que j'ai réalisées sont principalement réalisées en enregistrement automatique.
    Cordialement !

Discussions similaires

  1. [phpBB] Utilisation de la fonction mail sous Free
    Par Tex-Twil dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 17
    Dernier message: 03/01/2025, 22h02
  2. [XL-2016] Utiliser la fonction Data sous vba Excel 2016
    Par Dudulle32 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/10/2017, 17h55
  3. Utilisation de la fonction GetURL sous FlashLite 2.x
    Par foxrider dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 21/02/2008, 18h24
  4. Fonction SI sous VBA
    Par tdaoui dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 09/01/2008, 22h14
  5. [VBA-E]Fonction Racine sous VBA
    Par vuong1 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/04/2007, 01h48

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