Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

Appel d'une fonction Excel dans une macro



  1. #1
    Calia_Eowyn

    Unhappy Appel d'une fonction Excel dans une macro


    ------

    Bonjour à tous,

    Je suis en train de travailler sur des plages de données dans Excel, chaque colonne excel correspondant à un échantillon de valeurs différent. Ces échantillons n'ont pas la même taille. Or je veux appliquer la fonction TEST.STUDENT(echantillon1; echantillon2; uni/bilateral; type) pour comparer deux à deux ces échantillons (je vérifie s'ils suivent une loi normale de même moyenne : test de student)

    Lorsque je crée ma macro, d'abord je détermine le range echantillon1 et le range echantillon2. Cette partie de code fonctionne (vérification par points d'arrêts).
    Mais le problème se situe à ma dernière ligne, lorsque je veux utiliser ces deux range dans la fonction :

    Soit je met : Cell = Application.TEST.STUDENT(echan tillon1, echantillon2, 2, 3)
    -> ERREUR "Propriété ou méthode non gérée par cet objet"

    Sinon je met : Cell="=TEST.STUDENT(echantillo n1, echantillon2, 2, 3)
    -> Affichage de #NOM? dans les cellules traitées

    Je ne comprend aucune de ces deux erreurs, le problème sous-jacent est peut etre que ma façon de gerer les range est mauvaise, ou peut-etre que l'appel de cette fonction demande des choses particulières... que je ne trouve pas sur google.

    Voila, si vous avez une idée et un peu de temps, je vous remercie d'avance Je débute encore en VBA, associé à Excel, et j'aurais grand besoin de vos lumières !

    -----
    Calia~°

  2. #2
    Dormeur74

    Re : Appel d'une fonction Excel dans une macro

    Ce serait trop simple si on pouvait utiliser directement les noms des fonctions d'Excel dans une fonction personnalisée.
    Plutôt que de chercher, utilise la méthode suivante. Passe d'abord par une macro pour identifier la syntaxe.

    Dans les cellules A1:A9, on met les valeurs : 3.4.5.8.9.1.2.4.5
    Dans les cellules B1:B9, on met les valeurs : 6.19.3.2.14.4.5.17.1

    On veut mettre la probabilité du test de Student dans la cellule A10.
    On crée une nouvelle macro. Dans la cellule A10 on tape =TEST.STUDENT(A1:A9;B1:B9;2;3) et on arrête l'enregistreur de macro.
    On passe sous VB (Alt+F11) et on lit le code généré dans le module :

    Code:
    Sub Macro1()
        Range("A10").Select
        ActiveCell.FormulaR1C1 = "=TTEST(R[-9]C:R[-1]C,R[-9]C[1]:R[-1]C[1],2,3)"
    End Sub
    et là, tu t'aperçois que les points-virgules ont été remplacés par des virgules et que la fonction TEST.STUDENT() a été remplacée par TTEST().
    Le résultat donne 0,20229392
    Ne m'en demande pas plus, je viens de découvrir l'hétéroscédasticité.
    Dernière modification par Dormeur74 ; 14/10/2011 à 06h37.

  3. #3
    Calia_Eowyn

    Re : Appel d'une fonction Excel dans une macro

    Bonjour

    Effectivement, la fonction dans la macro est TTEST, je n'avais même pas essayé de passer par l'enregistrement de macro pour voir (mais je retiens, je retiens ^^).
    Malgré tout, ma macro refuse toujours de fonctionner, j'ai toujours l'erreur #NOM ?
    Ce doit être la façon de déterminer la plage de donnée qui a un problème (dans l'exemple de Dormeur74, les plages sont fixes)..

    Voici mon code seul :
    Code:
    Sub TESTS()
    
    Dim Cell As Range
    Dim mpopVertical As Range 'mpopVertical = 1ere plage de donnée (dictée par colone du tableau)
    Dim mpopHorizon As Range 'mpopHorizon 2e plage de données (dictée par ligne du tableau)
    
    For Each Cell In ActiveSheet.Range("I4:I7,J5:J7,K6:K7,L7") 'parcours des cases du tableau récapitulatif (demi tableau, tout en dessous de la diagonale)
     
    Select Case Cell.Row 'définition de la plage de l'échantillon (=la population) n°1
    Case 4 'la ligne n°4 correspond à echantillon pop 2
        Set mpopHorizon = Range("c2:c" & Range("c2").End(xlDown).Row) 'utilisation End(xlDown) pour avoir la taille réelle de la plage (taille variable)
    Case 5
        Set mpopHorizon = Range("d2:d" & Range("d2").End(xlDown).Row)
    Case 6
        Set mpopHorizon = Range("e2:e" & Range("e2").End(xlDown).Row)
    Case 7
        Set mpopHorizon = Range("f2:e" & Range("f2").End(xlDown).Row)
    End Select
    
    Select Case Cell.Column 'definition plage n°2
    Case 9 'colone n°9 (colone I) correspond à echantillon pop 1
        Set mpopVertical = Range("c2:b" & Range("c2").End(xlDown).Row)
    Case 10
        Set mpopVertical = Range("c2:b" & Range("c2").End(xlDown).Row)
    Case 1
        Set mpopVertical = Range("d2:c" & Range("d2").End(xlDown).Row)
    Case 12
        Set mpopVertical = Range("e2:d" & Range("e2").End(xlDown).Row)
    End Select
    
    Cell.FormulaR1C1 = "= TTEST(mpopVertical, mpopHorizon, 2, 3)"
    Next Cell
    End Sub
    Si vous avez une idée, je suis preneuse !

    Sans même lire ce code, si vous avez d'autres exemples de plages de données variables à selectionner dans une macro pour les utiliser par la suite dans une fonction, n'hésitez pas, tout est bon pour comprendre

    Dormeur74 : L'hétéroscédasticité, voila un mot sympathique !
    Dernière modification par Calia_Eowyn ; 14/10/2011 à 09h27.
    Calia~°

  4. #4
    Dormeur74

    Re : Appel d'une fonction Excel dans une macro

    D'abord, t'assurer que les plages que tu comptes utiliser sont les bonnes.

    Un truc très simple, tu les mets en couleur. Modifie ton code en ajoutant mpopHorizon.Interior.ColorInde x = 6 :

    Code:
    Case 4 'la ligne n°4 correspond à echantillon pop 2
        Set mpopHorizon = Range("c2:c" & Range("c2").End(xlDown).Row) 'utilisation End(xlDown) pour avoir la taille réelle de la plage (taille variable)
        mpopHorizon.Interior.ColorIndex = 6
    Ca correspond à ce que tu veux ?

  5. A voir en vidéo sur Futura
  6. #5
    Calia_Eowyn

    Re : Appel d'une fonction Excel dans une macro

    Je me suis rendu compte que non, en fait j'avais fait une erreur dans cette ligne, c'est la colonne b et non c que je dois sélectionner.
    (ce jaune fait mal aux yeux ^^)
    Donc j'ai corrigé cette ligne (c'était la seule à poser ce problème, j'ai du faire un mauvais copier-coller quand je codais). L'erreur demeure
    Calia~°

  7. #6
    Dormeur74

    Re : Appel d'une fonction Excel dans une macro

    Je n'ai pas encore cherché à savoir où se situait l'erreur, le tout étant au départ de vérifier qu'on travaille bien sur les bonnes plages. M'est avis que si le Case 4 est faux, les 5,6 et 7 le sont aussi. As-tu vérifié les Case Cell.Column : j'y vois des incohérences : 9,10,1,12 ça me laisse pensif.
    Je t'envoie un MP, tu me retrourneras ton fichier Excel.

  8. #7
    Dormeur74

    Re : Appel d'une fonction Excel dans une macro

    J'ai bien peur que les fonctions TTEST() et T.TEST() sous VBA n'acceptent pas qu'on passe des noms de variables pour les plages (mpopVertical et mpopHorizon). Je reviendrai si je trouve.

  9. #8
    Dormeur74

    Re : Appel d'une fonction Excel dans une macro

    Tu vérifieras les cas 9 à 12, car il y a des erreurs dedans.

    En ce qui concerne l'erreur #NOM? la solution n'est pas de moi, mais de developpez.com

    Au lieu de :
    Code:
    Cell.FormulaR1C1 = "= TTEST(mpopVertical, mpopHorizon, 2, 3)"
    Lire :
    Code:
    Cell.Formula = "= TTEST(" & mpopVertical.Address & "," & mpopHorizon.Address & ",2,3)"

  10. #9
    Calia_Eowyn

    Re : Appel d'une fonction Excel dans une macro

    Bonjour,
    J'arrive longtemps après la bataille, mais cette correction fonctionne effectivement très bien. Merci beaucoup !
    Bonne journée à vous
    Calia~°

Discussions similaires

  1. Faire appel à plusieurs tableau dans une même fonction
    Par krimo-30 dans le forum Électronique
    Réponses: 2
    Dernier message: 09/05/2011, 10h57
  2. Besoin d'aide au sujet d'une macro excel.
    Par lyvosy dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 17/05/2010, 03h17
  3. Macro Excel : Calcul d'une moyenne
    Par lolo66000 dans le forum Logiciel - Software - Open Source
    Réponses: 5
    Dernier message: 19/08/2009, 08h51
  4. Macro gestion de onglet dans excel
    Par jayden dans le forum Logiciel - Software - Open Source
    Réponses: 10
    Dernier message: 21/04/2008, 15h49
  5. Conversion hexa-binaire dans une macro Excel
    Par jecario dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 06/06/2007, 21h47