Moyene avec selection des valeurs à prendre

Résolu/Fermé
godzila182 - 19 juin 2015 à 14:54
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 - 19 juin 2015 à 15:22
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 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
19 juin 2015 à 15:01
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 vendredi 19 juin 2015 Statut Membre Dernière intervention 19 juin 2015
19 juin 2015 à 15:08
oui elles sont toujours contigues.
Si j'enleve A3, j'enleve aussi B3
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
19 juin 2015 à 15:14
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 vendredi 19 juin 2015 Statut Membre Dernière intervention 19 juin 2015
19 juin 2015 à 15:20
Super, ca marche bien. je te remercie pour la rapidité.
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
19 juin 2015 à 15:22
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