XL pour MAC [RESOLU]Cacher ou afficher colonnes, sauf colonne selectionné

Dudy

XLDnaute Nouveau
Bonjour
depuis le temps que je suis inscrit sur le forum, celle ci est ma première discussion, car j'essaie de bien chercher sul forum et je trouve toujours une réponse
je tiens a vous remerciez car vous faite un travail impeccable... bref

voici mon petite problème, j'ai retrouvé un fichier(Agenda) d'une vielle discussion, que j'ai modernisé et j'aimerais bien l'utiliser
j'ai un calendrier a gauche et les jours a droite, en cliquant dans le calendrier, j'active le jours dans l'agenda a droite en changeant la couleur de la cellule active

j'aimerais, si est possible, cacher toutes les autres colonnes, sauf la colonne active,
voici la macro que j'ai trouvé sul forum et adapté

VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Jour$, col&, Rng As Range
    If IsDate(Target) Then
    Jour = Day(Target)

    With Sheets(MonthName(Month(Target)))
    .Activate

    Set Rng = .Range("M3:AQ3")
    col = Application.Match(Application.Index(Rng, 1, Jour), Rng, 0)
    .Cells(3, col + 12).Select

    With [M3:AQ3]
        .Interior.Color = RGB(248, 249, 250)
        .Font.ColorIndex = xlAutomatic 
         If Intersect(ActiveCell, .Cells) Is Nothing Then Exit Sub
    End With

        With ActiveCell
            .Interior.Color = RGB(76, 97, 112)
            .Font.Color = RGB(255, 255, 255)
        End With

    End With

    End If

End Sub

voici mon fichier en PJ, si jamais je travail avec
Microsoft Excel pour Mac Version 16.82
je vous remercie pour votre patience
 

Pièces jointes

  • Model-01-Test.xlsm
    27.6 KB · Affichages: 4

Nain porte quoi

XLDnaute Junior
Hello

je propose
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Dim Jour$, col&, Rng As Range
    
    If IsDate(Target) Then
        Jour = Day(Target)
    
       With Sheets(MonthName(Month(Target)))
'            .Activate
        
            Set Rng = .Range("M3:AQ3")
            col = Application.Match(Application.Index(Rng, 1, Jour), Rng, 0)
'            .Cells(3, col + 12).Select

    Columns("M:AQ").EntireColumn.Hidden = True
    Columns(col + 12).EntireColumn.Hidden = False
    
            With [M3:AQ3]
                .Interior.Color = RGB(248, 249, 250)
                .Font.ColorIndex = xlAutomatic 'couleur police noire
'                 If Intersect(ActiveCell, .Cells) Is Nothing Then Exit Sub
            End With
        
            With .Cells(3, col + 12)
                .Interior.Color = RGB(76, 97, 112)
                .Font.Color = RGB(255, 255, 255)
            End With
    
        End With

    End If

End Sub

A adapter mais vous devriez éviter les Select dans une procédure Worksheet_SelectionChange car c'est réentrant
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous :),

Encore un peu plus à la bourre ;)...

J'ai fait un code minimaliste.
  • puisqu'on masque toutes les colonnes sauf l'unique colonne qui correspond à la date choisie, inutile d'aller changer les couleurs de la seule colonne affichée!
  • si dans le calendrier à gauche, on sélectionne une cellule vide, alors on affiche toutes les colonnes
  • j'ai supposé que les feuilles des mois étaient les feuilles les plus à gauche (soit les feuilles d'index 1 à 12). C'est modifiable via le code grâce aux deux constantes minIndex et maxIndex
  • le code est un peu commenté
  • j'ai changé la formule de la cellule M3 qui devient identique sur toute les feuilles : =MIN(B5:I9)
Le code est à un seul endroit : le module associé à ThisWorkbook.

Le code dans ThisWorkbook :
VB:
Const minIndex = 1, maxIndex = 12   'index des feuilles pour lesquelles exécuter la procédure

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim ncol As Long
   If Sh.Index < minIndex Or Sh.Index > maxIndex Then Exit Sub    ' feuille non concernée, on quitte
   If Target.Count > 1 Then Exit Sub         ' la sélection comprend plusieurs cellules, on quitte
   If Intersect(Target, Range("b5:h9")) Is Nothing Then Exit Sub  ' la sélection n'est pas dans le calendrier de gauche
   Application.ScreenUpdating = False
   ' recherche de la colonne comportant le jour sélectionné (0 si le jour n'existe pas)
   ' le Ncol est compté à partir de la colonne M (ncol relatif)
   ncol = Application.IfError(Application.Match(Target.Value2, Range("m3:aq3"), 0), 0)
   If ncol = 0 Or Not IsDate(Target) Then          ' jour non trouvé ou la sélection est vide
      Range("m3:aq3").EntireColumn.Hidden = False  ' on affiche toutes les colonnes
   Else     ' le jour sélectionné a été trouvé
      ncol = ncol + Range("m3").Column - 1   ' calculer le numéro absolu de la colonne
      Range("m3:aq3").EntireColumn.Hidden = True   'masquage de toutes les colonnes du calendrier
      Columns(ncol).Hidden = False     ' affichage de la colonne du jour sélectionné
   End If
End Sub
 

Pièces jointes

  • Dudy- Afficher date calendrier- v1.xlsm
    53.5 KB · Affichages: 5
Dernière édition:

Dudy

XLDnaute Nouveau
Bonjour
encore un petit aide si est possible
comment adapter les codes (un des trois me vont bien je l'adapterai après) si je voulais ajouter 3 colonnes entre les jours, pour entrer des autres données?
je ne sais pas si je dois créer une nouvelle discussion
merci de votre aide
 

Pièces jointes

  • Model-01-Test.xlsm
    30.5 KB · Affichages: 4

Discussions similaires

Statistiques des forums

Discussions
312 206
Messages
2 086 220
Membres
103 158
dernier inscrit
laufin