Problème pour créer une fonction

Bonjour à tous,

Je débute en programmation sur Excel et j'aurais besoin d'un peu d'aide pour avancer. Je travaille sur un fichier me permettant d'effectuer un suivi du championnat de foot américain, la MLS. Je sais que je peux trouver une version toute faite sur wikipédia du tableau que je cherche à créer, mais mon objectif est avant tout d'apprendre à utiliser Excel au mieux.

Je voudrais donc créer un fichier qui me permette, en rentrant le résultat d'un match dans un tableau, de compléter le classement de façon automatique, avec le nombre de victoires, de nul et de défaites de chaque équipe, ainsi que le nombre de buts marqués, encaissés, et bien sûr le nombre de points (3 pour une victoire, 1 pour le nul et 0 pour une défaite).

Je procède donc par étape, et je veux maintenant pouvoir compter le nombre de victoire d'une équipe à domicile (donc sur une même ligne du tableau). Mon idée était la suivante : je veux rentrer le score sous la forme "a-b" avec a le score de l'équipe à domicile et b celui de l'équipe à l'extérieur. Je considère qu'une même équipe ne met pas plus de 9 buts dans un match (!), le score est donc composé de trois caractères. Je souhaite donc créer une fonction possédant une argument, celui de la plage de cellules à sélectionner, et qui compterait, sur l'ensemble de cette plage le nombre de fois où a est supérieur à b. J'ai donc essayé et j'en suis arrivé à ceci :

Function Nombre_de_victoires_dom(plage) As Integer

Dim v As Integer

Dim a As Integer

Dim b As Integer

v = 0

a = STXT(Cell, 1, 1)

b = STXT(Cell, 3, 3)

For Each Cell In plage

If a > b Then

v = v + 1

End If

Nombre_de_victoires_dom = v

End Function

Lors de la compilation, le logiciel m'envoie l'erreur "erreur de compilation : sub ou function non définie" et surligne STXT.

Est-ce-que quelqu'un voit ce qui ne va pas dans cette fonction? Je pense que c'est lié à l'argument Cell mais je ne vois pas comment faire autrement.

Merci d'avance et désolé pour le pavé

12mls.xlsm (22.65 Ko)

Bonjour,

"Cell" n'existe pas dans le vocabualaire Excel.

Ou alors c'est une variable que tu n'as pas déclarée.

Et comme tu ne l'as pas encore instanciée...

Enfin STXT n'est pas une fonction VBA... C'est une WorksheetFunction d'Excel.

A+

Bonsoir,

La syntaxe d'appel de la fonction STXT n'est pas correcte. les lignes qui commencent avec a et b doit être à l'intérieur du boucle For. Il faut absolument joindre un fichier pour comprendre ton problème et ainsi tester la fonction.

D'abord merci tous les deux.

Ma fonction ressemble maintenant à ça :

Function Nombre_de_victoires_dom(plage) As Integer

Dim v As Integer

v = 0

For Each Cell In plage

If WorksheetFunction.Mid(Cell, 1, 1) > WorksheetFunction.Mid(Cell, 3, 3) Then

v = v + 1

End If

Next Cell

Nombre_de_victoires_dom = v

End Function

Le fichier est joint en bas de mon premier message si jamais ça peut aider.

Re,

Mid n'est pas une WorksheetFunction mais une fonction ou/et Instruction de VBA...

A+

Au final ce que je voudrais faire c'est la correspondance avec une boucle for classique mais avec une cellule à la place de i. Un truc du genre :

au lieu de "pour i allant de 1 à n faire ..."

avoir "pour cellule allant de B2 à B11 faire ..."

et retourner la valeur voulue à la fin.

C'est possible de faire ça simplement en VBA? (Je rappelle que je débute ^^)

tu peux faire qu.que chose comme ça :

Function NVD%(plage)
Dim a%, b%, v%, o       '% = as integer
   v = 0
   For Each o In plage
        a = Val(Left(o, 1))
        b = Val(Right(o, 1))
       If a > b Then
           v = v + 1
       End If
   Next
   NVD = v
End Function

A+

Merci beaucoup ça marche parfaitement!!!!!

Pour être sûr d'avoir compris ce que tu as fait, tu as déclaré o en tant que chaîne de caractères, et tu utilises ensuite les informations que tu veux sur cette chaîne puisque tu sais où elles se trouvent (à gauche ou à droite)?

Dans tous les cas merci encore d'avoir passé un peu de temps là dessus, ça m'aidera vraiment!

Bonsoir,

Hum... C'est pas tout à fait ça !

o est en fait une cellule (J'ai juste déclaré la variable, elle n'est pas typée...)

Pour chaque cellule de Plage...

Ensuite les fonction Left et Right extirpent la valeur par défaut de o qui est effectivement sa valeur string...

Bonne soirée.

A+

Rechercher des sujets similaires à "probleme creer fonction"