[VBA] Formule sous VBA avec tableau
youyou
-
zefoots Messages postés 146 Date d'inscription Statut Membre Dernière intervention -
zefoots Messages postés 146 Date d'inscription Statut Membre Dernière intervention -
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!!!
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:
- [VBA] Formule sous VBA avec tableau
- Tableau word - Guide
- Formule si et - Guide
- Tableau ascii - Guide
- Trier un tableau excel - Guide
- Formule moyenne excel plusieurs colonnes - Guide
11 réponses
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 !
Si jamais tu seches encore n'hesite pas à utiliser l'explorateur d'objets. Tu trouves réponse à tout !
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
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
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!
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!
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!
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
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.
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 :
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
J'espère que ça t'aide.
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.
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 :
ça ne fonctionne toujours pas, encore une erreur de syntaxe?
Merci en tout cas, ça a l'air d'avancer!
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!
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 ...
ActiveCell.FormulaR1C1 = "=Percentile(" & tableau3(0) & : & tableau3(519) & ", 5%)"
me renvoie aussi une erreur de syntaxe...
Comment fait-on?
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
Dans l'exemple que tu écris, si tu tiens à afficher le caractère : (deux points), il faut que tu écrives
Il y avait donc 6 guillemets à utiliser (et non pas 4 comme je l'ai dit plus haut, désolé ...)
"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é ...)