Filtre horizontal ou Commande masquer adaptée

Bonjour,

J'ai un tableau dans lequel il y a un certain nombre de colonnes traitant de plusieurs familles de données.

Selon l'étude que je fais, certaines peuvent être employées et pas d'autres.

Pour cela je me suis fait une ligne en tête du tableau qui m'affiche un symbole "0" en rouge ou "1" en vert selon que j'ai employé ou pas chaque colonne (si elle contiens ou pas des données utiles à la compréhension de l'étude).

Le but est, à la fin de mon étude de prix, d'identifier rapidement les colonnes qui sont visuellement inutiles à la lecture de mon déboursé (ne contiennent pas de valeurs) --> je les masque ensuite manuellement et ma mise en page est faite.

Je cherche à automatiser la manipulation de devoir les masquer manuellement en exploitant cette ligne.

Les filtres ne m'aident pas car ils ne filtrent que verticalement, or je veux masquer des colonnes et non des lignes.

Je ne sais pas si il existe un moyen de créer un bouton poussoir ou quelque chose de ce genre qui me masque automatiquement toutes les colonnes dont le symbole en tête est celui "0" en rouge, et me laisse affichées les autres.

Si quelqu'un connais une astuce je prends

Bonjour,

Un truc du genre devrait aller

Sub masque()
For Each cell In ActiveSheet.Range("A1:Z1")
    If cell.Value <> 1 Then
        Columns(cell.Column).Select
        Selection.EntireColumn.Hidden = True
    End If
Next cell
End Sub

Sub affiche()
Range("A1:Z1").Select
Selection.EntireColumn.Hidden = False
End Sub

Trop fort, tu es fabuleux !!!

Comment je fais pour placer les boutons où je veux ?

Pour le moment il sont statiques et tomberaient en plein sur ma feuille de devis.

Merci d'avance

Bonjour à tous

Pour info il existe un filtre inversé plus générique https://www.excel-downloads.com/threads/filtre-inverse.38186/page-9#post-20298258

Pour les boutons tu peux les placer en ligne 1 et figer les volets

Hello,

Je vais regarder ça Chris. 9 pages quand même, ça risque d'occuper un peu.

Tu peux aussi attribuer un raccourci clavier à tes macros, au lieu du bouton.

On peut aussi rendre les formes non imprimables, et du coup on s'en fout un peu qu'elles soient au milieu.

RE

Je vais regarder ça Chris. 9 pages quand même, ça risque d'occuper un peu.

A priori la dernière version est dans le #129

Le #152 est à voir : je ne sais s'il est lié à une demande particulière ou modifie le #129

Arf, faut s'inscrire pour accéder aux fichiers.

C'est d'ailleurs pour ça que je me suis rarement tourné vers ce forum en fait, à la réflexion.

Je me suis inscrit (même pseudo et identifiants que pour ce forum-ci lol).

J'ai téléchargé les fichiers et j'ai testé.

Ça reste une VBA mais programmée avec une interface genre fenêtre flottante qui s'ouvre au moment où l'on appuie sur le bouton.

Le filtre ne ferme pas les colonnes, il les affiche dans la fenêtre interface.

Finalement je préfère le système de JoyeuxNoel.

Ça colle mieux à ce que je voulais faire et c'est plus simple, pas d'interface superflue, mas de chichis, le résultat direct !

Encore merci a lui d'ailleurs

Voici les fichiers que j'ai récupéré

RE

En fait la version finale ne semble pas être dans le fil que j'ai indiqué.

J'ai une version plus aboutie avec un pdf explicatif mais je n'ai pas retrouvé la source qui est une adaptation de ce qu'avait fait Pascal

Cela masque bien les colonnes une fois les options paramétrées et cela fonctionne avec des 0 et 1

Mais le code de JoyeuxNoël est parfaitement adapté à ta demande

Hello,

Merci pour les téléchargements, je regarderai ça.

Pour le code, si vraiment tu veux pousser plus en avant l'histoire du bouton poussoir :

On imagine que ta forme s'appelle rectangle 1, et que la colonne A n'est jamais filtrée.

Sinon, on peut jouer aussi un peu avec les codes pour savoir où l'afficher si la colonne A est filtrée.

Sub masque_affiche()
If ActiveSheet.Shapes("Rectangle 1").Fill.ForeColor <> RGB(255, 0, 0) Then
Call masque
Else:
Call affiche
End If
End Sub

Sub masque()
For Each cell In ActiveSheet.Range("A1:Z1")
    If cell.Value <> 1 Then
        Columns(cell.Column).Select
        Selection.EntireColumn.Hidden = True
    End If
Next cell

With ActiveSheet.Shapes("Rectangle 1")
    .Fill.ForeColor.RGB = RGB(255, 0, 0)
    .TextFrame.Characters.Text = "Masquer"
    .Top = Range("A1")
    .Width = 60
    '.PrintObject = False
End With
End Sub

Sub affiche()
Range("A1:Z1").Select
Selection.EntireColumn.Hidden = False

With ActiveSheet.Shapes("Rectangle 1")
    .Fill.ForeColor.RGB = RGB(0, 176, 80)
    .TextFrame.Characters.Text = "Afficher"
    .Top = Range("A1")
    .Width = 60
   ' .PrintObject = False
End With
Range("A1").Select
End Sub

Je précise que je suis loin d'être un expert en VBA et que toute amélioration de syntaxe est la bienvenue !

La méthode .printobject n'est pas reconnue comme ça, d'ailleurs.

Ah ces puristes...

Merci pour les codes.

J'en suis à mes balbutiements avec les VBA alors tout ça me fait bien avancer.

Encore merci

Bon j'ai mis en pratique la VBA de JoyeuxNoel (la première basique mais plus simple à modifier pour moi) et je rencontre un nouveau problème :

Enfait, dans mon tableau, les 1 et les 0 qui déterminent si masquer ou pas sont remplacés par des symboles de type Unicode hexadécimal 1F505 et 1F506 (le symbole de la petite lumière allumée ou éteinte).

Impossible d'adapter la VBA à la validation de ces caractères.

En remplaçant les symboles par des 1 et des 0 ça fonctionne; ça ne viens donc pas de la VBA mais plutôt de la syntaxe employée pour indiquer à la VBA le caractère de validation...

J'ai essayé toutes les commandes Chr, comme ChrW(&H1F505) à la place du 1 mais ça ne marche pas, il indique une erreur.

Si vous avez la solution pour moi...

RE

Unicode est géré dans Excel 365 (UNICAR) mais pas sûr pour 2019 ni pour VBA

A défaut met 1 et 0 et affiche ton caractère par MFC avec un format de nombre

Non la formule fonctionne, le problème viens de ce caractère.

J'ai trouvé sur un autre forum une personne qui a réussi à implémenter son caractère unicode comme reconnu dans une VBA.

Il utilise ChrW(&HXXXX)

Mais il avais le caractère U2016 et sa commande est devenue ChrW(&H2016)... il a ajouté &H pour caractère hexadécimal (ça ok) mais le U a sauté !!! Et ça a marché pouir lui !!!

Moi mon foutu caractère c'est un 1F505

Si je vire le 1 et je met ChrW(&HF505) la commande fonctionne, sauf qu'il me masque toutes les colonnes (preuve qu'il recherche bien un caractère Unicode, mais manifestement pas le bon !!!!)

Donc j'avance dans la compréhension mais pas de résultat encore

Re

Et tu as fait comment pour saisir le caractères dans Excel ?

J'ai utilisé la commande "caractères spéciaux"...

Dans la fenêtre des symboles je clique sur le symbole que tu veux et en bas ça t'affiche l'unicode hexadecimal du caractère.

Je pioche dans la police Segoe UI Symbol et tout en bas j'ai mes 2 symboles :

"allumé"🔆 1F506

"éteint"🔅 1F505

C'est quand même plus stylé que des 0 et des 1... non?

Pis un truc stylé qui ne marche pas est toujours mieux qu'un truc moins stylé qui marche, non ?

Cela dit, c'est sympa d'en vouloir toujours plus, c'est comme ça qu'on progresse. Mais là, on dépasse mes compétences

RE

A adapter

If WorksheetFunction.Unicode(Cells(1, 1)) = 128261 Then
    plier
ElseIf WorksheetFunction.Unicode(Cells(1, 1)) = 128262 Then
    deplier
End If
Rechercher des sujets similaires à "filtre horizontal commande masquer adaptee"