Afficher uniquement des blocs de lignes. [Résolu/Fermé]

Signaler
Messages postés
52
Date d'inscription
lundi 1 avril 2013
Statut
Membre
Dernière intervention
9 mai 2016
-
Messages postés
12248
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 mars 2021
-
Bonjour à tous,

Voici mon problème, j'aimerai mettre un filtre qui agit sur un bloc de ligne.

Cela sera sans doute plus simple a comprendre avec le fichier ci-dessous.

https://www.cjoint.com/c/CGDxdOxN54P

En cliquant sur "choix", j'aimerai pouvoir choisir d'afficher uniquement le bloc AAAAA (l4 à l7), le bloc BBBBB (l9 à l12), CCCCC (l14 à l17).
Je ne sais pas si cela est possible en utilisant simplement un filtre, ou bien s'il faut utiliser une macro avec plusieurs bouton (choix A, choix B, choix C).


Je dois faire ceci d'ici jeudi si possible, merci de votre aide :)

Cédric

4 réponses

Messages postés
53362
Date d'inscription
lundi 13 août 2007
Statut
Contributeur
Dernière intervention
2 mars 2021
15 404
Bonjour.

Je crois que tu le sais parfaitement : on ne peut opérer de filtre que sur des cellules contigües en colonne.
S'il y a une solution macro, tu recevras des propositions.
Sans macro, tu peux contourner le problème en t'inspirant de la discussion : https://forums.commentcamarche.net/forum/affich-28286817-trier-des-tableaux-selon-leur-titre

Cordialement.
Messages postés
52
Date d'inscription
lundi 1 avril 2013
Statut
Membre
Dernière intervention
9 mai 2016

Bonjour,

Merci de ta réponse.
J'ai apporté quelques modifications, j'ai créé un colonne A avec une couleur identique dans celle-ci pour chaque bloc. Je peux ainsi filtrer comme je le voulais par couleur.

J'ai cependant pensé à une autre solution plus facile a utiliser, il s'agit de créer des boutons en haut de la page avec l'intitulé des blocs, puis en cliquant sur un bouton on va affiche uniquement le bloc concerné.

Par exemple :
- en cliquant sur le bouton 1 on verra uniquement les lignes donc la couleur de la case de la colone A est bleue.
- en cliquant sur le bouton 2 on verra uniquement les lignes donc la couleur de la case de la colone A est rouge
- en cliquant sur le bouton TOUS on verra Toutes les lignes.

Quelqu'un saurait-il comment faire cela sous VBA.

Merci de votre aide ;)

Cédric
Messages postés
12248
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 mars 2021
2 577
Bonjour,

C'est possible.

1ère étape : Le classeur.
Je te prépare un truc, tu me dis si ça correspond à ton classeur.
Ok?
Messages postés
12248
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 mars 2021
2 577
Voici le fichier
Tu dis...
Messages postés
52
Date d'inscription
lundi 1 avril 2013
Statut
Membre
Dernière intervention
9 mai 2016

Bonjour,

Cela correspond tout à fait à mon classeur. Je n'arrive pas a l'utiliser quand je clique sur une commande cela ne fait rien, je peux juste la modifier.
Peut-etre car j'ai une vieille version d'Excel au travail...? On dirait que la macro n'est pas activé.

En tout cas c'est tout à fait cela l'idée
Merci beaucoup
Messages postés
12248
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 mars 2021
2 577
Bon!
Donc le principe est le suivant :
1- Activer les macros dans ton classeur,
2- colorier les groupes de cellules de la colonne A, de la couleur de ton choix,
3- Insérer les trois macros suivantes en
> taper ALT+F11 depuis le classeur
> Vous ouvrez donc l'éditeur VBA (de l'aide à ce sujet)
> Insertion/Module
> copié-collé ces codes dans le module
Sub FiltreSelonCouleurEnColonneA(Feuille As String, Couleur As Integer)
Dim Lig As Long, DrLig As Long

With Sheets(Feuille)
    Application.ScreenUpdating = False
    DrLig = .Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
    For Lig = 3 To DrLig
        If .Cells(Lig, 1).Interior.ColorIndex = Couleur Or .Cells(Lig, 1) = "" Then
            .Rows(Lig).EntireRow.Hidden = False
        Else
            .Rows(Lig).EntireRow.Hidden = True
        End If
    Next
    Application.ScreenUpdating = True
End With
End Sub

Sub AfficherTout(Feuille As String)
Dim Lig As Long, DrLig As Long

With Sheets(Feuille)
    Application.ScreenUpdating = False
    DrLig = .Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
    For Lig = 3 To DrLig
        .Rows(Lig).EntireRow.Hidden = False
    Next
    Application.ScreenUpdating = True
End With
End Sub

Sub testcouleur()
MsgBox ActiveCell.Interior.ColorIndex
End Sub

> fermer l'éditeur VBA

4- Dessiner un bouton (comme le petit prince...), attention à choisir un contrôle activeX, pas un bouton de formulaire!!!
5- Sélectionner une cellule précédemment colorée,
6- ALT+F8, choix testcouleur, Exécuter
7- relever le numéro communiqué, cliquez sur OK
8- en mode création, double cliquez sur le bouton de commande, l'éditeur VBA s'ouvre avec ces lignes :
Private Sub CommandButton1_Click()

End Sub

9- remplacer ces lignes par :
Private Sub CommandButton1_Click()
FiltreSelonCouleurEnColonneA "Feuil1", 46
End Sub

10- Remplacer 46 par le nombre noté en 7.
11- fermer l'éditeur
12- passer en mode "pas création"
13- testez en cliquant sur le bouton.
14- répéter cette opération autant de fois que nécessaire.
Messages postés
52
Date d'inscription
lundi 1 avril 2013
Statut
Membre
Dernière intervention
9 mai 2016

J'ai bien suivi ta démarche et je t'en remercie.
J'ai un message d'erreur qui s'affiche sous VBA et je n'arrive pas a le déboguer.

Voir fichier ci-joint:

https://www.cjoint.com/c/CGFpwlBac4n

Merci
Messages postés
12248
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 mars 2021
2 577
Le message d'erreur s'affiche car tu n'as pas de données dans la colonne A.
La colonne de référence, A en l'occurrence, doit être complète...
Messages postés
52
Date d'inscription
lundi 1 avril 2013
Statut
Membre
Dernière intervention
9 mai 2016

A oui en effet je viens de voir cela fonctionne merci beaucoup.
Je voulais faire cela mais uniquement avec la couleur de la case initialement.
Cela n'est peut être pas possible, je vais donc mettre des lettres en trasparence...
Messages postés
12248
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 mars 2021
2 577
C'est possible, mais il faudrait alors boucler sur toutes les cellules de la colonne A (soit 65536) pour savoir lesquelles sont colorées.
En plus j'ai ajouté une condition, si une cellule colonne A est vide, la ligne apparait toujours...
Messages postés
52
Date d'inscription
lundi 1 avril 2013
Statut
Membre
Dernière intervention
9 mai 2016

Oui je viens de voir en faisant des tests.

Est-il difficile de faire en sorte que ça prene en compte uniquement la couleur, (regarder les 65536 lignes comme tu dis...) ou bien fixer de manière à examiner les 500 premières lignes par exemple.

Le problème est qu'une fois mon fichier créé, d'autres personnes vont être amenées à l'utiliser et insérer des lignes dans les différentes blocs de couleurs, elles ne sauront pas qu'il faut rajouter un caractére dans la colonne A et le système ne sera plus bon...

Si jamais tu sais le faire merci encore
Messages postés
12248
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 mars 2021
2 577
ok. Je te regarde ça demain.
Relance moi demain matin...
Bonne soirée