Pb avec la gestion des cellules...

Pb avec la gestion des cellules... - VB/VBA/VBS - Programmation

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

Reply

Marsh Posté le 01-06-2010 à 11:08:04   

Reply

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 :
  1. With cellule
  2.           .Interior.ColorIndex = couleur
  3.         End With

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

Message cité 1 fois
Message édité par SuppotDeSaTante le 01-06-2010 à 12:08:09

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 01-06-2010 à 12:25:33    

SuppotDeSaTante a écrit :

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 :
  1. With cellule
  2.           .Interior.ColorIndex = couleur
  3.         End With

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


 
 
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
 
 

Reply

Marsh Posté le 01-06-2010 à 14:10:35    

Bah écoute ceci chez moi fonctionne sans souci :
 

Code :
  1. Function ColoreCellule(cellule As String, couleur As Integer)
  2.     Range(cellule).Interior.ColorIndex = couleur
  3. End Function
  4. Function test()
  5.     ColoreCellule "E2", 3
  6. End Function


 
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 ?

Message cité 1 fois
Message édité par SuppotDeSaTante le 01-06-2010 à 14:13:58

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 01-06-2010 à 16:20:11    

SuppotDeSaTante a écrit :

Bah écoute ceci chez moi fonctionne sans souci :
 

Code :
  1. Function ColoreCellule(cellule As String, couleur As Integer)
  2.     Range(cellule).Interior.ColorIndex = couleur
  3. End Function
  4. Function test()
  5.     ColoreCellule "E2", 3
  6. End Function


 
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 ?


 
 
 
Je t'ai envoyé directement un message par mail ds ta boite du site.
 
Cordialement

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed