Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…