Comment rendre invisible ensemble de cellule

Bonjour a tous
j ai un calendrier avec les jours les uns a cote des autres et sous chaque jour 3 colonnes et donc je me retrouve avec 365 colonnes fois 3
je souhaiterais lorsque je sélectionne un jour que les jours a gauche a droite deviennent invisible et donc qu il me reste juste la colonne jour et les 3 sous colonnes visible
merci de l aide

23 réponses

Résumé de la discussion

Un utilisateur souhaite un calendrier Excel avec des jours en colonnes et trois sous-colonnes par jour, et veut masquer automatiquement les colonnes voisines lorsqu’un jour est sélectionné pour n’afficher que les trois sous-colonnes. La proposition principale utilise du code VBA déclenché lors du changement dans la cellule A3, qui masque les colonnes C à APH sauf celles du jour sélectionné et ajuste largeur et format. Le code identifie la date visée et affiche ou masque progressivement les colonnes correspondantes, offrant une vue mensuelle compacte tout en conservant l’accès rapide au jour choisi. Par ailleurs, certains échanges évoquaient des variantes comme l'intégration d'un mini calendrier et la gestion d'affichages mensuels distincts.

Bobot (l’IA à votre service)
  1. Contributeur
    ... sauf, peut-être, par VBA !
    Alors si tu as de la chance, un connaisseur te programmera une macro.
    Mais j'en doute !
    1. Bonjour,

      les cellules invisibles d'aujourd'huis redeviendront visibles demain??
      1. bonjour
        merci a tous pour votre aide
        super cette idée pour le volet a gauche , y aurait il moyen de faire une recherche et d afficher la date lors d une recherche a l aide d un mini calendrier
        pour l instant j ai remplacer le 1,2,3,4 ect ...par des dates
        donc lorsque on clic sur une date du mini calendrier que le jour s affiche a gauche
        pour repondre a f894009 , oui les donnees rentrees sous les dates doivent etre visible si on rappelle la date
        merci de votre aide a tous
        1. Bonjour,

          Je ne sais pas si ça marchera, ça risque d'agir sur les deux parties séparées de la feuille ; à moins que les trois colonnes occupent toute la largeur de la page ce qui rendrait inutile le fractionnement.

          à voir par les spécialistes d'excel, je passe la main.

          Cordialement
      2. Bonjour,
        Vous pouvez mettre votre fichier a dispo avec explications détaillées car se sont des cellules ou des colonnes qui doivent être masquées (invisibles)??
        1. bonjour

          merci pour la réponse
          voici mon début de fichier
          avoir un mini calendrier et que quand je clique sur la date le jour correspondant vienne a l écran , les jours sont place en horizontal sur tout le classeur
          https://www.cjoint.com/c/HJjv5MIVeMu
          1. Bonjour,

            Donc quand vous dites la date du jour, ce n'est pas la date du jour en cour mais une date x d'un mois z.........??
        2. bonjour
          merci pour la reponse
          oui voila une date x d'un mois z
          merci de votre aide
          1. Re,

            Ok, je regarde la chose
        3. Contributeur
          Bonjour flexi2202

          Etant donné que tes explications manquent de clarté, doit-on traduire
          " j ai un calendrier avec les jours les uns a cote des autres et sous chaque jour 3 colonnes et donc je me retrouve avec 365 colonnes fois 3
          je souhaiterais lorsque je sélectionne un jour que les jours a gauche a droite deviennent invisible et donc qu il me reste juste la colonne jour et les 3 sous colonnes visible "
          par " J'ai un tableau avec les jours en ligne 4 sur 15 colonnes, réparties en 3 groupes de 5 colonnes, soit un total de 365*3*5=5475 colonnes. Je souhaiterais que lorsque je sélectionne un jour, seules les 15 colonnes correspondent soient affichées " ?
          1. Contributeur
            (suite)

            Et " avoir un mini calendrier et que quand je clique sur la date le jour correspondant vienne a l écran " signifie qu'il nous faut te fournir un mini-calendrier, en plus de ton immense calendrier de 5000 colonnes ?

            Et où faudrait-il placer ce mini-calendrier :
            Dans une autre feuille, ou plus bas que la ligne 45 ?

            1. Bonjour à tous

              Un petit essai via vba (macro)
              https://www.cjoint.com/c/HJkrAvZCGsB

              Cdlmnt
              1. bonjour Raymond
                voila tu as tout compris tu as mieux explique
                tu as compris ce que je recherche
                merci pour ton aide
                1. bonjour ccm81
                  voila parfait il faudrait juste que quand je clic dans le calendrier s affiche devant moi le jour avec les 15 colonnes
                  je suis en version excel 2016
                  merci pour le fichier
                  1. bonjour
                    oui juste tu as raison
                    j ai la solution tout en poche
                    j aurais juste voulu savoir comment le reproduire d une autre manière sans utiliser de macro
                    merci de l aide et la reponse
                    1. Contributeur
                      Tu as lu mes réponses #1 et #2 ?
                    2. les reponses 1 et 2 ???
                    3. merci pour les liens oui oui j avais vu
                  2. bonsoir
                    oui je trouve cela plutôt assez sympa comme idée
                    pourrait on le faire avec un mini calendrier par exemple ou l on choisi la date grace a la souris
                    merci pour le fichier
                    1. Bonjour,

                      https://www.cjoint.com/c/HJmeLDcpLX7

                      Je te laisse continuer la mise en place - dans l'exemple les colonnes grises restent apparentes ; celles en jaune sont à masquer - ainsi tu auras ton mini calendrier.

                      Je ne saurai trop te conseiller de faire un feuillet par mois - tu n'aurais donc qu'une seule fois la colonne F de feuillet 2 qui servirait pour toute l'année.

                      J'essaye ça dans la journée et j'envoie un exemple.

                      Cordialement
                    2. bonsoir
                      merci beaucoup pour ce fichier
                      mais lorsque je parlais de mini calendrier je pensais a celui de windows pres de l horloge
                      non le feuillet de chaque mois c est pour avoir une vue globale sur les 3 carnets de rdv en mensuel
                      encore mille fois merci
                  3. Re,

                    bien sur le problème peut se traiter par formule, mais bonjour le nombre de formule et la taille du fichier pour traiter 365 jours, sans parler de lenteur, déjà pour traiter 7 jours, 160 KO.
                    A la taille du fichier qui semble être un agenda, viendra certainement s'ajouter les saisis sur 50 lignes et 1100 colonnes
                    Comme le soulignait l'ami Raymond que je salue, ce problème ne peut se traiter que par VBA
                    une solution a été donnée sur la discussion initiale
                    https://forums.commentcamarche.net/forum/affich-35580305-soucis-avec-les-mises-en-forme-conditionnelle

                    avec ce classeur 36 KO
                    https://www.cjoint.com/c/HJljA3A53lj

                    et ce simple code
                    Private Sub Worksheet_Change(ByVal Target As Range)
                    If Not Intersect(Target, Range("B3")) Is Nothing Then
                    On Error Resume Next
                    Application.ScreenUpdating = False
                    ActiveWindow.ScrollColumn = 3
                    ActiveWindow.ScrollColumn = (Target.Value * 1 - DateSerial(Year([B3]), 1, 1) * 1) * 3 + 3
                    Application.ScreenUpdating = True
                    End If
                    End Sub

                    En VBA il est possible d'écrire un code pour afficher que les colonnes souhaitées, de dimensionner les colonnes affichées pour à peine 50 KO avec ce code qui peut être couplé à une liste de validation ou un bouton

                    Private Sub CommandButton1_Click()
                    Dim CellAdress, target, c As Range
                    Dim i As Integer
                    On Error Resume Next
                    Application.ScreenUpdating = False
                    Columns("C:APH").EntireColumn.Hidden = False
                    Columns("C:APH").ColumnWidth = 10
                    Range("B3:APH3").NumberFormat = "General"
                    With ActiveSheet.Range("C3:APH3")
                    Set c = .Find([B3], LookIn:=xlValues)
                    If Not c Is Nothing Then
                    CellAdress = c.Address
                    End If
                    End With
                    Range(CellAdress).Select
                    For i = 2 To 1100
                    If Cells(3, i) <> [B3] Then
                    Cells(3, i).EntireColumn.Hidden = True
                    Else
                    Cells(3, i).EntireColumn.Hidden = False
                    End If
                    Next i
                    ActiveCell.Offset(-1, 0).Select
                    Range(ActiveCell, ActiveCell.Offset(0, 2)).Select
                    Selection.EntireColumn.Hidden = False
                    Selection.ColumnWidth = 30
                    Range("C3:APH3").NumberFormat = "dddd dd/mm/yyyy"
                    [B3].NumberFormat = "dd/mm/yyyy"
                    Application.ScreenUpdating = True
                    End Sub

                    1. re mike
                      un mega grand merci pour ton aide
                      je laisse donc tomber l histoire de passer autrement que par du VBA pour réaliser ce genre de code
                      je m y connais un tout petit peu en excel mais le VBA pour moi c est nouveau
                      et j y suis un peu perdu ,surtout si un jour je suis amené a modifier le fichier pour une raison quelconque
                      y a t il moyen d exécuter ce code VBA ligne par ligne afin de comprendre ce qu il fait
                      ou alors faut il passer par la case apprentissage
                      merci de l aide
                      1. Re,

                        récupère une possibilité de fichier 170 KO piloter par VBA que tu peux voir soit en clic droit sur l'onglet de feuille et Visualiser le code ou touche Alt et touche F11
                        ou tu trouveras ce code annoté simplifié et annoté pour comprendre ce que chaque ligne fait
                        le code s'active dès que tu sélectionnes une date cellule A3

                        Option Explicit

                        Private Sub Worksheet_Change(ByVal target As Range)
                        Dim CellAdress, c As Range ' ----------------------------- déclaration des variables
                        Dim i As Integer
                        If Not Intersect(target, Range("A3")) Is Nothing Then ' -- active le code au changement des valeurts cellule A3
                        On Error Resume Next '------------------------------------ gestion des erreurs, évite le blocage du code
                        Application.ScreenUpdating = False ' ----------------- suspend le rafraichissement écran, accélérer le code
                        Columns("C:APH").EntireColumn.Hidden = False ' --- masque les colonnes de C à APH
                        Columns("C:APH").ColumnWidth = 10 ' -------------- réduit la largeur des colonnes à 10
                        Range("A3:APH3").NumberFormat = "General" ' ------ change le format de la plage date en format standard
                        With ActiveSheet.Range("C3:APH3") ' ---------- boucle sur la plage pour rechercher la valeur critère en A3
                        Set c = .Find([A3], LookIn:=xlValues)
                        If Not c Is Nothing Then
                        CellAdress = c.Address ' ------------- identifie l'adresse de la valeur trouvée
                        End If
                        End With ' ------------------------------------ arrête la boucle de recherche
                        Range(CellAdress).Select ' -------------------- sélectionne la valeur trouvée
                        For i = 3 To 1100 ' ------------------------------- boucle sur les colonnes de 3 à 1100 soit de C à APH
                        If Cells(3, i) <> [A3] Then ' ----------------- ligne 3 les cellules ne contenant pas la valeur
                        Cells(3, i).EntireColumn.Hidden = True ' -- les colonnes sont masquées
                        Else ' ---------------------------------------- sinon si la valeur est trouvée
                        Cells(3, i).EntireColumn.Hidden = False ' - la colonne est affichée
                        End If ' -------------------------------------- fin de la condition
                        Next i ' ------------------------------------------ fin du bouclage ligne 3 des colonnes C à APH
                        ActiveCell.Offset(-1, 0).Select ' --------------------- sort de la cellule fusionnée
                        Range(ActiveCell, ActiveCell.Offset(0, 2)).Select ' --- sélectionne les trois cellules correspondates au jour trouvé
                        Selection.EntireColumn.Hidden = False ' --------------- affiche les trois colonnes concernées
                        Selection.ColumnWidth = 40 ' -------------------------- redimentionne la largeur des colonnes concernées à 40
                        Range("C3:APH3").NumberFormat = "dddd dd/mm/yyyy" ' --- rétabli l'affichage "jour semaine jour/mois/année" plage C3:APH3
                        [A3].NumberFormat = "dd/mm/yyyy" ' -------------------- rétabli l'affichage de la cellule critère A3 jour/mois/année
                        Application.ScreenUpdating = True ' ----------------------- rétabli le rafraichissement écran
                        End If ' -------------------------------------------------- fin de la condition
                        End Sub ' ------------------------------------------------- fin de la procédure

                        https://www.cjoint.com/c/HJmoF6VpLKj
                        • 1
                        • 2