Masquer des lignes selon couleur sans modifier le résultat ...

Fermé
Laeti3112 - 17 juil. 2015 à 15:06
 Laeti3112 - 17 juil. 2015 à 17:05
Bonjour,

J'utilise cette formule afin de masquer dans mon tableau toutes mes lignes rouges (colorisées manuellement sans MFC) :

Sub test()
Dim X As Long
Rows.Hidden = False
For X = 1 To [A65536].End(xlUp).Row
If Range("A" & X).Interior.ColorIndex = 3 Then _
Rows(X).Hidden = True
Next X
End Sub

Jusque là tout va bien!
Le hic c'est que le montant de ces lignes rouges est pris en compte pour faire un total (en effet lignes rouges dans mon tableau = paiements débités). Et que lorsque j'applique ma formule ci dessus, le montant de mes totaux débités disparaît pour afficher #VALEUR!

Je calcule le montant de mon total débités avec cette formule :

Function SommeSiCouleur(Plage As Range, NumeroDeCouleur%) As Currency
Application.Volatile True
Dim wCell As Range
For Each wCell In Plage
If wCell.Interior.ColorIndex = NumeroDeCouleur Then
SommeSiCouleur = SommeSiCouleur + wCell.Value
End If
Next
End Function

'Formule à insérer dans cellule pour appeler la fonction
'=SommeSiCouleur($C$1:$C$34;3)

Ma question : comment masquer les lignes rouges de mon tableau sans pour autant affecter le calcul de leur montant total...

NB : Je précise que si je fais manuellement clic droit "masquer" sur les lignes rouges, elles disparaissent et mon montant n'est pas affecté...

Merci pour votre aide !!!

Cordialement+++



A voir également:

3 réponses

eriiic Messages postés 24597 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 22 septembre 2024 7 236
17 juil. 2015 à 15:10
Bonjour,

Merci de déposer le fichier xls (réduit au nécessaire et anonymisé) sur cjoint.com et coller ici le lien fourni.

eric
1
Merci eric pour votre collaboration.
Voici le lien :

http://www.cjoint.com/c/EGrnD5Eh1FN
0
eriiic Messages postés 24597 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 22 septembre 2024 7 236
17 juil. 2015 à 16:28
Ta fonction, volatile, est appelée inutilement à chaque masquage de ligne.
Et à cet instant .interior n'est pas lisible.
Tu peux suspendre les calculs et les rétablir ensuite :
Sub masquage()
    Dim X As Long
    Rows.Hidden = False
    'affichage de toutes les lignes
    Application.Calculation = xlCalculationManual
    For X = 1 To [A65536].End(xlUp).Row
        'pour x= 4 à dernière ligne non-vide en A
        If Range("A" & X).Interior.ColorIndex = 22 Then _
           Rows(X).Hidden = True
        'si le fond de la cellule Ax = 17 ou
        'si le fond de la cellule Ax = 28 alors
        'masquage ligne x = vrai
    Next X
    'X suivant
    Application.Calculation = xlCalculationAutomatic
End Sub

eric

PS: utilise la balise (icone : <>) pour mettre en forme ton code ici.
1
Un grand Merci Eric, tout fonctionne parfaitement...

Bon week end !!!
0
ccm81 Messages postés 10895 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 3 octobre 2024 2 421
17 juil. 2015 à 16:54
Bonjour

Peut être dans la fonction Somme tester si la ligne est masquée
http://www.cjoint.com/c/EGro1ZSZXlG

Cdlmnt
0