[VBA Excel] Changement du format d'un cellule ne marche pas

Changement du format d'un cellule ne marche pas [VBA Excel] - VB/VBA/VBS - Programmation

Marsh Posté le 21-01-2006 à 16:20:52    

Bonjour.
Sur une feuille excel, j'ai une fonction (placé dans un module "module1" ) et une procedure sur un évenement "change" (qui se trouve dans le module de la feuille "Feuil1" ), elle sert à colorer les cellule en fonction de leur contenu.
Voici la fonction et la procedure.
 

Code :
  1. Public Function ble_dur(intervale As Range, culture As String) As Single
  2.     Dim total As Single
  3.     Dim Cellule As Range
  4.     total = 0
  5.     For Each Cellule In intervale
  6.         If Cellule = "Blé dur" Then
  7.                 If ActiveSheet.Cells(Cellule.Row, Cellule.Column - 1) = culture Then
  8.                     total = total + ActiveSheet.Cells(Cellule.Row, 3)
  9.                 End If
  10.         End If
  11.     Next Cellule
  12.     ble_dur = total
  13. End Function


 

Code :
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     If ((Target.Row >= 5 And Target.Row <= 24) Or (Target.Row >= 26 And Target.Row <= 48)) And (Target.Column >= 5 And Target.Column <= 10) Then
  3.         Select Case Target
  4.             Case "Blé dur"
  5.                 With Target.Interior
  6.                     .ColorIndex = 10
  7.                     .Pattern = xlSolid
  8.                 End With
  9.             Case "Prairie"
  10.                 With Target.Interior
  11.                     .ColorIndex = 43
  12.                     .Pattern = xlSolid
  13.                 End With
  14.             Case "Courges"
  15.                 With Target.Interior
  16.                     .ColorIndex = 46
  17.                     .Pattern = xlSolid
  18.                 End With
  19.             Case "Gel"
  20.                 With Target.Interior
  21.                     .ColorIndex = 40
  22.                     .Pattern = xlSolid
  23.                 End With
  24.             Case "Melons"
  25.                 With Target.Interior
  26.                     .ColorIndex = 6
  27.                     .Pattern = xlSolid
  28.                 End With
  29.             Case "Luzerne"
  30.                 With Target.Interior
  31.                     .ColorIndex = 50
  32.                     .Pattern = xlSolid
  33.                 End With
  34.             Case "P de terre"
  35.                 With Target.Interior
  36.                     .ColorIndex = 53
  37.                     .Pattern = xlSolid
  38.                 End With
  39.             Case "Oliviers"
  40.                 With Target.Interior
  41.                     .ColorIndex = 12
  42.                     .Pattern = xlSolid
  43.                 End With
  44.             Case Else
  45.                 With Target.Interior
  46.                     .ColorIndex = 0
  47.                     .Pattern = xlSolid
  48.                 End With
  49.         End Select
  50.     End If
  51. End Sub


 
Le problème que j'ai, et que si j'utilise ,dans une cellule, ma fonction ble_dur avec en parametre une plage de cellule sur laquelle j'applique ma coloration, et qu'ensuite je modifie une cellule dans cette plage de cellule (la plage passé en parametre de ma fonction), la coloration ne se fait pas.
Or si je modifie une cellule sur laquelle la coloration s'effectue, et qui ne fait pas parti de la plage passer en paramétre de ma fonction, la coloration marche.
 
Par exemple:
Ma coloration s'effectue sur les cellules E5 à J24  et E26 à J48.
Dans une cellule (disons B50), je tape '=ble_dur(F5:F24; "Blé dur" )'
Dans B50, j'aurais le résultat de ma fonction.
Maintenant si je modifie la cellule F6 (qui est dans la plage passé en paramétre, de la fonction en B50), ma coloration ne marche pas, pourtant elle est bien dans la plage de cellules aux quelles j'attribue une couleur.
Et si je modifie la case G6 (qui est en dehors de la plage passé en paramétre), la coloration marche.
 
J'ai tracé le code pas à pas, et dans les deux cas, excel passe dans ma procédure de coloration, mais dans le premier cas, c'est comme si le '.colorindex' était en lecture seule, je lui donne une valeur, mais il ne la prend pas en compte.
 
Quelqu'un à une idée d'où peut venir le problème ?
Merci d'avance.
 
Edit: j'ai tout modifié mon message, parce que le copier-coller depuis un autre forum sans avoir ce qu'il ya avant c'est pas top pour comprendre :)


Message édité par Bennoip le 21-01-2006 à 17:04:15
Reply

Marsh Posté le 21-01-2006 à 16:20:52   

Reply

Marsh Posté le 21-01-2006 à 23:02:35    

Bonjour,
N'est-ce pas un problème de casse. Il faut certainement tout convertir en minuscule ou majuscule pour que la comparaison de texte puisse se faire. Essaie :
 
Private Sub Worksheet_Change(ByVal Target As Range)
If ((Target.Row >= 5 And Target.Row <= 24) Or (Target.Row >= 26 And Target.Row <= 48)) And (Target.Column >= 5 And Target.Column <= 10) Then
Select Case LCase(Target)
    Case "blé dur"
        With Target.Interior
            .ColorIndex = 10
            .Pattern = xlSolid
        End With
    Case "prairie"
etc...
 
Par ailleurs, je ne comprend pas trop la fonction. Ne faut-il pas écrire :
 
Public Function ble_dur(intervale As Range, culture As String) As Single
Dim total As Single
Dim Cellule As Range
total = 0
For Each Cellule In intervale
    If LCase(Cellule) = LCase(culture) Then
        'If ActiveSheet.Cells(Cellule.Row, Cellule.Column) = culture Then
    total = total + 1   ' ActiveSheet.Cells(Cellule.Row, Cellule.Column)
        'End If
    End If
Next Cellule
ble_dur = total
End Function
 

Reply

Marsh Posté le 22-01-2006 à 12:09:02    

Euh non ça ne marche pas, puisque la procedure s'execute comme il faut, et passe bien sur mon colorindex, mais ne le modifie pas.
 
Ma fonction, regarde si pour une ligne x, si elle contient "Blé dur", alors elle regarde la colone d'avant sur la même ligne, et si la cellule d'a coté contient la même valeur que le culture passait en paramétre, alors on ajoute au total la valeur de la cellule colone C de cette ligne. Et ainsi de suite pour chaque ligne.

Reply

Sujets relatifs:

Leave a Replay

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