Comment mettre boucle dans une fonction ?

Résolu/Fermé
cartiers - 19 févr. 2013 à 08:34
 cartiers - 19 févr. 2013 à 09:33
Bonjour,
Je reviens vers vous aujourd'hui car vous m'avez beaucoup aidé hier.
Mon problème du jour est tout autre:
j'ai une fonction qui compte le nombre de cellules colorées d'une ligne. Elle s'appelle NbCellCouleur et contient 2 paramètres : le range et la couleur.
J'aimerai utiliser cette fonction dans une boucle for pour faire le calcul de la ligne 8 à la ligne 38 et garder les 30 valeurs dans les cellules H8 à H38.
J'ai écrit
For i = 8 To 38
     Range("FA" & i).Value = NbCellCouleur([K...:EZ...], 4)
     Range("FB" & i).Value = NbCellCouleur([K...:EZ...], 6)
     Range("FC" & i).Value = NbCellCouleur([K...:EZ...], 45)
     Range("FD" & i).Value = NbCellCouleur([K...:EZ...], 3)
     Range("H" & i).Value = (Range("FA" & i).Value + 0.7 * Range("FB" & i).Value + 0.3 * Range("FC" & i).Value) * 4
     Next i


Mon problème consiste donc à trouver ce que je mets dans NbCellCouleur([K...:EZ...) pour que ça corresponde à la ligne i.
J'espère avoir été assez claire dans mes explications et que quelqu'un pourra m'aider.

Merci d'avance à tous ceux qui pourront se pencher sur mon petit problème.

1 réponse

eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
19 févr. 2013 à 08:49
Bonjour,

Range("FA" & i).Value = NbCellCouleur(Range("K" & i & ":" & "EZ" & i), 4)
ou bien
Range("FA" & i).Value = NbCellCouleur(cells(i,"K").Resize(1,nbcol), 4)
nbcol étant le nombre de colonnes

eric
0
Merci pour la réponse mais ça me marque une erreur 1004.
Cela vient peut-être de la manière dont est définie la fonction. Voici le code :

Function NbCellCouleur(Plage As Range, Couleur As Integer) As Long
Application.Volatile True
Dim c As Range

NbCellCouleur = 0
For Each c In Plage
If c.Interior.ColorIndex = Couleur Then
NbCellCouleur = NbCellCouleur + 1
End If
Next c

End Function


Au fait, j'ai essayé les deux méthodes. La première s'écrivait tout de suite en rouge au niveau des : dans
Range("K" & i & ":" & "EZ" & i), 4


Merci quand même.
0
Ah non, désolée, avec la première méthode, problème identique. J'avais dû mal recopier.
En débogage pas à pas, il s'arrête dans la fonction entre les deux lignes suivantes :
For Each c In Plage
If c.Interior.ColorIndex = Couleur Then

Voilà.
Le problème, c'est que je débute, donc ce ne doit pas être grand chose comme erreur mais je suis incapable de m'en sortir.
Merci encore.
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
19 févr. 2013 à 09:29
Si tu donnes par petit bout ton code on ne va pas aller bien loin...
On peut supposer que tu n'as pas initialisé couleur, avec par exemple couleur=3 pour rouge
Et pour ma 1ère proposition tu peux raccourcir en :
Range("FA" & i).Value = NbCellCouleur(Range("K" & i & ":EZ" & i), 4)
pas bien réveillé....

eric
0
Merci, ça fonctionne à présent super bien. C'était un problème de ".

Très grand merci.
0