Afficher uniquement des blocs de lignes.

Résolu/Fermé
ched64 Messages postés 52 Date d'inscription lundi 1 avril 2013 Statut Membre Dernière intervention 9 mai 2016 - 29 juil. 2013 à 23:14
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 31 juil. 2013 à 18:17
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

Raymond PENTIER Messages postés 58389 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 18 avril 2024 17 090
30 juil. 2013 à 00:51
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.
0
ched64 Messages postés 52 Date d'inscription lundi 1 avril 2013 Statut Membre Dernière intervention 9 mai 2016
31 juil. 2013 à 13:14
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
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
31 juil. 2013 à 13:20
Bonjour,

C'est possible.

1ère étape : Le classeur.
Je te prépare un truc, tu me dis si ça correspond à ton classeur.
Ok?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
31 juil. 2013 à 13:38
Voici le fichier
Tu dis...
0
ched64 Messages postés 52 Date d'inscription lundi 1 avril 2013 Statut Membre Dernière intervention 9 mai 2016
31 juil. 2013 à 14:00
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
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
31 juil. 2013 à 14:17
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.
0
ched64 Messages postés 52 Date d'inscription lundi 1 avril 2013 Statut Membre Dernière intervention 9 mai 2016
31 juil. 2013 à 15:22
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
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
31 juil. 2013 à 15:26
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...
0
ched64 Messages postés 52 Date d'inscription lundi 1 avril 2013 Statut Membre Dernière intervention 9 mai 2016
31 juil. 2013 à 15:32
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...
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
31 juil. 2013 à 15:36
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...
0
ched64 Messages postés 52 Date d'inscription lundi 1 avril 2013 Statut Membre Dernière intervention 9 mai 2016
31 juil. 2013 à 18:14
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
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
31 juil. 2013 à 18:17
ok. Je te regarde ça demain.
Relance moi demain matin...
Bonne soirée
0