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. bonsoir
    c est vrai que ma capture d ecrann a rien a voir avec ma demande initiale
    cela est une suite a ma demande
    en premier tu mas explique avec précision pour ces 3 colonnes par jour
    mais j aurais aimer avoir une vue mensuelle de ces trois colonnes sur des autres feuilles
    je vais essayer de travailler sur le fichier complet
    et de cette façon on pourrait améliorer le code pour le rendre moins lourd
    donc je te rassure tu n as pas travailler pour rien
    et encore une fois mille fois merci pour taon aide
    grâce a toi je comprends mieux ces codes VBA
    1. Re,

      Ta capture écran n'a rien à voir avec ta demande initiale, la recherche se faisait sur des dates ligne 3 alors que sur ta capture elles sont colonne A
      il s'agissait d'afficher trois colonnes par jour alors que, encore sur ta capture il y en a bien plus et concernent les heures ligne 5 alors que ces heures se trouvaient à l'origine colonne B etc ...

      Quand on espère une réponse adaptée, la demande doit être précise, J'ai l'impression d'avoir travaillé pour rien et encore plus tu ne pourras pas exploiter le code qui ne veut plus rien dire sur ces nouvelles bases.

      1. bonsoir mike waouhhhh super cette astuce un mega merci cela me permet d y voir un peu plus clair
        serait il possible que tu m expliques comment ce tableau mensuel a ete construit avec les 3 ponts
        au dessus on a les heures et a gauche les dates du mois
        je pense que pour faire cela je fais juste des copier coller des dates et des plages horaires
        mais le soucis qui va se poser c est que j aimerais que la cellule en mensuelle soit rouge si la cellule du planning est vide
        un exemple si pour pont 1 du planning la cellule 01/01/2018 est vide alors la cellule du 01/01/2018 de la feuille mensuel de janvier est rouge
        mais si la cellule du 01/01/2018 est remplie alors la cellule de la feuille mensuel 01/01/2018 est verte
        encore merci pour ta patience et ton explication
        http://image.noelshack.com/fichiers/2018/41/5/1539379951-ecran1.jpg
        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. 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,

              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. 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
              2. 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
              3. 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 Raymond
                  voila tu as tout compris tu as mieux explique
                  tu as compris ce que je recherche
                  merci pour ton aide
                  1. Bonjour à tous

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

                    Cdlmnt
                    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. 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. 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
                        2. 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.........??
                        3. 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 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
                          • 1
                          • 2