Trier des noms avec filtre...et garder formules

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

olibelle0101

XLDnaute Occasionnel
Bien le bonjour à tous,
Ayant un fichier excel, que j'ai pu creé grace a ce forum,
J'aurais aimé travaillé avec des filtres.
J'ai :
Une feuille "saisie" avec des valeurs.
Une feuille "calcul" avec des formules.
Exemple:
=ecartrouge(Saisie!F3:G5000)
=Couleurs(Saisie!F3:G5000;3)
=NB(Saisie!F3:F5000)

Merci à tous.

Mon code VBA.

En triant avec filtre, ca ne me change pas le calcul pour ces données filtrées,
Il prend en compte toutes les valeurs, meme cachées.
Y a t-il une solution pour un calcul qu'avec les données visibles.

Mon code VBA

Option Explicit

Function EcartVert(MaPlage As Range)
Dim Cel As Range, Compteur As Long
' Permettre à la fonction de s'éxécuter à tout moment
Application.Volatile
' Initialiser le compteur
Compteur = 0
If MaPlage.Columns.Count > 2 Then
EcartVert = "#Erreur : Une Seule colonne possible"
Exit Function
End If
' Pour chaque cellule de la colonne
For Each Cel In MaPlage
If Cel.Interior.ColorIndex = 4 Then
Compteur = 0
Else
If Cel.Value <> "" Then Compteur = Compteur + 1
End If
Next Cel
EcartVert = Compteur
End Function
 
Re : Trier des noms avec filtre...et garder formules

Bonsoir olibelle0101,

Modifier comme suit :

Code:
' Pour chaque cellule de la colonne
For Each Cel In MaPlage
  [COLOR="Red"]If Not Rows(Cel.Row).Hidden Then 'ou Cel.EntireRow.Hidden[/COLOR]
    If Cel.Interior.ColorIndex = 4 Then
      Compteur = 0
    Else
      If Cel.Value <> "" Then Compteur = Compteur + 1
    End If
  [COLOR="Red"]End If[/COLOR]
Next Cel

A+
 
Dernière édition:
Re : Trier des noms avec filtre...et garder formules

Merci de votre aide, mais rien ne change, j'ai pus modifier sans erreur.
Un autre code sur autre module est peut-etre erroné?
Voici ce code.
Encore merci

Function Couleurs(plage As Range, IndexCouleur As Integer) As Long
Application.Volatile
Dim Cel As Range
For Each Cel In plage.Cells
If Cel.Interior.ColorIndex = IndexCouleur Then Couleurs = Couleurs + 1
Next Cel
End Function


Au dessus il ya :

Option Explicit
'Ti

'noir = 1
'marron = 53
'vert olive = 52
'vert foncé = 51
'bleu-vert foncé = 49
'bleu foncé = 11
'indigo = 55
'gris 80% = 56

'rouge foncé = 9
'orange = 46
'marron clair = 12
'vert = 10
'bleu-vert = 14
'bleu = 5
'bleu-gris 47
'gris-50% = 16

'rouge = 3
'orange clair = 45
'citron vert = 43
'vert marin = 50
'vert d'eau = 42
'bleu clair = 41
'violet = 13
'gris-40% = 48

'rose = 7
'jaune d'or = 44
'jaune = 6
'vert brillant = 4
'turquoise = 8
'bleu ciel = 33
'prune = 54
'gris-25% = 15

'rose saumon = 38
'brun = 40
'jaune clair = 36
'vert clair = 35
'turquoise clair = 34
'bleu moyen = 37
'lavande = 39
'blanc = 2

'aucune couleur = -4142
 
Re : Trier des noms avec filtre...et garder formules

Re,

Comprends pas, qu'est-ce qui ne va pas ?

Dans la fonction dont je me suis occupé, je note que la variable Compteur est remise à 0 chaque fois que le code couleur 4 est rencontré, mais c'est votre affaire.

A+
 
Re : Trier des noms avec filtre...et garder formules

Re,

Juste une chose, si la feuille qui contient MaPlage n'est pas la feuille active, il faut impérativement utiliser :

If Not Cel.EntireRow.Hidden Then

J'avais mis cette alternative en commentaire.

A+

A+
 
Re : Trier des noms avec filtre...et garder formules

Ne dois-je pas modifier ma formule ???
=ecartrouge(Saisie!F3:G5000)
=Couleurs(Saisie!F3:G5000;3)
=NB(Saisie!F3:F5000)

Le dernier code situé plus haut dois-etr lui aussi modifier ???

merci.
 
Re : Trier des noms avec filtre...et garder formules

Re,

Pour être franc, je n'avais pas ouvert le fichier, désolé.

Les formules :

Code:
=ecartrouge(Saisie!F3:G5000)
=Couleurs(Saisie!F3:G5000;3)
=NB(Saisie!F3:F5000)

définissent des plages dans une autre feuille, et il faut donc écrire comme je l'ai dit :

If Not Cel.EntireRow.Hidden Then

Le dernier code situé plus haut dois-etr lui aussi modifier ???

Si vous ne voulez pas tenir compte des lignes masquées, oui bien sûr, vous encadrez la boucle par le même test.

A+
 
Re : Trier des noms avec filtre...et garder formules

Bon,
Je travaille avec plusieurs couleur,
tout marche bien sans filtre.
Les code sont dans 5 modules.
Les voila:
Module1
Option Explicit

Function EcartRouge(MaPlage As Range)
Dim Cel As Range, Compteur As Long
' Permettre à la fonction de s'éxécuter à tout moment
Application.Volatile
' Initialiser le compteur
Compteur = 0
If MaPlage.Columns.Count > 2 Then
EcartRouge = "#Erreur : Une Seule colonne possible"
Exit Function
End If
' Pour chaque cellule de la colonne
For Each Cel In MaPlage
If Not Rows(Cel.Row).Hidden Then 'ou Cel.EntireRow.Hidden
If Cel.Interior.ColorIndex = 3 Then
Compteur = 0
Else
If Cel.Value <> "" Then Compteur = Compteur + 1
End If
End If
Next Cel
EcartRouge = Compteur
End Function
Module 2
Option Explicit

Function EcartRose(MaPlage As Range)
Dim Cel As Range, Compteur As Long
' Permettre à la fonction de s'éxécuter à tout moment
Application.Volatile
' Initialiser le compteur
Compteur = 0
If MaPlage.Columns.Count > 2 Then
EcartRose = "#Erreur : Une Seule colonne possible"
Exit Function
End If
' Pour chaque cellule de la colonne
For Each Cel In MaPlage
If Not Rows(Cel.Row).Hidden Then 'ou Cel.EntireRow.Hidden
If Cel.Interior.ColorIndex = 38 Then
Compteur = 0
Else
If Cel.Value <> "" Then Compteur = Compteur + 1
End If
End If
Next Cel
EcartRose = Compteur
End Function
Option Explicit

Module3
Function EcartOrange(MaPlage As Range)
Dim Cel As Range, Compteur As Long
' Permettre à la fonction de s'éxécuter à tout moment
Application.Volatile
' Initialiser le compteur
Compteur = 0
If MaPlage.Columns.Count > 2 Then
EcartOrange = "#Erreur : Une Seule colonne possible"
Exit Function
End If
' Pour chaque cellule de la colonne
For Each Cel In MaPlage
If Not Rows(Cel.Row).Hidden Then 'ou Cel.EntireRow.Hidden
If Cel.Interior.ColorIndex = 45 Then
Compteur = 0
Else
If Cel.Value <> "" Then Compteur = Compteur + 1
End If
End If
Next Cel
EcartOrange = Compteur
End Function

Module4
Option Explicit

Function EcartVert(MaPlage As Range)
Dim Cel As Range, Compteur As Long
' Permettre à la fonction de s'éxécuter à tout moment
Application.Volatile
' Initialiser le compteur
Compteur = 0
If MaPlage.Columns.Count > 2 Then
EcartVert = "#Erreur : Une Seule colonne possible"
Exit Function
End If
' Pour chaque cellule de la colonne
For Each Cel In MaPlage
If Not Rows(Cel.Row).Hidden Then 'ou Cel.EntireRow.Hidden
If Cel.Interior.ColorIndex = 4 Then
Compteur = 0
Else
If Cel.Value <> "" Then Compteur = Compteur + 1
End If
End If
Next Cel
EcartVert = Compteur
End Function

Module5
Option Explicit
'Ti

'noir = 1
'marron = 53
'vert olive = 52
'vert foncé = 51
'bleu-vert foncé = 49
'bleu foncé = 11
'indigo = 55
'gris 80% = 56

'rouge foncé = 9
'orange = 46
'marron clair = 12
'vert = 10
'bleu-vert = 14
'bleu = 5
'bleu-gris 47
'gris-50% = 16

'rouge = 3
'orange clair = 45
'citron vert = 43
'vert marin = 50
'vert d'eau = 42
'bleu clair = 41
'violet = 13
'gris-40% = 48

'rose = 7
'jaune d'or = 44
'jaune = 6
'vert brillant = 4
'turquoise = 8
'bleu ciel = 33
'prune = 54
'gris-25% = 15

'rose saumon = 38
'brun = 40
'jaune clair = 36
'vert clair = 35
'turquoise clair = 34
'bleu moyen = 37
'lavande = 39
'blanc = 2

'aucune couleur = -4142

Function Couleurs(plage As Range, IndexCouleur As Integer) As Long
Application.Volatile
Dim Cel As Range
For Each Cel In plage
If Cel.Interior.ColorIndex = IndexCouleur Then Couleurs = Couleurs + 1
Next Cel
End Function

Je n'ai rien dans les feuille "saisie" "calcul" et "workbook"


Pourquoi je ny arrive pas????

A+
 
Re : Trier des noms avec filtre...et garder formules

Re encore,

Pour la formule :

=NB(Saisie!F3:F5000)

Il faut sans doute la remplacer par :

=SOUS.TOTAL(2;Saisie!F3:F5000)

qui fait la même chose que NB mais qui ne tient pas compte des lignes masquées.

A+
 
Re : Trier des noms avec filtre...et garder formules

Je n'arrive pas à modifier le dernier code..
Function Couleurs(plage As Range, IndexCouleur As Integer) As Long
Application.Volatile
Dim Cel As Range
For Each Cel In plage
If Cel.Interior.ColorIndex = IndexCouleur Then Couleurs = Couleurs + 1
Next Cel
End Function
 
Re : Trier des noms avec filtre...et garder formules

Re,

J'en reste baba 😱

Code:
Function Couleurs(plage As Range, IndexCouleur As Integer) As Long
Application.Volatile
Dim Cel As Range
For Each Cel In plage
  [COLOR="Red"]If Not Cel.EntireRow.Hidden Then[/COLOR]
    If Cel.Interior.ColorIndex = IndexCouleur Then Couleurs = Couleurs + 1
  [COLOR="Red"]End If[/COLOR]
Next Cel
End Function

A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour