Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 Date fin de mois calendrier tableau Excel

jedi0307

XLDnaute Nouveau
Bonjour à tous,

Je cherche une macro pour faire disparaître automatiquement les dates de fin de mois pour les mois de février ainsi que les mois n'ayant que 30 jours.

J'ai essayé celle-ci, mais elle est en erreur :

Sub Masquer_Jour()
Dim Num_Col As Long
For Num_Col = 30 To 32 ' Boucle sur les cellules des jours 29, 30 et 31
If Month(Cells(6, Num_Col)) >= Cells(1, 1) Then
Columns(Num_Col).Hidden = True
Else
Columns(Num_Col).Hidden = False
End If
Next
Range("B6:AF13").ClearContents 'Supprime le contenu dans les cellules
End Sub


Mon calendrier possède un menu déroulant pour les mois et les années à venir, j'y ai inséré les week-end et les jours férié avec affichage automatique en couleur.
Mon seul soucis restant est vraiment dû à l'affichage des jours de fin de mois.

Je vous joint mon fichier Excel.
Merci pour votre aide.
 

Pièces jointes

  • Cheques Repas 2019.xls
    48 KB · Affichages: 13

Santulud

XLDnaute Occasionnel
Bonjour,

J'ai contourné le problème :
si dans la feuille la date dépasse la fin de mois, elle ne s'affiche pas.
ensuite,
La macro cache les colonnes vides du tableau.
 

Pièces jointes

  • Cheques Repas 2019.xls
    49.5 KB · Affichages: 20

Santulud

XLDnaute Occasionnel
Bonjour,
j'ai tous changé

Dans le tableau en ligne 6, pour les jour, j'ai mis une formule pour laisser la case vide si la date dépasse la fin de mois.
Code:
=SIERREUR(SI(AE6+1>$B$4;"";AE6+1);"")

Ensuite seulement interviens la macro pour masquer les colonne
VB:
Private Sub Worksheet_Calculate()
Columns("c:ah").Select                     'On sélectionne tous le tableau
Selection.EntireColumn.Hidden = False       'On annule les filtre précédent, si il y en a

For Each cell In ActiveSheet.Range("AF6:AH6"):  'On fait le test les colonnes pour chaque date du 29-30-31
        If cell.Value = "" Then                 'Si aucune date n'est affiché (masqué par la formule dans le tableau)
            Columns(cell.Column).Select         'Alors on la sélectionne
            Selection.EntireColumn.Hidden = True    'Et on la masque
        End If
    Next cell                                       'On relance le test sur la date suivant
End Sub

Disons que j'ai réparti le travail pour simplifier le code
 

jedi0307

XLDnaute Nouveau
Ok merci à toi pour tes explications, par contre j'ai un autre soucis :

Ce calendrier est destiné à obtenir les prestations des membres du personnel, cependant, j'ai créé un menu déroulant pour enregistrer les prestations journalières de chaque "agent" (voir liste feuille intitulé du tableau).

Le soucis c'est que si j'enregistre par exemple pour un agent une prestation le 03 septembre, celle-ci se reproduit aussi sur tous les autres mois/années (3 octobre, 3 novembre, etc...)

Exemple :
Agent 1 on enregistre un CM (congé maladie) le 03 septembre, CM sera aussi reporté le 03/10, le 03/11, etc...; or chaque mois ça sera des prestations différentes selon l'agent concerné.

Comment peux-t-on éviter cela ?

Merci à vous.

Voici mon tableau ci joint
 

Pièces jointes

  • Prestations Agents.xlsm
    27 KB · Affichages: 11

Santulud

XLDnaute Occasionnel
je vois deux solution :

1- revenir a un format de fichier "basique" avec un onglet par mois => pas besoin de macros ni rien de spécial
2-Faire en sorte que le fichier s'archive en automatique avec le nom de mois correspondant (ex : Prestation Agent - Septembre.xls), et qu'il se remette a zéro à chaque début de mois.
 

Santulud

XLDnaute Occasionnel
Il suffit d'ajouter se petit code au fichier :
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Chemin As String, Fichier As String, MonFichier As String
 
  If ThisWorkbook.Name = "Prestations Agents.xlsm" Then
Chemin = "C:\" 'Entre le chemin de ton Archive
Fichier = "Prestations Agents " & Format(Date, "mm-yyyy") & ".xlsm"
MonFichier = Chemin & Fichier
            ActiveWorkbook.SaveCopyAs Chemin & Fichier
Else
End If
End Sub

Private Sub Workbook_Open()
If Range("c3").Value = "1" Then
Range("d7:ag22").ClearContents
End If
End Sub

J'ai ajouté aussi dans la Feuil1 - C3 le numéro du jour.
A l'ouverture du fichier, il verifie si on est le premier jour du mois, si oui, il vide le calendrier.
Ou sinon on peut mettre un bouton de remise a zéro ?

A la fermeture il enregistre une copie avec mois-année, dans un dossier d'archive (a définir).

Voir fichier en P.J
 

Pièces jointes

  • Prestations Agents.xlsm
    28.8 KB · Affichages: 10

jedi0307

XLDnaute Nouveau
Je viens de tester, en fait dès que j'enregistre des modifs par exemple sur le mois de septembre, il les gardes et pas de soucis.
Une fois le 1er octobre il remet tout à 0 (septembre également) donc je n'ai plus la possibilité d'aller rechercher mes données insérées en septembre.
J'ai défini le chemin d'archive ou il agrde les données du mois précédent mais malheureusement sans avoir le pouvoir de réaliser une éventuelle modif.
Ne sais-t-on pas remettre à 0 le 1er du mois en cours et garder en mémoire les anciennes données insérées ?
Le but étant de retrouver le statut de chaque agent même pour une période précédente.
Merci de ton aide.
 

Discussions similaires

Réponses
2
Affichages
759
Réponses
4
Affichages
989
Réponses
9
Affichages
792
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…