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.
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 SubMerci de votre aide !
Bonjour Noah, le forum,
Un petit fichier peut-être ?
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 SubEn espérant que cela t'aide,
Cordialement,