Masquer Et Demasquer Des Colonnes En VBA Sur Excel Selon La Date Home » Code Vba Masquer Colonne » Masquer Et Demasquer Des Colonnes En VBA Sur Excel Selon La Date Maybe your like Code Vba Pour Comparer Deux Feuilles Excel Code Vba Pour Comparer Deux Fichiers Excel Code Vba Pour Créer Un Fichier Excel Code Vba Pour Créer Un Tableau Code Vba Pour Enregistrer Une Feuille Excel En Pdf Chargement Masquer et demasquer des colonnes en VBA sur Excel selon la date Logiciel & apps Programmation papet85 Juin 6, 2008, 5:14 1 Bonjour a tous Je voudrais : Masquer ou démasquer certaines colonnes dans une feuille en VBA selon le nombre de semaines écoulées depuis le 1er janvier. Par exemple si nous sommes semaine 27 par exemple, ne laisser visible sur la feuille que les colonnes 27 et 28 ? Est-ce possible? Merci d’avance aux doués qui voudront bien m’aider a réaliser ce code. Edité le 08/06/2008 à 13:54 gcc Juin 6, 2008, 9:18 2 C’est faisable par macro, soit à l’ouverture du classeur, soit en mettant dans la feuille un bouton destiné à cet effet. Dans les deux cas, il faudra écrire une macro (en VBA), et le problème est qu’il n’existe pas (à ma connaissance) de fonction VBA retournant le numéro de la semaine. Par contre, il existe une fonction excel pour le faire. Donc une solution simple pourrait être celle-là : choisir une cellule de la feuille. pour l’exemple, on va dire A1, mais ce peut être n’impote quelle autre, même dans une autre feuille, il suffit d’adapter la macro y mettre la formule =NO.SEMAINE(AUJOURDHUI()) dans la macro servant à masquer, mettre simplement la ligne range(cells(1,1), cells(1,range(« A1 »))).entirecolumn.hidden=true mettre la macro en auto exec à l’ouverture du classeur ou créer sur la feuille un bouton pour la lancer Edit: Pour démasquer columns(« A:BZ »).hidden=false Edité le 06/06/2008 à 21:21 papet85 Juin 7, 2008, 4:27 3 Merci gcc de t’être penché sur mon problème. Finalement j’ai opté pour une autre solution. Je voulais afficher dans chaque feuille la période en cours (du 26 au 25) et la période suivante. je suis passé par le nombre de jours écoulés depuis la dernière période de l’année précédente que j’ai divisé par 31 jours. Tout cela me parait fonctionner parfaitement bien. mon code me parait un peu lourd et manque d’élégance, on pourrait sans doute l’améliorer. Pour information, chaque période fait 6 colonnes de largeur, et l’année commence Colonne « B » et se termine colonne « CA ». Voici le code que j’ai écrit, en changeant la date horloge du PC , on peut vérifier que toutes les feuilles affichent bien seulement les deux périodes voulues selon la date du jour. Le plus difficile étant de convertir la valeur de la colonne en string, mais j’ai facilement trouvé la petite macro sur internet Private Sub Worksheet_Activate() ’ On n’affiche que les deux mois en cours Dim DateFinPrec, i As Long, x As Long, s As String, lettrecol As String 'nombre de jour écoulés depuis le 25 decembre 2007 DateFinPrec = DateSerial(2007, 12, 26) nbjour = -DateDiff("d", Now, DateFinPrec) 'on affiche toutes les colonnes Range(Columns("B"), Columns("CA")).EntireColumn.Hidden = False 'calcul des colonnes à masquer avant les deux périodes colamasquer = Int(nbjour / 31 * 6) ' Autant de fois qu'il y a de périodes de 31 jours écoulées on ajoute 6 colonnes 'on converti la valeur de la dernière colonne a masquer en string Numerocol = colamasquer For i = 6 To 0 Step -1 x = (26 ^ (i + 1) - 1) / 25 - 1 If Numerocol > x Then s = s & Chr(((Numerocol - x - 1) \ 26 ^ i) Mod 26 + 65) End If Next i lettrecol = s 'on masque avant les deux mois en cours Range(Columns("B"), Columns(lettrecol)).EntireColumn.Hidden = True ' on remet la variable a vide s = "" ' et on recalcule ou recommencer a masquer Numerocol = colamasquer + 13 For i = 6 To 0 Step -1 x = (26 ^ (i + 1) - 1) / 25 - 1 If Numerocol > x Then s = s & Chr(((Numerocol - x - 1) \ 26 ^ i) Mod 26 + 65) End If Next i lettrecol = s ' On masque a partir de cette colonne jusqu'a la fin du fichier Range(Columns(lettrecol), Columns("CA")).EntireColumn.Hidden = True Range("A1").Select End Sub Une proposition de simplification ou écriture plus élégante de ce code serais très sympa. Mais ma question est toutefois résolue. Edité le 07/06/2008 à 16:45 gcc Juin 7, 2008, 8:17 4 Si j’ai bien compris, tes données évoluent mois par mois et non semaine par semaine, et il y a 6 colonnes pour chaque mois. Egalement, tu travailles sur 13 mois, puisque le tableau s’arrête en janvier. je n’ai pas testé, mais le coup du 31, ça me laisse dubitatif, je ne suis pas sûr que les jours en bordure de période (24,25,27) soient toujours traités dans leur bonne période. Sinon, ta méthode chr(x)+64 pour obtenir la lettre en fonction de la valeur numérique est bonne (c’est chr(x)+48 pour convertir un chiffre sous forme de chaine), mais tu peux faire autrement, en utilisant cells à la place de Range, ou travaillant avec les offsets. Pour DateFinPrec, tu seras obligé de le modifier manuellement en fin d’année ; Tu peux peut être mettre DateFinPrec = DateSerial(year(now) -1, 12, 26) Ca ne marchera pas entre le 26/12 et le 01/01, mais bon … sinon, si tu veux un code un peu léger, je peux te proposer ce qui suit : Tant qu’à faire d’utiliser DateDiff, autant lui demander de retourner des mois plutôt que des jours (DateDiff(« m »,…) Le code devient Dim today As Date, currentmonth As Integer, coloffset As Integer ’ démasquer toutes les cellules Range(« B:CA »).EntireColumn.Hidden = False 'provisoire pour la mise au point : plutôt que de changer l’heure du PC, on met la date dans la 1e cellule de la feuille il suffira ensuite de remplacer par today=now today = DateValue(Range(« A1 »)) currentmonth = DateDiff(« m », DateSerial(Year(today) - 1, 12, 26), today) If Day(today) > 25 Then currentmonth = currentmonth + 1 End If ’ calcul du nombre de colonnes à masquer à gauche; -1 car on ne compte pas la colonne B coloffset = 6 * (currentmonth - 1) - 1 If coloffset > 0 Then Range(« B1 », Range(« B1 »).Offset(0, coloffset)).EntireColumn.Hidden = True End If ’ masquage des colonnes de droite coloffset = 6 * (12 - currentmonth) - 1 If coloffset > 0 Then Range(« CA1 », Range(« CA1 »).Offset(0, -coloffset)).EntireColumn.Hidden = True End If papet85 Juin 8, 2008, 12:20 5 Merci gcc pour ce code effectivement plus léger et bien plus élégant ,qui fonctionne parfaitement. Sans vouloir abuser, comment dois-je modifier le contrôle If Day(Today)>25 pour que le changement de masque ne se fasse qu’au 10 du mois suivant et non le 26 de la période courante. en effet certaines informations sont encore susceptibles d’êtres vues ou modifiées jusqu’à cette date ou elles sont définitivement figées. Hors sujet … gcc = j’ai cessé? Ou coincidens d’initiales??? Pure curiosité… merci pour la qualité et la rapidité de tes conseils Cordialement Edité le 08/06/2008 à 13:59 papet85 Juin 8, 2008, 1:38 6 Finalement poser une question n’empêche pas de chercher. J’ai trouvé la modification a faire: Private Sub Worksheet_Activate() Dim today As Date, currentmonth As Integer, coloffset As Integer today = Now currentmonth = DateDiff(« m », DateSerial(Year(today) - 1, 12, 26), today) - 1 If Day(today) > 9 Then currentmonth = currentmonth + 1 ’ démasquer toutes les cellules Range(« B:CA »).EntireColumn.Hidden = False ’ calcul du nombre de colonnes à masquer à gauche; coloffset = 6 * (currentmonth - 1) - 1 If coloffset > 0 Then Range(« B1 », Range(« B1 »).Offset(0, coloffset)).EntireColumn.Hidden = True ’ masquage des colonnes de droite coloffset = 6 * (12 - currentmonth) - 1 If coloffset > 0 Then Range(« CA1 », Range(« CA1 »).Offset(0, -coloffset)).EntireColumn.Hidden = True End Sub Merci encore pour ton aide très appréciable. Cordialement gcc Juin 8, 2008, 8:24 7 :jap: [hors_sujet] GCC rien que de très prosaïque C’est G comme groupe, compte créé à l’origine pour faire prendre aux stagiaires la (bonne) habitude de chercher un peu par eux mêmes avant de faire le siège de mon bureau.[/hors_sujet] ACTUS TESTS GUIDES TUTOS BONS PLANS TÉLÉCHARGER COMPARER Tag » Code Vba Masquer Colonne Masquer Colonne En VBA | Excel-Downloads Macro VBA Pour Afficher Et Masquer Les Colonnes Dans Microsoft Excel Masquer Afficher Colonnes Par Vba [Résolu] - CCM Macro Pour Masquer Simultanément Plusieurs Colonnes Colonnes D'Excel : Comment Les Afficher Ou Les Masquer - YouTube Masquage Et Affichage Des Colonnes - Excel - Microsoft Docs Afficher Ou Masquer Toutes Les Lignes / Colonnes - Automate Excel Afficher Et Masquer Des Colonnes Dans Excel à L'aide De Vba Macros Et VBA Excel : Masquer Des Colonnes Masquer Des Colonnes Sous Conditions - VBA - Forum Formule Excel Comment Masquer Des Colonnes Sur Plusieurs Feuilles Dans Un ... Comment Masquer Plusieurs Lignes Ou Colonnes Vides Dans Excel à ... Xl 2k Vba, Masquer Des Colonnes Non Contigues, Array? Comment Utiliser VBA Pour Masquer Des Colonnes