Macro pour filtrer des lignes et masquer des colonnes

Bonsoir,

je souhaite avoir un visuel condensé, mois par mois des lignes contenant un s, sd, re, p, ou r (ensemble des tâches que je dois effectuer) dans le mois choisi.

j’aimerai créer un bouton pour chaque mois et y affecter la macro

exemple sur le bouton 1 (janvier) : les colonnes masquées sont bien celles que je ne veux pas voir, cependant, j’aimerais voir les colonnes F à J, qui de la ligne 6 à 130, contiennent un “s”, “sd”, “re”, “p”, ou “r”, si les cellules de ces lignes sont vides ou si elles contiennent un “/”, je ne souhaite pas les voir.

merci d’avance je joint le fichier

Calendrier 2026 test macro tri.xlsm (855,3 Ko)

Bonjour,

Pour janvier, essaie :

Sub Taches1()
'
' Taches1 Macro
'

'
    Dim C As Range, Tbl As Variant, Arr(4)
    Tbl = [F1:J130]
    [GZ:GZ] = ""
    With Range("GZ5:GZ130")
      .AutoFilter
      '“s”, “sd”, “re”, “p”, ou “r”
      For Each C In [B6:B130]
        For i = 1 To 5
          If IsNumeric(Application.Match(UCase(Tbl(C.Row, i)), Array("S", "SD", "RE", "P", "R"), 0)) Then
            Cells(C.Row, "GZ") = 1
          End If
        Next i
      Next C
      .AutoFilter 1, 1
    End With
    Range("H:BG,BI:FW").EntireColumn.Hidden = True
    Range("H:BG,BI:FW,GB:GB,GG:GQ,GT:GY").EntireColumn.Hidden = True
End Sub

Si c’est correct, je l’adapterai au nombre variable de semaines. Est-ce qu’il y aura un bouton par mois ?

Daniel

Regarde le classeur joint. Il faut ajouter les boutons 7 à 12. La macro à attacher à tous les bouton est “Tache” :

Sub Tache()
'
' Taches1 Macro
'

'
    Dim C As Range, Tbl As Variant, Arr(4), Mois, arrAn As Variant
    'dim Sem as integer
    arrAn = Array("janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre")
    i = Application.Caller
    i = CInt(ActiveSheet.Shapes(i).DrawingObject.Caption)
    Mois = Application.Index(arrAn, i)
    Set Mois = Application.Index([F4:BB4], Application.Match(Mois, [F4:BB4], 0))
    sem = Mois.MergeArea.Count
'    Tbl = [F1:J130]
    Tbl = Cells(1, Mois.Column).Resize(125, sem)
    [GZ:GZ] = ""
    With Range("GZ5:GZ130")
      .AutoFilter
      '“s”, “sd”, “re”, “p”, ou “r”
      For Each C In [B6:B130]
        For i = 1 To sem
          If IsNumeric(Application.Match(UCase(Tbl(C.Row, i)), Array("S", "SD", "RE", "P", "R"), 0)) Then
            Cells(C.Row, "GZ") = 1
          End If
        Next i
      Next C
      .AutoFilter 1, 1
    End With
    Range("H:BG,BI:FW").EntireColumn.Hidden = True
    Range("H:BG,BI:FW,GB:GB,GG:GQ,GT:GY").EntireColumn.Hidden = True
End Sub

Calendrier 2026 test macro tri.xlsm (857,2 Ko)

Daniel

bonsoir merci pour ta réponse, j’ai rajouté les boutons , je leur ai tous affecté la macro tache mais lorsque j’exécute la macro, ça m’affiche ça :

Je te remet le classeur avec tous les boutons pour essayer…

Copie de Calendrier 2026 test macro tri-3.xlsm (855,3 Ko)

Quel bouton ?

Daniel

les boutons 7 à 12 que tu m’as dis de rajouter, correspondant aux mois de juillet à décembre

Oups, désolé :

Sub Tache()
'
' Taches1 Macro
'

'
    Dim C As Range, Tbl As Variant, Arr(4), Mois, arrAn As Variant
    'dim Sem as integer
    arrAn = Array("janvier", "fevrier", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre")
    i = Application.Caller
    i = CInt(ActiveSheet.Shapes(i).DrawingObject.Caption)
    Mois = Application.Index(arrAn, i)
    Set Mois = Application.Index([F4:BB4], Application.Match(Mois, [F4:BB4], 0))
    sem = Mois.MergeArea.Count
'    Tbl = [F1:J130]
    Tbl = Cells(1, Mois.Column).Resize(130, sem)
    [GZ:GZ] = ""
    With Range("GZ5:GZ130")
      .AutoFilter
      'ÒsÓ, ÒsdÓ, ÒreÓ, ÒpÓ, ou ÒrÓ
      For Each C In [B6:B130]
        For i = 1 To sem
          If IsNumeric(Application.Match(UCase(Tbl(C.Row, i)), Array("S", "SD", "RE", "P", "R"), 0)) Then
            Cells(C.Row, "GZ") = 1
          End If
        Next i
      Next C
      .AutoFilter 1, 1
    End With
    Range("H:BG,BI:FW").EntireColumn.Hidden = True
    Range("H:BG,BI:FW,GB:GB,GG:GQ,GT:GY").EntireColumn.Hidden = True
End Sub

Daniel

dois je copier coller ceci à la place de l’ancienne macro tache ?

parce que je viens d’essayer mais ça ne fonctionne pas…

Bonjour,

“parce que je viens d’essayer mais ça ne fonctionne pas…”

Je suis super avancé avec un commentaire pareil ! Qu’est-ce qui “ne fonctionne pas” ??? Est-ce qu’il y a une erreur ? Laquelle ?

Essaie avec le classeur joint :

Copie de Calendrier 2026 test macro tri-3.xlsm (857,5 Ko)

Daniel

Bonjour,

Sur le dernier classeur que tu m’as envoyé, si je clique sur le bouton 1, j’ai ce message qui s’affiche :

Puis en cliquant sur déboguer :

Ça ne fait pas pareil de ton côté ?

Non ! je ne comprends pas…

Voilà ce que j’obtiens :

Daniel

Je ne sais pas pourquoi ça ne marche pas, je n’ai pas les compétences pour arriver à déceler ce qui ne va pas…

tant pis… merci quand même pour ton aide.

On va trouver. Il doit y avoir une petite différence vu que tu es sur Mac.

Essaie comme ça :

Sub Tache()
'
' Taches1 Macro
'

'
    Dim C As Range, Tbl As Variant, Arr(4), Mois, arrAn As Variant
    'dim Sem as integer
    arrAn = Array("janvier", "fevrier", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre")
    i = Application.Caller
    i = CInt(ActiveSheet.Shapes(i).DrawingObject.Caption)
    Mois = Application.Index(arrAn, i)
    Set Mois = Application.Index([F4:BB4], Application.Match(Mois, [F4:BB4], 0))
    sem = Mois.MergeArea.Count
'    Tbl = [F1:J130]
    Tbl = Cells(1, Mois.Column).Resize(130, sem)
    [GZ:GZ] = ""
    With Range("GZ5:GZ130")
      .Select
      .AutoFilter
      For Each C In [B6:B130]
        For i = 1 To sem
          If IsNumeric(Application.Match(UCase(Tbl(C.Row, i)), Array("S", "SD", "RE", "P", "R"), 0)) Then
            Cells(C.Row, "GZ") = 1
          End If
        Next i
      Next C
      .AutoFilter 1, 1
    End With
    Range("H:BG,BI:FW").EntireColumn.Hidden = True
    Range("H:BG,BI:FW,GB:GB,GG:GQ,GT:GY").EntireColumn.Hidden = True
End Sub

Sinon, comme ça :

Sub Tache()
'
' Taches1 Macro
'

'
    Dim C As Range, Tbl As Variant, Arr(4), Mois, arrAn As Variant
    'dim Sem as integer
    arrAn = Array("janvier", "fevrier", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre")
    i = Application.Caller
    i = CInt(ActiveSheet.Shapes(i).DrawingObject.Caption)
    Mois = Application.Index(arrAn, i)
    Set Mois = Application.Index([F4:BB4], Application.Match(Mois, [F4:BB4], 0))
    sem = Mois.MergeArea.Count
'    Tbl = [F1:J130]
    Tbl = Cells(1, Mois.Column).Resize(130, sem)
    [GZ:GZ] = ""
    With Range("GZ5:GZ130")
      ActiveSheet.AutoFilterMode = False
      For Each C In [B6:B130]
        For i = 1 To sem
          If IsNumeric(Application.Match(UCase(Tbl(C.Row, i)), Array("S", "SD", "RE", "P", "R"), 0)) Then
            Cells(C.Row, "GZ") = 1
          End If
        Next i
      Next C
      .AutoFilter 1, 1
    End With
    Range("H:BG,BI:FW").EntireColumn.Hidden = True
    Range("H:BG,BI:FW,GB:GB,GG:GQ,GT:GY").EntireColumn.Hidden = True
End Sub

Daniel

En cherchant sur internet, je viens de trouver un cas similaire fonctionnant sur PC et plantant sur Mac. Le contournement serait :

Sub Tache()
'
' Taches1 Macro
'

'
    Dim C As Range, Tbl As Variant, Arr(4), Mois, arrAn As Variant
    'dim Sem as integer
    arrAn = Array("janvier", "fevrier", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre")
    i = Application.Caller
    i = CInt(ActiveSheet.Shapes(i).DrawingObject.Caption)
    Mois = Application.Index(arrAn, i)
    Set Mois = Application.Index([F4:BB4], Application.Match(Mois, [F4:BB4], 0))
    sem = Mois.MergeArea.Count
'    Tbl = [F1:J130]
    Tbl = Cells(1, Mois.Column).Resize(130, sem)
    [GZ:GZ] = ""
    With Range("GZ5:GZ130")
      .Select
      Selection.AutoFilter
      For Each C In [B6:B130]
        For i = 1 To sem
          If IsNumeric(Application.Match(UCase(Tbl(C.Row, i)), Array("S", "SD", "RE", "P", "R"), 0)) Then
            Cells(C.Row, "GZ") = 1
          End If
        Next i
      Next C
      .AutoFilter 1, 1
    End With
    Range("H:BG,BI:FW").EntireColumn.Hidden = True
    Range("H:BG,BI:FW,GB:GB,GG:GQ,GT:GY").EntireColumn.Hidden = True
End Sub

Daniel

Super on se rapproche du but ! ça bloque pas !!!

Du coup, en cliquant sur le bouton 1, j’obtient un visuel des semaines 1 et 2, penses-tu qu’on peut voir les 5 semaines de janvier en cliquant sur le bouton 1 ?

puis les 4 semaines de février en cliquant sur le bouton 2,

et ainsi de suite jusqu’au bouton 12 ?

Je corrige en début d’après-midi.

Daniel

Essaie :

Sub Tache()
'
' Taches1 Macro
'

'
    Dim C As Range, Tbl As Variant, Arr(4), Mois, arrAn As Variant
    'dim Sem as integer
    arrAn = Array("janvier", "fevrier", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre")
    i = Application.Caller
    i = CInt(ActiveSheet.Shapes(i).DrawingObject.Caption)
    Mois = Application.Index(arrAn, i)
    Set Mois = Application.Index([F4:BB4], Application.Match(Mois, [F4:BB4], 0))
    sem = Mois.MergeArea.Count
'    Tbl = [F1:J130]
    Tbl = Cells(1, Mois.Column).Resize(130, sem)
    [GZ:GZ] = ""
    With Range("GZ5:GZ130")
      .Select
      Selection.AutoFilter
      For Each C In [B6:B130]
        For i = 1 To sem
          If IsNumeric(Application.Match(UCase(Tbl(C.Row, i)), Array("S", "SD", "RE", "P", "R"), 0)) Then
            Cells(C.Row, "GZ") = 1
          End If
        Next i
      Next C
      .AutoFilter 1, 1
    End With
    Range("H:BG,BI:FW").EntireColumn.Hidden = True
    Range("F:BG,BI:FW,GB:GB,GG:GQ,GT:GY").EntireColumn.Hidden = True
    Mois.EntireColumn.Resize(, sem).Hidden = False
    Application.Goto Mois, True
End Sub

Daniel

Daniel, tu es un champion !

Je te remercie grandement, j’ai l’impression que c’est exactement ce qu’il me faut…

Encore un grand merci à toi pour ta persévérance !

Penses tu que l’on puisse rajouter une série de 12 boutons permettant d’effectuer le même travail que précédemment, qui masqueraient aussi les “r” ?

Rêveur que je suis, j’ai essayé de supprimer là où “r” apparaissait dans la macro, mais ça n’a évidemment pas marché…

oups, en nommant les boutons de la même façon (1 à 12 ) en fait j’ai l’impression que ça fonctionne en fait….