[VBA] Formule sous VBA avec tableau

Fermé
youyou - 25 juil. 2007 à 17:54
zefoots Messages postés 146 Date d'inscription samedi 9 juin 2007 Statut Membre Dernière intervention 11 septembre 2007 - 26 juil. 2007 à 16:32
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!!!
A voir également:

11 réponses

modjibe Messages postés 45 Date d'inscription vendredi 20 juillet 2007 Statut Membre Dernière intervention 25 avril 2008 3
26 juil. 2007 à 11:10
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
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
26 juil. 2007 à 11:13
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
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
Petit up pour vous dire que j'ai vraiment besoin d'aide!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
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
zefoots Messages postés 146 Date d'inscription samedi 9 juin 2007 Statut Membre Dernière intervention 11 septembre 2007 62
26 juil. 2007 à 14:17
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
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
zefoots Messages postés 146 Date d'inscription samedi 9 juin 2007 Statut Membre Dernière intervention 11 septembre 2007 62
26 juil. 2007 à 14:48
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
ActiveCell.FormulaR1C1 = "=Percentile(" & tableau3(0) & : & tableau3(519) & ", 5%)"


me renvoie aussi une erreur de syntaxe...

Comment fait-on?
0
zefoots Messages postés 146 Date d'inscription samedi 9 juin 2007 Statut Membre Dernière intervention 11 septembre 2007 62
26 juil. 2007 à 16:32
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