Afficher certaine colonnes seulement (Mois)

Michel10ml

XLDnaute Nouveau
Bonjour,

Je cherche une façon de filtrer ou masquer des colones afin d'afficher que certaine colones d'après une validation de donné (menu déroulant A2)

Ex. si je choisi le mois de mai, j'aimerais masquer tout les autres mois, je dois seulement voir la colonne A, B et toutes les colonnes de la ligne 3 = mai
Donc 23 colones = 2 (Titre & Total) + 21 (mai)
Est-ce possible de le faire sans VB
A moins qu'il y est une autre façon simple d'aller à la première colonne de mai avec un menu déroulant?
J'ai déjà essayé de créer 12 feuilles par mois avec un lien direct, mais lorsqu'il y avait un ajout d'employés ou de titre, je devais faire 12 modifications.

J'ai trouvé plein de façon de filtrer les colonnes verticalement, mais aucune information pour filtrer horizontalement!

Merci à l'avance
 

Pièces jointes

  • Afficher_Mois.xlsx
    58.2 KB · Affichages: 20
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

=>riton00
Juste de publier ton code dans l'édition de ton message#11 ;)
(Rapport que j'ai tellement de fichiers exemples sur mon HD, que si je peux lire le code dans message, ça m'évite de perpétuer l'encombrement binaire)
D'un autre côté, ça développe ma fainéantise mais bon c'est le week-end. ;)
 

Staple1600

XLDnaute Barbatruc
Re

Merci riton00
Grâce à ta syntaxe, je suis sortie de ma fainéantise et je suis retourné jouer dans VBE ;)
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim col(), x$
If Not Intersect(Target, Range("$A$2")) Is Nothing Then
Columns("C:IT").Hidden = True
col = _
Array([{"Janv","C:W"}], [{"Févr","X:AR"}], [{"Mars","AS:BM"}], [{"Avr","BN:CH"}], [{"Mai","CI:DC"}], [{"Juin","DD:DX"}], _
[{"Juill","DY:ES"}], [{"Août","ET:FN"}], [{"Sept","FO:GI"}], [{"Oct","GK:HD"}], [{"Nov","HE:HY"}], [{"Déc","HZ:IT"}], [{"Tout","C:IT"}])
With Application
.ScreenUpdating = False
x = .VLookup([A2], col, 2, 0): Columns(x).Hidden = False
End With
End If
End Sub
 

Michel10ml

XLDnaute Nouveau
Re

Essaie avec ces modifs
(NB:j'ai rajouté Tout dans la plage nommée Mois)
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range, p As Range
Application.ScreenUpdating = False
Set p = Rows(3).SpecialCells(2, 2)
If [A2] = "Tout" Then
  p.EntireColumn.Hidden = False
  Else
  On Error Resume Next
  Mois = CDate("1/" & [A2])
  For Each c In p
    Select Case CDate("1/" & c)
    Case Is = Mois: c.EntireColumn.Hidden = False
    Case Else: c.EntireColumn.Hidden = True
    End Select
  Next
End If
End Sub


Simple question, j'essaie de décortiquer le VBA pour le comprendre.
J'aimerais savoir à quoi sert Le"1" dans CDate("1/" & c)
J'ai fait un test en fusionnant tout les mêmes mois ensemble de la ligne 3 mais ça ne fonctionne plus
J'ai remis comme avant, une colone un mois
 

Staple1600

XLDnaute Barbatruc
Re

Alors, fais ce petit test pour comprendre
VB:
Sub t_est()
c = "Janv"
MsgBox CDate("1/" & c)
MsgBox CDate("31/" & c)
c = "Avr"
MsgBox Month(CDate("1/" & c))
MsgBox MonthName(Month(CDate("1/" & c)))
End Sub
Tu vois désormais à quoi correspond le 1 ? ;)
 

Michel10ml

XLDnaute Nouveau
Re Bonjour,

En voulant ajouter une colonne et supprimer une ligne, le VBA ne fonctionne plus
J'ai changé le Rows(2)
Menu déroulant à B2

Mais je ne saisis pas le SpecialCells (2, 2)
Je croyais que c'était pour (RowIndex, ColumnIndex)
Je ne comprend pas comment l'interpréter,
j'ai essayé toute sorte de chiffres, mais j'ai toujours une erreur.

Merci de me faire comprendre mon erreur!

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range, p As Range
Application.ScreenUpdating = False
Set p = Rows(2).SpecialCells(2, 2)
If [B2] = "Tout" Then
p.EntireColumn.Hidden = False
Else
On Error Resume Next
Mois = CDate("1/" & [B2])
For Each c In p
Select Case CDate("1/" & c)
Case Is = Mois: c.EntireColumn.Hidden = False
Case Else: c.EntireColumn.Hidden = True
End Select
Next
End If
End Sub
 

Pièces jointes

  • Afficher_Mois.xlsm
    63.9 KB · Affichages: 2

Staple1600

XLDnaute Barbatruc
Re

Un petit tour avec la touche F5 s'impose ;)
(à tester sur une feuille vierge, c'est juste un exemple explicatif)
VB:
Sub Eclairer_Ta_Lanterne()
Dim p As Range: Set p = Range("A1:A10")
p.Formula = "=CHOOSE(1+MOD(ROW(),2),""ABC_""&ROW(),1)": p = p.Value
'écriture classique
MsgBox p.SpecialCells(xlCellTypeConstants, 2).Address
'écriture "raccourcie"
MsgBox p.SpecialCells(2, 2).Address
End Sub
En espérant que cela t'a aidé à comprendre ;)
 

Michel10ml

XLDnaute Nouveau
Re

Un petit tour avec la touche F5 s'impose ;)
(à tester sur une feuille vierge, c'est juste un exemple explicatif)
VB:
Sub Eclairer_Ta_Lanterne()
Dim p As Range: Set p = Range("A1:A10")
p.Formula = "=CHOOSE(1+MOD(ROW(),2),""ABC_""&ROW(),1)": p = p.Value
'écriture classique
MsgBox p.SpecialCells(xlCellTypeConstants, 2).Address
'écriture "raccourcie"
MsgBox p.SpecialCells(2, 2).Address
End Sub
En espérant que cela t'a aidé à comprendre ;)


Ok! je crois comprendre que le message commence (A2) en row 2, mais colonne 1?
C'est la que je ne comprend pas le (2, 2)

Merci!
 

Michel10ml

XLDnaute Nouveau
J'ai testé et lu les message mais désolé je n'arrive pas à comprendre.
J'ai inversé B2 et B1 et ça fonctionne

Je vais faire d'autre test pour mieux comprendre, désolé mon VBA est au stade débutant.

Merci pour ton temps et bonne nuit!
 

Statistiques des forums

Discussions
312 040
Messages
2 084 827
Membres
102 684
dernier inscrit
flint125