XL 2021 Comment masquer des colonnes sur un planning en changeant les mois

Hamid84

XLDnaute Nouveau
Bonjour à tous,
depuis des années j'utilise Excel pour faire des plannings. J'ai des notions sur les fonctions de base mais j'aimerai améliorer mon fichier pour automatiser certaines taches.
La plus grande difficulté que je rencontre est celle de masquer les colonnes des jours qui ne font pas partie du mois en cours.
J'ai joint un fichier pour que vous compreniez mieux. J'ai essayé pleins de solutions mais aucune ne me satisfait complètement.
Après d'innombrables recherches, il s'avère que seul un code VBA serait capable de résoudre mon problème.
Donc si quelqu'un a une solution pour masquer automatiquement les colonnes AI, AJ et AK quand le mois de Février est sélectionné en E3 ou seulement masquer AJ et AK pour les années bissextiles; et bien sûr masquer également la colonne AK pour les mois à 30 jours... je suis preneur.
Merci à tous pour l'aide que vous pourriez m'apporter car je suis grand débutant en VBA et j'ai testé maintes et maintes codes piochés à gauche et à droite mais rien n'y fait.
Bonne journée et bon courage à ceux qui travaillent en ce jour férié
 

Pièces jointes

  • Planning Annuel.xlsx
    29.2 KB · Affichages: 13
Solution
Sur la feuille "Feuil1" un planning avec les 12 mois
il ne reste plus qu'a faire le calcul des CP, Heures travaillées et heures à payer dans la macro...
Si mois ou année vide vu des 12 mois...
A+ François

Hamid84

XLDnaute Nouveau
Je vois plusieurs possibilités dont :
1- Tu actives le filtrage du tableau de droite et tu filtre manuellement la colonne "Heures Payées".
2- Tu fais la même chose mais par une macro que tu peux ainsi appeler quand tu veux.



Je reprends ta macro de #18 :
VB:
Sub MasquerLignes()
'
Dim i As Integer

    For i = 10 To 25
        Rows(i).Hidden = (Cells(i, 35).Value = 0)
    Next i

End Sub

Tu appelles cette macro au moment où tu cliques sur un mois.
Si tu appelles la macro après avoir rempli le tableau avec les données du mois cliqué, ça devrait
Salut, ça j'arrive à le faire mais ce que je recherche c'est que cela se fasse automatiquement sans que j'ai à appeler à chaque fois la macro
 

Pièces jointes

  • Plannings Sites v1.xlsm
    220.8 KB · Affichages: 4

fanch55

XLDnaute Barbatruc
Proposition adaptée au dernier classeur :
VB:
Option Explicit

Sub Clic_Mois(Optional x As Byte)
'
Dim Tp0 As Single, i As Byte, lft As Single, NomSh As String

    Application.ScreenUpdating = False
 
    With Sheets("Plannings")
        Tp0 = .Rows(6).Top - 2
        lft = 2 + .Columns(5).Left
        For i = 1 To 12
            With .Shapes("Ms" & i)
                .Height = 20
                .Top = Tp0 - .Height
                .Left = lft
                .Width = 62.5
                .Fill.ForeColor.RGB = &HDEC4B0
                .TextFrame2.TextRange.Characters.Font.Fill.ForeColor.RGB = &HF0F0F0
                lft = lft + .Width + 1.5
            End With
        Next i
        NomSh = IIf(Left(Application.Caller, 2) = "Ms", Application.Caller, "Ms" & x)
        With .Shapes(NomSh)
            .Height = 30
            .Top = Tp0 - .Height
            .Fill.ForeColor.RGB = &HED9564
            .TextFrame2.TextRange.Characters.Font.Fill.ForeColor.RGB = 0
        End With
        If Left(Application.Caller, 2) = "Ms" Then
            .Range("A4").Value = Replace(Application.Caller, "Ms", "")
            Dim Col As Range, Rw As Range, LastRow As Long, Trow As Integer
            Trow = 9 ' ligne des jours du mois
            ' masquage colonnes
            For Each Col In Columns("AE:AG").Columns
                Col.Hidden = Col.Rows(Trow) = ""
            Next
'            ' masquage lignes
            Rows(Trow + 1 & ":" & Rows.Count).Hidden = False
            LastRow = Cells(Rows.Count, "B").End(xlUp).Row
            If LastRow >= Trow + 1 Then
                For Each Rw In Rows(Trow + 1 & ":" & LastRow).Rows
                    Rw.Hidden = Rw.Columns("AI") = 0
                Next
            End If
        End If
    End With

End Sub
 

Hamid84

XLDnaute Nouveau
Proposition adaptée au dernier classeur :
VB:
Option Explicit

Sub Clic_Mois(Optional x As Byte)
'
Dim Tp0 As Single, i As Byte, lft As Single, NomSh As String

    Application.ScreenUpdating = False
 
    With Sheets("Plannings")
        Tp0 = .Rows(6).Top - 2
        lft = 2 + .Columns(5).Left
        For i = 1 To 12
            With .Shapes("Ms" & i)
                .Height = 20
                .Top = Tp0 - .Height
                .Left = lft
                .Width = 62.5
                .Fill.ForeColor.RGB = &HDEC4B0
                .TextFrame2.TextRange.Characters.Font.Fill.ForeColor.RGB = &HF0F0F0
                lft = lft + .Width + 1.5
            End With
        Next i
        NomSh = IIf(Left(Application.Caller, 2) = "Ms", Application.Caller, "Ms" & x)
        With .Shapes(NomSh)
            .Height = 30
            .Top = Tp0 - .Height
            .Fill.ForeColor.RGB = &HED9564
            .TextFrame2.TextRange.Characters.Font.Fill.ForeColor.RGB = 0
        End With
        If Left(Application.Caller, 2) = "Ms" Then
            .Range("A4").Value = Replace(Application.Caller, "Ms", "")
            Dim Col As Range, Rw As Range, LastRow As Long, Trow As Integer
            Trow = 9 ' ligne des jours du mois
            ' masquage colonnes
            For Each Col In Columns("AE:AG").Columns
                Col.Hidden = Col.Rows(Trow) = ""
            Next
'            ' masquage lignes
            Rows(Trow + 1 & ":" & Rows.Count).Hidden = False
            LastRow = Cells(Rows.Count, "B").End(xlUp).Row
            If LastRow >= Trow + 1 Then
                For Each Rw In Rows(Trow + 1 & ":" & LastRow).Rows
                    Rw.Hidden = Rw.Columns("AI") = 0
                Next
            End If
        End If
    End With

End Sub
Bonjour fanch55 et un grand merci pour avoir finaliser ma recherche de 2 mois...
C'est exactement ce que je voulais obtenir
Merci à fanfan38 (François ) de m'avoir mis sur la bonne voie, merci à TooFatBoy de s'être donné autant de mal et merci à toi fanch55 d'avoir concrétisé ce projet.
Même si vous avez tous faits un travail formidable et je vous en remercie encore, le mien ne fait que commencer. Le résultat final est parfait mais il me reste à comprendre comment on en est arrivé là
 

Hamid84

XLDnaute Nouveau
Je ne vois pas comment tu veux masquer les lignes sans appeler la macro. 🤔

Qu'est-ce qui ne convient pas dans le classeur de #28 ?
Salut TooFatBoy,
j'ai compris qu'il est nécessaire d'appeler la macro mais je voulais qu'elle s'appelle toute seule. Chose faite avec la macro de fanche55. Comme cela mes colonnes fin de mois ainsi que mes lignes heures travaillées se masquent toute seules quand je change le mois ou l'année ( cf macro dans message précédent #33 )
Encore merci pour ton aide et à bientôt pour de nouvelles "aventures", youpi !!!!
 

TooFatBoy

XLDnaute Barbatruc
Oui, j'avais bien compris ce que tu voulais. 😉

Mais tu ne réponds pas à ma question : "Qu'est-ce qui ne convient pas dans le classeur de #28 ?".
Les lignes devraient se masquer quand tu cliques sur le mois. Est-ce que ça ne fonctionne pas sur ton PC ?

C'est juste que je cherche à comprendre où je me suis tromper.
 

Hamid84

XLDnaute Nouveau
Oui, j'avais bien compris ce que tu voulais. 😉

Mais tu ne réponds pas à ma question : "Qu'est-ce qui ne convient pas dans le classeur de #28 ?".
Les lignes devraient se masquer quand tu cliques sur le mois. Est-ce que ça ne fonctionne pas sur ton PC ?

C'est juste que je cherche à comprendre où je me suis tromper.
Non ça ne fonctionnait pas. Elles ne se masquaient pas automatiquement.
Mais peut-être que c'est à cause de conflit de macros dans mon fichier. Je les ai toutes supprimées pour ne garder que celle de fanch55 qui est un condensé de toutes les autres.
En tout cas maintenant cela fonctionne, du moins jusqu'à ce que je décide encore une fois de faire des améliorations.
Je suppose que les macros ne fonctionnent plus si on insère des colonnes ou des lignes ??? A moins de les modifier, évidemment ( pb de références ??? )
Tu vois, il me reste encore beaucoup de chemin à parcourir en VBA... c'est motivant, intéressant et même excitant.
Bonne journée et merci pour tout car je sais qu'avec de la patience et beaucoup de volonté, on peut faire énormement
 

TooFatBoy

XLDnaute Barbatruc
J'ai testé ta version @TooFatBoy , elle fonctionne,
mais comme tu avais pris un des classeur du début, aucunes lignes d'agent ne s'affichent car personne n'est payée dans ce classeur ... ;)
Non, j'avais au contraire pris le dernier fichier qu'il avait posté, c'est-à-dire celui de #12.

En tout cas, merci pour ton test et ta réponse. 👍
 
Dernière édition:

Discussions similaires

Réponses
2
Affichages
451
Réponses
14
Affichages
1 K

Statistiques des forums

Discussions
315 083
Messages
2 116 043
Membres
112 641
dernier inscrit
chab77