Passage d'une liste de paramètres à une fonction mathématiqu

Bonjour,

Je butte depuis quelques temps sur le problème ci-après, les recherches que j'ai fait n'ont rien donné, peut-être avez vous une réponse à me proposer.

Je cherche à passer en paramètre d'une ou plusieurs fonctions statistiques excel, une liste de paramètres que j'ai placé dans une cellule. La difficulté que j'ai est que excel ne comprend pas ma commande (il manque une conversion de contenu il me semble).

Schéma :

Cellule A1 contient le texte : "10;11;12"

Cellule B1 contient la formule : "=max(A1)", ou différentes variantes visant à passer en paramètre de la fonction max le contenu de la cellule A1 et dois me donner sur cet exemple "12"

La méthode orthodoxe serait je crois de déclarer les valeurs de la liste dans des cellules distinctes, mais je cherche une forme compacte qui m'évite l'emploi de plusieurs tableaux de tailles conséquentes et des renvoi entres onglets (chaque liste correspond déjà à un tableau à deux entrées et doit être soumise à plusieurs fonctions statistiques).

PS : Je ne confond pas variable et contenu, je cherche à retranscrire la valeur d'une variable (A1) pour la réutiliser plusieurs fois.

Salut PhilParis et bienvenue sur ce forum

J'aurais tendance à dire ... heuuuu ... tu peux répéter la questionnnnnn

Plus sérieusement, peux-tu nous joindre un fichier avec ce que tu as et ce que tu voudrais

A+

Bonsoir

Comme tu veux changer les "règles" d'Excel il te faut construire tes propres fonctions

Un exemple (simple) pour la fonction MAX() ----> MonMax()

Function MonMax(Cel As Range) As Double
Dim Tablo
Dim J As Long

  Application.Volatile
  Tablo = Split(Cel, ";")
  For J = 0 To UBound(Tablo)
    If MonMax < Tablo(J) Then MonMax = Tablo(J)
  Next J
End Function

L'appel se fera

Dans A1 : 10;11;12

Et dans une cellule

=MonMax(A1)
BrunoM45 a écrit :

Salut PhilParis et bienvenue sur ce forum

J'aurais tendance à dire ... heuuuu ... tu peux répéter la questionnnnnn

Plus sérieusement, peux-tu nous joindre un fichier avec ce que tu as et ce que tu voudrais

A+

Bonjour Bruno,

Merci.

Comme Banzai le remarque, je cherche peut-être à changer les règles d'Excel et ce que je veux faire n'est pas possible.

Un petit fichier pour développer la question sur un exemple.

Banzai64 a écrit :

Bonsoir

Comme tu veux changer les "règles" d'Excel il te faut construire tes propres fonctions

Un exemple (simple) pour la fonction MAX() ----> MonMax()

Function MonMax(Cel As Range) As Double
Dim Tablo
Dim J As Long

  Application.Volatile
  Tablo = Split(Cel, ";")
  For J = 0 To UBound(Tablo)
    If MonMax < Tablo(J) Then MonMax = Tablo(J)
  Next J
End Function

L'appel se fera

Dans A1 : 10;11;12

Et dans une cellule

=MonMax(A1)

Bonjour Banzai,

Superbe. J'aime l'élégance de ta solution.

Je me heurte à une limite d'Excel je crois effectivement, mais comme je ne connais pas VBA je ne savais pas que l'on pouvais définir ses propres fonctions et ta solution répond au besoin exprimé.

Limite : il va falloir que je réécrive les fonctions statistiques d'excel. Pour l'instant je n'utilise que les plus simples et ce n'est pas un souçis mais il v a falloir que je me replonge dans mes bouquins pour les plus compliquées.

Est-il possible, en développant ta solution, de faire un appel à une fonction standard d'excel, avec le "tablo" en paramètre, sous VBA ?

Bonjour

PhilParis a écrit :

faire un appel à une fonction standard d'excel, avec le "tablo" en paramètre, sous VBA

Alors désolé mais je n'en sais pas plus, te dire que c'est impossible je n'en sais rien non plus

Moi mon idée

A partir de ta fonction personnalisée tu peux placer les paramètres récupérés (Tablo) et les placer dans des cellules (masquées si besoin) et ensuite appeler la fonction native d'Excel

Merci Banzai, OK.

Je veux éviter de multiplier les colonnes, surtout que j'ai un nombre variable d'arguments dans ma liste. Je viens de passer à Excel2010 mais avec Excel2003 j'étais limité dans le nombre de colonnes possibles. Je ne sais pas quelle est la limite avec 2010

Ça marche génial ta solution. Corrige moi éventuellement, le nom de la fonction est utilisé comme une variable et sert directement de résultat en retour de la fonction. Ça me parait très bizarre, mais ça marche sur la fonction moyenne aussi.

Function MaMoy(Cel As Range) As Double

Dim Tablo

Dim J As Long

Application.Volatile

Tablo = Split(Cel, ";")

For J = 0 To UBound(Tablo)

MaMoy = MaMoy + Tablo(J)

Next J

MaMoy = MaMoy / (UBound(Tablo) + 1)

End Function

En plus c'est simple d'utilisation, la fonction personnalisée apparait dans la liste de choix des fonctions (menu contextuel).

Un gros merci Banzai.

Bonjour

PhilParis a écrit :

le nom de la fonction est utilisé comme une variable et sert directement de résultat en retour de la fonction

Exact

Sur 2003 : 256 colonnes

sur 2010 : 16 384 colonnes (si c'est comme 2007)

Mais tu as aussi

sur 2003 : 65536 * 256 cellules par page

sur 2010 : 1 048 576 * 16 384 cellules par page

Que ce soit avec 2003 ou 2010 ce n'est pas la place qui manque

A toi de voir

Banzai64 a écrit :

Bonjour

Mais tu as aussi

sur 2003 : 65536 * 256 cellules par page

sur 2010 : 1 048 576 * 16 384 cellules par page

Que ce soit avec 2003 ou 2010 ce n'est pas la place qui manque

A toi de voir

Pour les lignes, j'ai vu. Je me suis retrouvé avec des tableaux de 50000 ou 100.000 lignes sans trop savoir comment, avec pour conséquence une surcharge CPU et une énorme lenteur à l'enregistrement.

Un grand merci pour ton aide Banzai, je clos le sujet.

Et merci aussi Bruno pour avoir pris le temps de me répondre.

Rechercher des sujets similaires à "passage liste parametres fonction mathematiqu"