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. 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. 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
                        • 2