Moyene avec selection des valeurs à prendre

Résolu
godzila182 -  
ccm81 Messages postés 11033 Statut Membre -
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

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Bonjour

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

    Cdlmnt
    0
    1. 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
  2. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
    1. godzila182 Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
       
      Super, ca marche bien. je te remercie pour la rapidité.
      0
  3. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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