[VBA] Formule sous VBA avec tableau

youyou -  
zefoots Messages postés 146 Statut Membre -
Bonjour,

J'ai un tableau unicolonne à 520 lignes contenant des réels. Je souhaite calculer le 5ème centile de ces valeurs.

Je sais que si je souhaite renvoyer la valeur du 5ème centile dans une cellule excel, par exemple la cellule B1 et que mes réels étaient contenus dans la plage de cellules C10:C519 je ferais dans vba:

Range("B1").Select
ActiveCell.FormulaR1C1="=PERCENTILE(R10C3:R519C3,5%)"

Comment adapter cette formule dans le cas de mon tableau, je constate que
ActiveCell.FormulaR1C1="=PERCENTILE(nom_tableau(0):nom_tableau(519),5%)" ne fonctionne pas!

Merci d'avance pour votre aide!!!
Configuration: Windows 2000
Internet Explorer 6.0

11 réponses

  1. modjibe Messages postés 45 Statut Membre 3
     
    Il y'a très peu de fonctions disponibles dans un tableau non Excel. Percentile n'est sans doute pas disponible. Pour insérer une formule tu as la méthode InsertFormula de la classe Selection. Il y'a aussi Formula membre de Cell. A essayer. Mais tu ne pourras faire que des sommes ou des trucs de ce genre.

    Si jamais tu seches encore n'hesite pas à utiliser l'explorateur d'objets. Tu trouves réponse à tout !
    1
  2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Salut
    Salut dans le cas d'un tableau, tu écris juste :

    ActiveCell.FormulaR1C1=PERCENTILE(nom_tableau,5%)

    Enfin si j'ai bien compris ta question ^^

    Cordialement
    1
  3. youyou
     
    Juste une petite précision : la fonction "percentile" n'est pas plus importante que ça, ça aurait très bien pu être la fonction "average" ou autre.
    Ma question est d'ordre syntaxique : comment placer les valeurs contenues dans un tableau comme argument d'une fonction?

    Merci d'avance pour vos lumières!
    0
  4. youyou
     
    Petit up pour vous dire que j'ai vraiment besoin d'aide!
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. youyou
     
    Merci pour vos réponses!

    Ta formule ne marche pas Fiddy, j'ai une erreur #NOM? dans la cellule (en fait les cellules car il y a plusieurs tableaux) où je calcule le 5èmes centile.

    Je vous joins le code et je précise que mon tableau est une variable dans VBA mais je ne l'affiche pas dans un tableur excel, c'est donc juste un endroit où je stocke des données!

    Sub Macro1()
    
    Dim ctr As Integer
    Dim ctr2 As Integer
    Dim ctr3 As Integer
    Dim a As Double
    Dim tableau(519) As Single
    Dim tableau2(519) As Single
    Dim tableau3(519) As Single
    Sheets("data").Select
    
    For ctr = 2 To 59
        If Cells(4, ctr).Value <> 0 Then
            a = Cells(4, ctr) + Sheets("produits").Cells(1, 53).Value / (100 * Cells(8, ctr + 1).Value * Cells(5, ctr + 1).Value)
            
            For ctr2 = 0 To 519
                If Cells(7, ctr).Value <> "EUR" Then
                    tableau(ctr2) = (Cells(ctr2 + 10, ctr).Value - Cells(8, ctr + 1).Value) * Cells(5, ctr).Value * a / Range("EUR" & Cells(7, ctr).Value).Value
                Else
                    tableau(ctr2) = (Cells(ctr2 + 10, ctr).Value - Cells(8, ctr + 1).Value) * Cells(5, ctr).Value * a
                End If
                
                For ctr3 = 3 To 59 Step 3
                    If ctr3 <> ctr + 1 Then
                    tableau2(ctr2) = tableau2(ctr2) + Cells(ctr2 + 10, ctr3).Value
                    End If
                Next
                tableau2(ctr2) = tableau2(ctr2) + tableau(ctr2) + Cells(ctr2 + 10, 62).Value + Cells(ctr2 + 10, 63).Value
                tableau3(ctr2) = tableau2(ctr2) / Sheets("produits").Cells(1, 53).Value
            Next
            Cells(3, ctr + 1).Select
            ActiveCell.FormulaR1C1 = "=Percentile(tableau3, 5)"   C'EST ICI QUE CA COINCE!!!!!!!!!
        End If
    Next
    End Sub
    0
  7. youyou
     
    Dans la formule 5 est à remplacer par 5% (j'ai fait une petite erreur de frappe) mais ça ne règle pas le problème.
    0
  8. zefoots Messages postés 146 Statut Membre 62
     
    Salut,

    je suis pas bien sûr d'avoir tout compris ce que tu voulais faire, par contre, je crois comprendre ce qui te pose problème.

    quand tu écris : ActiveCell.FormulaR1C1 = "=Percentile(tableau3, 5)", j'imagine que tu veux faire tes calculs avec une valeur contenue dans tableau3. Or ici, tu as écris la chaîne de caractères "tableau3" et non pas sa valeur.

    Bref, ici, il faut utiliser l'opérateur de concaténation de chaîne "&". Dans ce cas, ta fromule devient un truc du genre :
    ActiveCell.FormulaR1C1 = "=Percentile(" & tableau3(ctr2) & ", 5)"
    Dans ce cas, tu écris bien la valeur contenue à l'indice ctr2 du tableau3

    En gros, pour accéder à une valeur contenue dans un tableau, il faut écrire le nom du tableau plus le numéro d'indice de la valeur entre parentèses : ici on écrit donc
    tableau3(ctr2)
    Attention, cette instruction ne doit pas être entre guillemets.

    J'espère que ça t'aide.
    0
  9. youyou
     
    Mon tableau ne contient pas qu'une seule valeur mais 520 valeurs dont je souhaite calculer le 5 ème centile. Si j'adapte ta formule en :

    ActiveCell.FormulaR1C1 = "=Percentile( & tableau3(0) & : & tableau3(519) &, 5%)" 


    ça ne fonctionne toujours pas, encore une erreur de syntaxe?

    Merci en tout cas, ça a l'air d'avancer!
    0
  10. zefoots Messages postés 146 Statut Membre 62
     
    Oui, il y a une erreur. Regarde bien la formule que j'ai écrite plus haut. J'utilise 4 guillemets alors que toi tu n'en as que 2. C'est là ton erreur ...
    0
  11. youyou
     
    ActiveCell.FormulaR1C1 = "=Percentile(" & tableau3(0) & : & tableau3(519) & ", 5%)"


    me renvoie aussi une erreur de syntaxe...

    Comment fait-on?
    0
  12. zefoots Messages postés 146 Statut Membre 62
     
    Le caractère " (guillemet) sert à délimiter un texte. Ils vont toujours par paire. Le 1er sert à délimiter le début d'une chaîne et le 2ème sert à délimiter la fin de la chaîne. Par exemple
    "coucou"
    est équivalent à
    "cou" & "cou"
    Autre exemple avec une variable
    Dim Toto As Integer
    Dim Tutu As String
    Toto = 1234
    Tutu = "cou" & Toto & "cou"
    la variable Tutu contiend maintenant la chaîne cou1234cou

    Dans l'exemple que tu écris, si tu tiens à afficher le caractère : (deux points), il faut que tu écrives
    ActiveCell.FormulaR1C1 = "=Percentile(" & tableau3(0) & ":" & tableau3(519) & ", 5%)"
    J'ai l'impression que tu as l'habitude de coder en php, je me trompe ? En php, effectivement, on peut mettre les variables à l'intérieur des guillemets, car chaque variable est précédée du signe $, ce qui permet à l'interpréteur de les reconnaître. Ca ne fonctionne pas de cette manière en VBA.

    Il y avait donc 6 guillemets à utiliser (et non pas 4 comme je l'ai dit plus haut, désolé ...)
    0