Problème fonction Excel

Fermé
chris17 - 14 avril 2009 à 09:49
 chris17 - 14 avril 2009 à 13:12
Bonjour,

Je ne comprend pas pourquoi ma fonction renvoie un message d'erreur. Quand je teste la sous routine pas à pas j'obtiens le bon chiffre. En fait j'attribue un rating a chaque match de foot donné. Je cherche juste à faire affiché le rating obtenu pour une équipe donné à une journée donné.
Code (moche je le reconnais :) )
Function rating_germany(Team, N)


Dim R, Val As Integer
Dim i As Integer


Sheets("Germany 0809").Select


i = 1
R = 0

For k = 1 To N


Range("D" & i + 1).Select
Cells.Find(What:=Team, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
i = Selection.Row
If Cells(i, 4).Value = Team Then
Val = Range("BX" & i).Value
R = R + Val
ElseIf Cells(i, 5).Value = Team Then
Val = Range("BY" & i).Value
R = R + Val
End If
Next k

rating_germany = R / N

'MsgBox ("Rating de" & R / N)

End Function
A voir également:

2 réponses

pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 644
14 avril 2009 à 13:06
Bonjour,

En fait quand on utilise une fonction comme fonction personnalisée on ne peut pas modifier d'autres cellules que celle dans laquelle se calcule la fonction donc dans ce code il faut chercher à enlever tous les "activate" et les "select".

Par exemple ce code :

Function rating_germany(Team, N)

Dim R As Integer, Val As Integer
R = 0
For k = 2 To N + 1   
    If Cells(k, 4).Value = Team Then
        Val = Range("BX" & k).Value
        R = R + Val
    ElseIf Cells(k, 5).Value = Team Then
        Val = Range("BY" & k).Value
        R = R + Val
    End If
Next k
rating_germany = R / N
End Function


fonctionne correctement car il ne touche pas à l'environnement.
Par contre je ne sais pas exactement ce que qu'est le "rating". L'exemple calcule la somme en colonne BX et BY pour une équipe et divise par N.
Ce n'est pas exactement ce que faisait la fonction initiale.

A+

0
C'est donc ça. Je savais que c'était "pas propre".
Je vais effectivement modifier la fonction rating mais ça fonctionne parfaitement.
Merci bcp pour votre aide
0