masquer des colonnes en gardant l'en-tête

CHRISTOPHEAGPM

XLDnaute Nouveau
 

Pièces jointes

  • Base xld.xls
    43.5 KB · Affichages: 85
Dernière édition:

job75

XLDnaute Barbatruc
Re : masquer des colonnes en gardant l'en-tête

Bonsoir Christophe,

Voyons...

On masque des lignes ou des colonnes.

Si l'on masque une colonne, toutes les cellules de la colonne seront masquées, y compris l'en-tête (heureusement...).

A+
 

CHRISTOPHEAGPM

XLDnaute Nouveau
Re : masquer des colonnes en gardant l'en-tête

Oups,

Merci Job
Et dire que j'avais fait un effort pour essayer d'etre clair :)
A trop forcer sur les macros...
Il s'agit bien de masquer les colonnes (en-tête compris) si celles-ci sont vides.


Cela ressemblerai au fichier en Pj. avec "cache et montre les colonnes vides"

Mon pb est de rechercher les cellules vides d'une série de colonne en excluant les en-tête de colonne de cette recherche.

esperant que cette fois c'est compréhensible et comptant sur votre aide.
 

Pièces jointes

  • cache_colonne(1).xls
    23 KB · Affichages: 70
  • cache_colonne(1).xls
    23 KB · Affichages: 69
  • cache_colonne(1).xls
    23 KB · Affichages: 66

tora

XLDnaute Occasionnel
Re : masquer des colonnes en gardant l'en-tête

Slt

si j'ai tout compris ça donnerait ça ...

@+
 

Pièces jointes

  • cache_colonne(1).xls
    21.5 KB · Affichages: 98
  • cache_colonne(1).xls
    21.5 KB · Affichages: 99
  • cache_colonne(1).xls
    21.5 KB · Affichages: 106

Fabien-P

XLDnaute Nouveau
Re : masquer des colonnes en gardant l'en-tête

Salut,

voici un ptit code que je viens de faire qui pourrait peut être correspondre à ce que tu veux

Je l'ai fait pour les colonne A à O il faut donc l'appliquer à ton exemple

Débutant dans le VBA et ne sachant pas encore comment récupérer les lettres des colonnes, j'ai commencé par définir les lettres des colonnes en fonction de leur numéro, afin de pouvoir les utiliser dans la fonction Range.
je pense qu'il doit exister un moyen bcp plus simple, mais je ne le connais pas encore.

Pour la suite pas grand chose à dire, en fait je recherche l'adresse de la dernière cellule de la colonne qui est remplie et si elle est égale à l'adresse de la cellule d'en-tête la colonne est considérée comme vide

Code:
Sub masque()
For rw = 1 To 15
If rw = 1 Then
Lettre_col = "A"
ElseIf rw = 2 Then
Lettre_col = "B"
ElseIf rw = 3 Then
Lettre_col = "C"
ElseIf rw = 4 Then
Lettre_col = "D"
ElseIf rw = 5 Then
Lettre_col = "E"
ElseIf rw = 6 Then
Lettre_col = "F"
ElseIf rw = 7 Then
Lettre_col = "G"
ElseIf rw = 8 Then
Lettre_col = "H"
ElseIf rw = 9 Then
Lettre_col = "I"
ElseIf rw = 10 Then
Lettre_col = "J"
ElseIf rw = 11 Then
Lettre_col = "K"
ElseIf rw = 12 Then
Lettre_col = "L"
ElseIf rw = 13 Then
Lettre_col = "M"
ElseIf rw = 14 Then
Lettre_col = "N"
ElseIf rw = 15 Then
Lettre_col = "O"
End If
adresse = Range(Lettre_col & "65536").End(xlUp).Address
adressse_entete =  "$" & Lettre_col & "$1"
If adresse =  adressse_entete Then
Range(Lettre_col & "1").EntireColumn.Hidden = True
End If
Next rw
End Sub

Après j'ai peut être pas bien compris ce que tu voulais exactement
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : masquer des colonnes en gardant l'en-tête

Bonjour Christophe, le fil, le forum,

Le code du bouton (c'est un contrôle ActiveX) :

Code:
Private Sub CommandButton1_Click()
Static flag As Boolean
Dim col As Range
Application.ScreenUpdating = False
flag = Not flag
For Each col In Columns("AJ:CX")
col.Hidden = flag And Application.CountA(col) = 1 [COLOR="Red"]'toutes les colonnes ont un en-tête...[/COLOR]
Next
Application.ScreenUpdating = True
End Sub

Grâce à la variable (Static) flag, le clic alternativement masque ou affiche les colonnes vides.

EDITION : si à l'ouverture du fichier les colonnes sont masquées, il faudra cliquer 2 fois sur le bouton pour les afficher. C'est un petit inconvenient. On peut y remédier comme suit :

Code:
Private Sub CommandButton1_Click()
Static flag As Boolean
Dim col As Range, [COLOR="Red"]test As Boolean[/COLOR], vide As Boolean
Application.ScreenUpdating = False
1 flag = Not flag
For Each col In Columns("AJ:CX")
vide = Application.CountA(col) = 1
[COLOR="Red"]If Not test Then test = vide And Not col.Hidden[/COLOR]
col.Hidden = flag And vide
Next
[COLOR="Red"]If flag + test = -1 Then GoTo 1[/COLOR]
Application.ScreenUpdating = True
End Sub

A+
 
Dernière édition:

Excel-lent

XLDnaute Barbatruc
Re : masquer des colonnes en gardant l'en-tête

Bonsoir Fabien-P, le fil,

Fabien-P à dit:
Je l'ai fait pour les colonne A à O il faut donc l'appliquer à ton exemple

Débutant dans le VBA et ne sachant pas encore comment récupérer les lettres des colonnes, j'ai commencé par définir les lettres des colonnes en fonction de leur numéro, afin de pouvoir les utiliser dans la fonction Range.

Code:
Sub masque()
For rw = 1 To 15
[COLOR="Orange"][B]If rw = 1 Then
Lettre_col = "A"
ElseIf rw = 2 Then
Lettre_col = "B"
ElseIf rw = 3 Then
Lettre_col = "C"
ElseIf rw = 4 Then
Lettre_col = "D"
ElseIf rw = 5 Then
Lettre_col = "E"
ElseIf rw = 6 Then
Lettre_col = "F"
ElseIf rw = 7 Then
Lettre_col = "G"
ElseIf rw = 8 Then
Lettre_col = "H"
ElseIf rw = 9 Then
Lettre_col = "I"
ElseIf rw = 10 Then
Lettre_col = "J"
ElseIf rw = 11 Then
Lettre_col = "K"
ElseIf rw = 12 Then
Lettre_col = "L"
ElseIf rw = 13 Then
Lettre_col = "M"
ElseIf rw = 14 Then
Lettre_col = "N"
ElseIf rw = 15 Then
Lettre_col = "O"
End If[/B][/COLOR]
adresse = Range(Lettre_col & "65536").End(xlUp).Address
adressse_entete =  "$" & Lettre_col & "$1"
If adresse =  adressse_entete Then
Range(Lettre_col & "1").EntireColumn.Hidden = True
End If
Next rw
End Sub

L'idéal, pour ne pas avoir besoin de la lettre de la colonne, au lieu d'utiliser la fonction Range("A15") tu peux utiliser la fonction Cells(15,1).

Elles veulent toutes les deux dire exactement la même chose : cellule A15

Cells(numéro de la ligne,numéro de la colonne)

Comme tu le vois, pour cette fonction on commence par la ligne et on fini par la colonne, contrairement à la fonction Range()

Autre particularité de la fonction Cells(), au lieu de mettre la lettre correspondant à la colonne que tu veux, tu mets son numéro!

Donc au lieu de A tu écriras 1
au lieu de B tu écriras 2
...

Ce qui te permet donc d'enlever de ton code toute cette partie devenu inutile qui traduisait tes chiffres en "lettre de colonne".

Il est bien au début de ta macro de définir tes variables :

Code:
[COLOR="Gray"][B]Dim rw as long[/B][/COLOR]

C'est à dire expliquer à Excel ce que contiendrons tes variables :
-> chiffres (combien? Entier? Décimal? ...?)?
-> lettres?
-> ...

Tu trouveras ici quelques explications clair et pratique

Bonne progression
 

Fabien-P

XLDnaute Nouveau
Re : masquer des colonnes en gardant l'en-tête

Merci Excel-lent pour tes explications.

A vrai dire, j'avais essayé avec Cells(), mais je devais surement merder quelque part parceque ça ne marchais pas comme je voulais, à chaque fois il me marquait une erreur.
Si je trouve un peu de temps, je retenterai le coup pour voir, pour moi y a pas de raison que ça ne marche pas avec Cells()
 

mromain

XLDnaute Barbatruc
Re : masquer des colonnes en gardant l'en-tête

bonjour le fil

Fabien-P, si tu veux quand même récupérer les lettres de colonne, tu peux faire comme ça :
Code:
lettreColonne = Chr(noColonne + 64)

c'est valable pour les colonnes A à Z, ça bugue quand on passe à la colonne AA.

cependant la méthode de Excel-lent est mieux (je dirai même "Excel-lente")

a+
 

Fabien-P

XLDnaute Nouveau
Re : masquer des colonnes en gardant l'en-tête

Salut,

Bien que le sujet initial ne me concerne pas, je vous remerci tous pour ces conseils

En fait j'ai retravaillé le code que j'avais proposé et il est bien plus simple :

Code:
Sub masque()
Dim rw As Long
For rw = 1 To 15
adr = Cells(65536, rw).End(xlUp).Address
adr_entete = Cells(1, rw).Address
If adr = adr_entete Then
Cells(1, rw).EntireColumn.Hidden = True
End If
Next rw
End Sub

Pourtant j'avais essayé avec Cells() mais ça n'avait pas marché, je devais surement être un peu trop fatigué.

mromain, je trouve ton astuce également très interessante, même si ça merde au dela de la lettre Z, dans d'autres circonstances je pense que ça peut être très utile.
 

CHRISTOPHEAGPM

XLDnaute Nouveau
Re : masquer des colonnes en gardant l'en-tête

Job75,Excel-lent,Fabien-P

Merci à tous et pour tout, avec trois mois de retard. c'est ce qu'il m'a fallut pour finaliser et optimiser mon outil. Il donne entière satisfaction, à moi et surtout aux utilisateurs. Job75 ta solution est idéale.

A certainement tres bientot.
 

Discussions similaires

Statistiques des forums

Discussions
312 490
Messages
2 088 882
Membres
103 981
dernier inscrit
vinsalcatraz