Pb avec la gestion des cellules... - VB/VBA/VBS - Programmation
Marsh Posté le 01-06-2010 à 12:03:25
Hello
Déjà ton With cellule ne te sert a rien vu que tu utilise "cellule" juste en dessous.
Avec un With ca aurait donné :
Code :
|
Ensuite, que renvoit la variable cellule justement ? Un range, du type "A1" alros que toi tu renvoies du texte contenu dans une cellule.
Pour la seconde question, c'est normal. Voir au dessus.
valtmp = ColoreCellule(Sheets(1).Range("E2" ), 4)
donc tu envoies comme parametre a ta fonction ColoreCellule : Sheets(1).Range("E2" ) (et accessoirement la couleur)
Mais Sheets(1).Range("E2" ) ne renvoit pas un Range, mais bien ce qu'il y a dans la cellule justement definie par le Range.
Pour renvoyer le range ca serait Sheets(1).Range("E2" ).Address
donc : valtmp = ColoreCellule(Sheets(1).Range("E2" ).address, 4)
Mais ca reste etrange comme maniere de proceder...
Moi j'aurais fait dans CalculePoint :
ColoreCellule "E2", 4
Et dans ColoreCellule :
Range(cellule).Interior.ColorIndex = couleur
Marsh Posté le 01-06-2010 à 12:25:33
SuppotDeSaTante a écrit : Hello
Ensuite, que renvoit la variable cellule justement ? Un range, du type "A1" alros que toi tu renvoies du texte contenu dans une cellule. |
Merci tout d'abord pour ta réponse, claire de surcroit. Effectivement ds le code que j'ai associé à mon post y'avait qqs incohérences. Je débute depuis hier donc méa culpa!
Pour autant j'ai suivi les remarques que tu m'as données et je reste tjs bloqué dans la même situation.
Ci dessous le code modifié. Lorsque sous excel dans une cellule je mets l'appel à la fonction (=CalculePoint("E" )) ca renvoie #VALEUR car au niveau du code cela plante tjs au niveau de Range(cellule).Interior.ColorIndex = couleur
N'hésite pas à m'en dire plus si tu vois qqchose qui te choque !!!! Merci d'avance !
Ouaouane
Function compareResultat(scoreJ1 As String, score As String) As Integer
Dim J1a As Integer
Dim J1b As Integer
Dim FinalA As Integer
Dim FinalB As Integer
Dim posTiretJ1 As Integer
Dim posTiretFinal As Integer
posTiretFinal = InStr(score, "-" )
FinalA = Mid(score, 1, posTiretFinal - 1)
FinalB = Mid(score, posTiretFinal + 1)
If scoreJ1 = score Then
'score et résultat exact
compareResultat = 2
Else
posTiretFinal = InStr(score, "-" )
FinalA = Mid(score, 1, posTiretFinal - 1)
FinalB = Mid(score, posTiretFinal + 1)
posTiretFinal = InStr(scoreJ1, "-" )
J1a = Mid(scoreJ1, 1, posTiretFinal - 1)
J1b = Mid(scoreJ1, posTiretFinal + 1)
If Val(FinalA) = Val(FinalB) And Val(J1a) = Val(J1b) Then
compareResultat = 1
Else
If ((Val(FinalA) < Val(FinalB)) And (Val(J1a) < Val(J1b))) Then
compareResultat = 1
Else
If ((Val(FinalA) > Val(FinalB)) And (Val(J1a) > Val(J1b))) Then
compareResultat = 1
Else
compareResultat = 0
End If
End If
End If
End If
End Function
Function ColoreCellule(cellule As String, couleur As Integer) As Integer
Range(cellule).Interior.ColorIndex = couleur
MsgBox "ColoreCellule"
ColoreCellule = 1
End Function
Function CalculePoint(colonne As String) As Integer
Dim i As Integer
Dim tempPoint As Integer
Dim resultatTour As Integer
Dim valtmp As Integer
tempPoint = 0
For i = 2 To 3
resultatTour = compareResultat(Sheets(1).Range(colonne & i).Value, Sheets(1).Range("H" & i).Value)
tempPoint = tempPoint + resultatTour
If resultatTour = 2 Then
valtmp = ColoreCellule(colonne & i, 4)
'valtmp = ColoreCellule(Sheets(1).Range("E2" ), 4)
'mybool = ColoreCellule(Sheets(1).Range(colonne & i), 4)
Else
If resultatTour = 1 Then
valtmp = ColoreCellule(colonne & i, 6)
'valtmp = ColoreCellule(Sheets(1).Range(colonne & i), 6)
End If
End If
Next i
CalculePoint = CInt(tempPoint)
End Function
Sub test()
'MsgBox compareResultat(Sheets(1).Range("E2" ).Value, Sheets(1).Range("H2" ).Value)
'MsgBox CalculePoint("E" )
'MsgBox ColoreCellule(Range("E2" ), 4)
MsgBox CalculePoint("E" )
End Sub
Marsh Posté le 01-06-2010 à 14:10:35
Bah écoute ceci chez moi fonctionne sans souci :
Code :
|
Sinon je t'ai bien précisé d'utiliser Address
valtmp = ColoreCellule(Sheets(1).Range("E2" ).Address, 4)
Que renvoient ta variable "colonne" et ta variable "i" au moment où ca plante ?
Marsh Posté le 01-06-2010 à 16:20:11
SuppotDeSaTante a écrit : Bah écoute ceci chez moi fonctionne sans souci :
|
Je t'ai envoyé directement un message par mail ds ta boite du site.
Cordialement
Marsh Posté le 01-06-2010 à 11:08:04
Bonjour tout le monde,
voilà je voulais à l'occaz de la tour du monde faire un fichier excel de pronostics. Pr cela j'ai développé 3 fonctions basiques dont l'une d'elle doit colorier la case d'une couleur lorsque le résultat est correct.
Bref, mon soucis c'est qu'à travers la fenetre de développement lorsque je test ma fonction du module tout se passe bien et colore ma cellule. Par contre qd je suis directement sur Excel cela me bloque au niveau de l'instruction cellule.Interior.ColorIndex = couleur
De plus je ne saisi pas du tout pourquoi lorsque j'appelle la fonction ColoreCellule le deboggeur me donne comme valeur de la cellule le score du match plutot que l'identité de la cellule (à savoir E2).
Ci dessous mes codes...
Merci d'avance de m'éclairer la dessus car je n'y comprends pas grand chose...
Ouaouane
-------------------------------------------------------------------------------
Function ColoreCellule(cellule As Range, couleur As Integer) As Integer
With cellule
cellule.Interior.ColorIndex = couleur
End With
MsgBox "ColoreCellule"
ColoreCellule = 1
End Function
--------------------------------------------------------------------------------
Function CalculePoint(colonne As String) As Integer
Dim i As Integer
Dim tempPoint As Integer
Dim resultatTour As Integer
Dim valtmp As Integer
tempPoint = 0
For i = 2 To 3
resultatTour = compareResultat(Sheets(1).Range(colonne & i).Value, Sheets(1).Range("H" & i).Value)
tempPoint = tempPoint + resultatTour
If resultatTour = 2 Then
valtmp = ColoreCellule(Sheets(1).Range("E2" ), 4)
Else
If resultatTour = 1 Then
valtmp = ColoreCellule(Sheets(1).Range(colonne & i), 6)
End If
End If
Next i
CalculePoint = CInt(tempPoint)
End Function