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: 12
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
Bonjour et merci TooFatBoy, ton code fonctionne nickel.
Serait-il possible d'avoir un autre code sur le même principe mais applicable aux lignes dont le total heures travaillées est égal à zéro ? A savoir que les infos sont extraites à partir d'autres onglets, donc le total change en meme temps que le mois. Je ne peux te joindre le fichier complet car il est trop volumineux mais si tu as besoin de + d'infos, demande moi
Bonne journée
 

Hamid84

XLDnaute Nouveau
J'ai essayé ce code qui fonctionne mais je suis pbligé de lancer la macro à chaque fois que je change de mois. L'idéal serait que cela se fasse automatiquement sans intervention de ma part...

Sub MasquerLignes()

Dim i As Integer

For i = 10 To 25
If Cells(i, 35).Value = 0 Then
Rows(i).Hidden = True
Else
Rows(i).Hidden = False
End If
Next i

End Sub
 

TooFatBoy

XLDnaute Barbatruc
oui je sais que ça marche à chaque fois que j'appelle la Macro... mais ce que j'aimerai c'est que ces lignes se masquent ou démasquent automatiquement.
Ce serait top !!!
Normalement il suffit d'appeler la macro au bon moment. 😉

J'avoue que je n'ai pas exactement compris ce que tu veux faire donc pour l'instant je ne peux t'aider plus, mais je regarderais ton fichier ce soir et j'espère que là je pourrais te donner une proposition.
 

Hamid84

XLDnaute Nouveau
Pour faire simple je souhaiterai le meme type de code que celui que tu m'as fait pour les colonnes mais qui concernerait les lignes . Si un agent n'a pas travaillé un mois ( voir total d'heures qui est reporté en colonne 35 face à son nom ), la ligne sur laquelle il se trouve se masque automatiquement
j'espere que j'ai été plus clair comme ça
Dans tous les cas, merci de ton aide et passe une agréable soirée
 

TooFatBoy

XLDnaute Barbatruc
Serait-il possible de masquer de la même maniere les lignes dont le résultat dans colonne Heures Payées est égal à zéro ?
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 le faire. ;)
 

Pièces jointes

  • Plannings-Sites_(TooFatBoy-v2).xlsm
    45.1 KB · Affichages: 2
Dernière édition:

fanch55

XLDnaute Barbatruc
Salut à tous,
Pas trop suivi mais au vu de la demande et du classeur fourni en #14,
en combinant les propositions, on arrive au code suivant :

VB:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rw As Range, LastRow As Long, Col As Range
    Select Case True
        Case Target.Count > 1:  'rien
        Case Target.Column <> 5: 'rien
        Case Target.Row < 2 Or Target.Row > 3: 'rien
        Case Else
            ' masquage colonnes
            For Each Col In Columns("Ai:Ak").Columns
                Col.Hidden = Month(Cells(8, Col.Column).Value) <> Month(Range("G8").Value)
            Next
            ' masquage lignes
            Rows("10:" & Rows.Count).Hidden = False
            LastRow = Cells(Rows.Count, "E").End(xlUp).Row
            If LastRow >= 10 Then
                For Each Rw In Rows("10:" & LastRow).Rows
                    Rw.Hidden = Cells(Rw.Row, "AN") = ""
                Next
            End If
    End Select
End Sub
 

Hamid84

XLDnaute Nouveau
Bonjour à tous,
oui j'aime bien comprendre le pourquoi du comment. Mais là je t'avoue que je galère grave pour essayer de saisir la logique du code VBA. Voici en pièce jointe le fichier allégé car je ne peut t'envoyer le complet pour plusieurs raisons. D'abord il contient des infos persos et aussi il est trop lourd ( presque 3Mo)...
Le masquage des colonnes fonctionne nickel, il ne me reste plus qu'à trouver une solution pour masquer les lignes des agents qui n'ont pas travaillés sur ces sites le mois désigné. Ca a l'air plus compliqué que pour les colonnes
 

Pièces jointes

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

Discussions similaires

Réponses
2
Affichages
164
Réponses
14
Affichages
734

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 183
dernier inscrit
karelhu35