Moyene avec selection des valeurs à prendre

Résolu
godzila182 -  
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Je cherche a créer une fonction qui permettent de donner la variation entre la somme de 2 colonne. Si l'utilisateur met une des cases de la colonne 1 en rouge, on ne tiendra pas compte de cette valeur ni de la case au niveau de la même ligne dans la colonne 2.

Par exemple :
1 3
5 2
4 8
la fonction renvoie le résultat de 13/10
si l'utilisateur met le 5 en rouge la fonction renvoie le résultat de 11/5 (on enleve le 5 et le 2)

J'ai créé une fonction de ce type :
Public Function sommeCouleur(plage, pal As Range)
Application.Volatile
For Each c In plage
If Not (c.Interior.ColorIndex = 3) And (WorksheetFunction.IsNumber(c) = True) Then
tot = tot + c.Value
End If
Next c
For Each d In pal
If Not (d.Interior.ColorIndex = 3) And (WorksheetFunction.IsNumber(d) = True) Then
toto = toto + d.Value
End If
Next d
sommeCouleur = toto / tot
End Function

mais il manque une indication pour que ca marche. Si quelqu'un avait une solution.

Merci d'avance


3 réponses

ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
Bonjour

Est ce que les 2 plages contiguës (ex A1:A10 et B1:B10) ?

Cdlmnt
0
godzila182 Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 
oui elles sont toujours contigues.
Si j'enleve A3, j'enleve aussi B3
0
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
Essaies comme ceci

Public Function MoyCoul(plage1 As Range, plage2 As Range) As Single
Dim li As Long, nbli As Long, n As Long, total As Single
Application.Volatile
nbli = plage1.Rows.Count
total = 0
n = 0
For li = 1 To nbli
  If plage1.Cells(li, 1).Interior.ColorIndex <> 3 Then
    n = n + plage1.Cells(li, 1)
    total = total + plage2.Cells(li, 1)
  End If
Next li
MoyCoul = total / n
End Function

Cdlmnt
0
godzila182 Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 
Super, ca marche bien. je te remercie pour la rapidité.
0
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
Pour faire joli, tu peux ajouter une vérification du nombre de lignes qui doit être identique dans les deux plages

Public Function MoyCoul(plage1 As Range, plage2 As Range)
Dim li As Long, nbli As Long, n As Long, total As Single
Application.Volatile
nbli = plage1.Rows.Count
If nbli <> plage2.Rows.Count Then MoyCoul = "ERREUR": Exit Function
total = 0
n = 0
For li = 1 To nbli
If plage1.Cells(li, 1).Interior.ColorIndex <> 3 Then
n = n + plage1.Cells(li, 1)
total = total + plage2.Cells(li, 1)
End If
Next li
MoyCoul = total / n
End Function

Si c'est fini, merci de mettre le sujet à Résolu (sous le titre de ta question)

Bonne fin de journée
0