Masquer colonne en fonction de 2 dates

joel31

XLDnaute Junior
Bonjour le forum,

J'ai un petit soucis avec ma macro, qui fonctionne, mais je cherche à la simplifier, car je pense qu'en l'état, elle met un peu plus de temps à aboutir. Bon c'est vrai qu'il y a 4028 colonnes ! (Calendrier sur 10 ans )
Je souhaite masquer des colonnes en fonction d'une plage de dates D1 et E1

Code:
 Sub Masquer()
Application.ScreenUpdating = False
Dim Cel As Range
Cells.EntireColumn.Hidden = False
For Each Cel In Range("J2:EXX2")
    If Cel < Range("D1").Value Then Cel.Columns.Hidden = True
     If Cel > Range("E1").Value Then Cel.Columns.Hidden = True
    Next Cel
Application.ScreenUpdating = True
End Sub

En mettant 2 fois ' If Cell ', il me semble que cela lui fait 2 passages, donc plus long, (1,5s) mais je souhaiterais l'intégrer dans un worsheet change qui risque de se déclencher souvent Changement des dates en D1 et E1)
Alors comment simplifier le code

Code:
 If Cel < Range("D1").Value Then Cel.Columns.Hidden = True
     If Cel > Range("E1").Value Then Cel.Columns.Hidden = True

Merci pour vos retours

Très cordialement
 
Dernière édition:

CPk

XLDnaute Impliqué
Re : Masquer colonne en fonction de 2 dates

Bonjour, au lieu de boucler sur toutes les cellules vous pouvez aussi :
-calculer l'écart de mois entre E1 et D1.
-chercher le mois de de D1 dans votre plage 4048 colonnes et masquer le nombre de colonne (avec un offset) défini par l'écart de mois.

Non ?

Ca évite de boucler sur 4000 colonnes...
 

thebenoit59

XLDnaute Accro
Re : Masquer colonne en fonction de 2 dates

Bonsoir Joel31, CPk et le forum.
L'idée de CPk est très bien.
Sinon, si tu souhaites éviter un double If tu peux faire :

Code:
 Sub Masquer()
Application.ScreenUpdating = False
Dim Cel As Range
Cells.EntireColumn.Hidden = False
For Each Cel In Range("J2:EXX2")
    If Cel < Range("D1").Value Or Cel > Range("E1") Then Cel.Columns.Hidden = True
    Next Cel
Application.ScreenUpdating = True
End Sub

Tu peux aussi déclarer tes valeurs D1 et E1 pour que la valeur soit conservée en mémoire, tu devrais y gagner un peu

Si tu le mets dans Worksheet_Change, ce que tu peux faire, afin d'éviter un calcul quand tu modifies en D1 puis un nouveau avec E1, tu peux ouvrir une MsgBox Yes No pour demander le calcul, ça te permets de modifier les deux dates avec un seul calcul :).
 
Dernière édition:

joel31

XLDnaute Junior
Re : Masquer colonne en fonction de 2 dates

Bonsoir CPk,

Merci pour ta réponse.

Ben je suis quand même obligé de boucler 2 fois sur mes colonnes.
1 fois pour trouver le mois (D1) puis masquer avec un offset puis encore de masquer ce qui est supérieur à E1 en bouclant pour trouver la date max...
Ou alors j'ai raté un truc ?

Cordialement
 

joel31

XLDnaute Junior
Re : Masquer colonne en fonction de 2 dates

Bonsoir Thebenoit59 et tout Bruxelle !
sans oublier CPk,

Je mettais And au lieu de Or !!!

Je te remercie pour ta proposition qui me permet de gagner en rapidité.
Bien aussi l'idée du MsgBox, mais le temps de valider, c'est le temps qu'il faut pour masquer les colonnes !

Je vais voir comment je m'organise, et surtout essayer d'écrire la solution de CPk pour voir si le délais est encore réduit, mais j'ai un peu de mal à imaginer ça :confused:

Excellent week-end à vous.
 

thebenoit59

XLDnaute Accro
Re : Masquer colonne en fonction de 2 dates

J'ai repris l'idée de CPk sans utiliser l'offset.
Etant donné que ton fichier est constitué avec des jours, j'ai calculé la différence de jours en E1 (ce que tu peux faire en vba si tu ne veux pas l'afficher)
J'ai déterminer la plage de colonnes des dates (a).

En premier temps je masque toutes les colonnes de (a), et puis je n'affiche seulement celles comprises entre tes deux dates.

Je pense qu'il y a encore mieux à faire, application.match dans a pour trouver la date, mais j'ai du mal avec les recherches de dates ... :confused::confused::confused:
 

Pièces jointes

  • Test.xlsm
    249.5 KB · Affichages: 45
  • Test.xlsm
    249.5 KB · Affichages: 53

joel31

XLDnaute Junior
Re : Masquer colonne en fonction de 2 dates

Bonjour Thebenoit59, et vive la Belgique ! :cool:
Bonjour CPk, et le fil,

Ta solution fonctionne très bien, et plus rapide que la mienne reprise de l'idée de CPk, que je remercie également au passage.:rolleyes:

Merci à toi et excellente fin de week-end
Très cordialement
Joël
 

CPk

XLDnaute Impliqué
Re : Masquer colonne en fonction de 2 dates

Bonjour benoit et joël. Merci pour se retour.
J'ai regardé brièvement votre fichier, pourquoi ne pas utiliser des softs gratuits pour éditer vos gantt ?
:confused:
 
Dernière modification par un modérateur:

joel31

XLDnaute Junior
Re : Masquer colonne en fonction de 2 dates

Bonjour à tous,

Ben à quoi servirait cet excellent forum, si c'était pour aller voir ailleurs !!!:p

Plus sérieusement, quoi que, pourquoi se servir d'un autre soft, même gratuit, alors qu'Excel est universel et sous exploité, et avec des possibilités énormes ?
Et où serait le fun, hein ??? :mad:

Bonne fin de week-end à tous.
 

joel31

XLDnaute Junior
Re : Masquer colonne en fonction de 2 dates

Mais bien sûr !!!

C'est quoi les jalons critiques ????:confused:

D'abord j'essaie de comprendre ce que je fais avec Excel, et c'est pas facile, , alors les chemins critiques !

Les chemins de traverse de Cabrel, Oui, la critique, je suis ouvert, mais un mix des 2, Houlala !!!

Mais étant curieux de nature, je vais aller voir ce que c'est...

Très cordialement-.

PS: C'est bien ceux qui bossent aussi le dimanche :cool::cool:
 

CPk

XLDnaute Impliqué
Re : Masquer colonne en fonction de 2 dates

Bonjour Joël ! Ravi de vous avoir permis d'en apprendre un peu plus qu'au départ.
une explication assez simpliste du jalon : https://fr.wikipedia.org/wiki/Jalon_(gestion_de_projet)

Après comme a dit un (célèbre) chanteur (enfin...si on peu appeler ça comme ça) "le plus important au poker ce ne sont pas les cartes mais ce que vous en faite". Patrick si tu nous regardes...rendez-vous dans dix ans place des grands hommes ! Mais ne m'attends pas si je n'y suis pas...
 

Discussions similaires

Statistiques des forums

Discussions
312 023
Messages
2 084 716
Membres
102 637
dernier inscrit
TOTO33000