Calcul et affichage d'une valeur en fonction de la couleur des cases

Bonjour à tous,

Pour commencer voici (en gros) à quoi sert mon fichier :
Il me permet de rentrer des tâches à faire dans un certain domaine et pour une certaine date, une colonne appelée "Etat" permet, lors du double-clic sur une cellule d'en changer la couleur (pour représenter si cette tâche est en terminée, en cours, ou pas encore abordée). Cette fonction est gérée par un code VBA.

Mon problème est le suivant:

Je voudrais lors de l'ajout d'une nouvelle tâche, que le programme parcourt la colonne "Etat" et calcule selon la couleur des cellules précédentes le pourcentage de tâches effectuées. La formule est relativement simple (vert=effectué=1; orange=en cours=0,5; rouge=pas abordé=0. On calcule cette somme/total*100, et voilà). Une fois le pourcentage calculé j'aimerais que celle-ci l'écrive dans la première case vide de la colonne "Etat".

Je suis novice en VBA, excusez-moi à l'avance pour la qualité du code issu de bribes de sites internet divers.

image

J'aimerais par exemple ici que le programme parcourt la colonne "Etat" et écrive en "E9" : 43% (2 verts + 2 oranges = 2*1 + 2* 0.5 = 3 et 3/7=0.43 soit 43%)

Le code est le suivant :

Private Sub Worksheet_Pourcentage(ByVal Target As Range, Cancel As Boolean)
If Not Application.Intersect(Target, Range("e:E")) Is Nothing Then
    coul = Target.Interior.ColorIndex
    Select Case coul
    Dim total As Integer
    Dim somme As Single
    somme = 0
    total = 0
    Do Until coul = -4142
    'orange
        Case 45
        total = total + 1
        somme = somme + 0.5
        Target.Offset(1, 0).Select
    'vert
        Case 4
        total = total + 1
        somme = somme + 1
        Target.Offset(1, 0).Select
    'Rouge
        Case 3
        total = total + 1
        Target.Offset(1, 0).Select
        Case Else
        MsgBox "erreur"
    Loop
    Target.Offset(1, 0).Select
    Target.Value = (somme / total) * 100
    End Select
End If
End Sub

Merci de votre aide !

7devoirs.xlsm (20.80 Ko)

Bonjour Noah, le forum,

Un petit fichier peut-être ?

Cordialement,

Mea Culpa, c'est fait

Re,

Un essai....

Cordialement,

Merci beaucoup c'est exactement ce qu'il me fallait ! Serait-ce possible d'avoir une explication du code (via MP éventuellement) car je n'en ai pas saisi toutes les subtilités ?

Re,

Merci pour ton retour,

En fait j'utilise ton code "Double-clic" pour inscrire la valeur correspondant à la couleur dans la cellule.

  • Lorsque tu double-clic sur la cellule, on change donc la couleur (.Interior.ColorIndex), on change la couleur de la police (.Font.ColorIndex) de façon à ce que le chiffre ne soit pas visible et on inscrit la valeur ( .Value) .
  • Il reste ensuite à faire la somme de ces valeurs et à le diviser par le nombre de valeurs présentes en colonne A.

donc ici : = somme("E2:E8")/nbval("A2:A8")

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 Dim dl%, plage As Range, coul '...........................déclaration des variables

         dl = Me.Range("A" & Rows.Count).End(xlUp).Row '...dernière ligne remplie de la colonne A
  Set plage = Me.Range("E2:E" & dl) '......................définit la plage à sommer

   If Not Application.Intersect(Target, plage) Is Nothing Then
    Cancel = True
     coul = Target.Interior.ColorIndex
      Select Case coul
     'orange à vert + griser
      Case 45
       With Target
        'couleur cellule et police en vert, inscrit 1 dans la cellule
        .Interior.ColorIndex = 4: .Font.ColorIndex = 4: .Value = 1
        .Offset(0, -1).Interior.ColorIndex = 15
        .Offset(0, -2).Interior.ColorIndex = 15
        .Offset(0, -3).Interior.ColorIndex = 15
        .Offset(0, -4).Interior.ColorIndex = 15
       End With
     'vert à rouge
      Case 4
       With Target
       'couleur cellule et police en rouge, inscrit 0 dans la cellule
        .Interior.ColorIndex = 3: .Font.ColorIndex = 3: .Value = 0
        .Offset(0, -1).Interior.ColorIndex = -4142
        .Offset(0, -2).Interior.ColorIndex = -4142
        .Offset(0, -3).Interior.ColorIndex = -4142
        .Offset(0, -4).Interior.ColorIndex = -4142
       End With
     'Rouge à orange
      Case 3
       'couleur cellule et police en orange inscrit 0,5 dans la cellule
       Target.Interior.ColorIndex = 45: Target.Font.ColorIndex = 45: Target.Value = 0.5
     'Blanc
      Case -4142
       'couleur cellule et police en rouge, inscrit 0 dans la cellule
       Target.Interior.ColorIndex = 3: Target.Font.ColorIndex = 3: Target.Value = 0
      Case Else
       MsgBox "Cette couleur n'est pas reconnue."
      End Select
    'Calcul en E et dernière ligne: somme de la plage/nombre de valeur en colonne A ( de A2 à A et dernière ligne).
    Range("E" & dl + 1) = Application.WorksheetFunction.Sum(plage) / Application.CountA(Range("A2:A" & dl))
    'Format de la cellule en % sans décimales
    Range("E" & dl + 1).NumberFormat = "0%"
End If
End Sub

En espérant que cela t'aide,

Cordialement,

Rechercher des sujets similaires à "calcul affichage valeur fonction couleur cases"