[RESOLU] Afficher/masquer colonne sur planning selon une date

jerem512

XLDnaute Nouveau
Bonjour,

J'ai un planning annuel linéaire horizontal. J'ai mis en place une formule qui afficher et masquer les colonnes selon une date dans une cellule.

Seulement, je trouve la macro très longue.
Voici mon code:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("M7")) Is Nothing Then

Dim i As Integer
For i = 17 To 400
If Cells(8, i) < Cells(7, 13) Then
Cells(8, i).EntireColumn.Hidden = True
Else
Cells(8, i).EntireColumn.Hidden = False
End If
Next i
End If
End Sub


Je souhaiterais pouvoir l'améliorer mais je n'y arrive pas. Je pense notamment à la fonction find sur la plage.

Je vous mets, également le fichier que j'utilise pour faire des essais.

Dans l'attente,
Merci
 

Pièces jointes

  • Qui fait quoi 2015 - 2016 - excel download.xlsm
    48.2 KB · Affichages: 55
Dernière modification par un modérateur:

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Afficher/masquer colonne sur planning selon une date

Bonjour Jerem,

remplace ton code par celui-ci
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Application.Intersect(Target, Range("M7")) Is Nothing Then
Columns("Q:NR").EntireColumn.Hidden = True
Columns([M7] - DateSerial(Year([M7]), 1, 1) + 17).EntireColumn.Hidden = False
Cells(8, [M7] - DateSerial(Year([M7]), 1, 1) + 17).Select
End If
End Sub

à+
Philippe
 

Paf

XLDnaute Barbatruc
Re : Afficher/masquer colonne sur planning selon une date

bonjour jerem512, phlaurent55,

une autre solution

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim i As Integer, DerCol As Integer, MaDate As Range
 DerCol = Cells(8, Columns.Count).End(xlToLeft).Column
 
 If Not Application.Intersect(Target, Range("M7")) Is Nothing Then
        Range(Cells(8, 17), Cells(8, DerCol)).EntireColumn.Hidden = False 'affichage toutes colonnes
        Set MaDate = Range(Cells(8, 17), Cells(8, DerCol)).Find(Target, , , xlWhole)
        If Not MaDate Is Nothing Then
            Range(Cells(8, 17), Cells(8, MaDate.Column - 1)).EntireColumn.Hidden = True
        Else
            MsgBox "Date inconnue"
        End If
 End If
End Sub

A+
 

jerem512

XLDnaute Nouveau
Re : Afficher/masquer colonne sur planning selon une date

Bonjour,

Déjà merci d'avoir répondu.

La formule fonctionne seulement elle n'affiche que la date sélectionné.

J'ai peut être mal précisé mais je voudrais de la date jusqu'à la dernière colonne.

Dans l'attente,
Merci encore
 

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Afficher/masquer colonne sur planning selon une date

Re,

avec ce code:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("M7")) Is Nothing Then
Columns("Q:NR").EntireColumn.Hidden = False
Application.ScreenUpdating = False
For i = 17 To [M7] - DateSerial(Year([M7]), 1, 1) + 16
Columns(i).EntireColumn.Hidden = True
Next i
Application.ScreenUpdating = True
Cells(8, [M7] - DateSerial(Year([M7]), 1, 1) + 17).Select
End If
End Sub

à+
Philippe
 

Discussions similaires

Réponses
17
Affichages
803

Statistiques des forums

Discussions
312 090
Messages
2 085 210
Membres
102 820
dernier inscrit
SIEG68