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

VBA : 1ere et dernière date du mois (ouvrés) [RESOLU]

Imer2007

XLDnaute Occasionnel
Bonjour à tous,

Je sèche actuellement sur un truc.
Dans un classeur, j'ai une colonne dans laquelle j'ai inscrit tous les jours de l'année 2012 (uniquement les jours ouvrés donc sans les samedi/dimanche et jours fériés).

Je viens de créer un userform dans lequel une combobox (liste déroulante qui s'appelle select_jour) récupère tous ces jours (via rowsource).

Je souhaiterais pouvoir activer deux cases à cocher sur ce userform :
1- première case à cocher si la date sélectionnée est le 1er jour ouvré du mois
2- deuxième case à cocher si la date sélectionnée correspond au dernier lundi du mois.

J'ai besoin de vos lumières parce que là, je sèche totalement !

J'ai déjà une partie plus 'facile', ou des sauvegardes sont actives le lundi et le jeudi :

Code:
Private Sub select_jour_Change()
' conversion pour afficher sous la forme jour date mois année, ex : lundi 2 janvier 2012
select_jour.Value = Format(select_jour.Value, "dddd d mmmm yyyy")

' splitte la variable pour n'avoir que le jour, ex : lundi
decoupe = Split(select_jour.Value, " ")
' récupération du nom du jour
jour = decoupe(0)
If jour = "lundi" Then
' sauvegardes activées le lundi
    coche_sauvegarde_hebdo.Enabled = True
    coche_sauvegarde_mensuelle.Enabled = True
    coche_rniam.Enabled = True
Else
    coche_sauvegarde_hebdo.Enabled = False
    coche_sauvegarde_mensuelle.Enabled = False
    coche_rniam.Enabled = False
End If
If jour = "jeudi" Then
' sauvegarde intranet active le jeudi uniquement
    coche_intranet.Enabled = True
Else
    coche_intranet.Enabled = False
End If
End Sub
 
Dernière édition:

KenDev

XLDnaute Impliqué
Re : VBA : 1ere et dernière date du mois (ouvrés)

Bonjour Imer,

Dans mon code rien... Par contre tu peux ajouter
Code:
Private Sub UserForm_Initialize()
    select_jour = Format(Date, "dddd d mmmm yyyy")
End Sub

Cordialement

KD
 

Imer2007

XLDnaute Occasionnel
Re : VBA : 1ere et dernière date du mois (ouvrés)

Re,

J'ai suivi ton indication mais j'obtiens une erreur VB.
Erreur de compilation:
Membres de méthode ou de données introuvable.
Ci joint le fichier.
 

Pièces jointes

  • travaux-1.xls
    68.5 KB · Affichages: 58

Imer2007

XLDnaute Occasionnel
Re : VBA : 1ere et dernière date du mois (ouvrés)

Je viens de tilter... La date du jour c'est maintenant (27 juillet 2011).
Mon calendrier démarre au 1er janvier 2012.

La date ne faisant pas partie de ce calendrier, l'erreur ne viendrait-elle pas de là finalement ?
 

KenDev

XLDnaute Impliqué
Re : VBA : 1ere et dernière date du mois (ouvrés)

Re,

Non, ça passe chez moi... Tu as omis de préciser que tu as modifié ton userform et que le combobox sel_jour n'existe plus... Tous les codes précédents sont à reprendre.... Cordialement

KD
 

Imer2007

XLDnaute Occasionnel
Re : VBA : 1ere et dernière date du mois (ouvrés)

Bon je dois avoir de la merde dans les yeux lol parce que ma date de jour s'affiche dans un textbox appelé sel_jour (j'ai fais la modif), mais non ca me met toujours le message d'erreur VB.
 

Imer2007

XLDnaute Occasionnel
Re : VBA : 1ere et dernière date du mois (ouvrés)

J'ai fais une modification et là ca marche (en tout cas pour aujourd'hui ^^)

Code:
Private Sub sel_jour_Change()
Dim Ligne As Long

' splitte la variable pour n'avoir que le jour
decoupe = Split(sel_jour.Value, " ")
' récupération du nom du jour
jour = decoupe(0)
If jour = "lundi" Then
' RNIAM et sauvegardes activées le lundi
    coche_sauvegarde_hebdo.Enabled = True
    coche_sauvegarde_mensuelle.Enabled = True
    coche_rniam.Enabled = True
Else
    coche_sauvegarde_hebdo.Enabled = False
    coche_sauvegarde_mensuelle.Enabled = False
    coche_rniam.Enabled = False
End If

If jour = "jeudi" Then
' sauvegarde intranet active le jeudi uniquement
    coche_intranet.Enabled = True
Else
    coche_intranet.Enabled = False
End If

' partie 1er jour du mois
' par défaut Omnivista et imprimantes sont décochés
coche_omnivista.Enabled = False
coche_imprimantes.Enabled = False
Sheets("Calendrier").Activate
If sel_jour.Value <> 0 Then
    Ligne = Recherche(sel_jour.Text, 1)
    'si le jour précédent le jour sélectionné est inférieur à celui-ci
    'et si le jour suivant le jour sélectionné est supérieur à celui-ci
    ' c'est qu'on est en début de mois
    If Val(decoupe(1)) < Day(Worksheets("Calendrier").Cells(Ligne + 1, 1)) And Val(decoupe(1)) < Day(Worksheets("Calendrier").Cells(Ligne - 1, 1)) Then
        coche_omnivista.Enabled = True
        coche_imprimantes.Enabled = True
    End If
Else
    coche_omnivista.Enabled = True
    coche_imprimantes.Enabled = True
End If
' fin partie 1er jour du mois

' partie dernier lundi du mois
Set rg = Worksheets("Calendrier").Cells(Ligne + 2, 1)
coche_sauvegarde_mensuelle.Enabled = False
If WorksheetFunction.Weekday(rg) = 2 Then
    Select Case Month(rg)
        Case 1, 3, 5, 7, 8, 10, 12
            If Day(rg) > 24 Then
                coche_sauvegarde_mensuelle.Enabled = True
            End If
        Case 4, 6, 9, 11
            If Day(rg) > 23 Then
                coche_sauvegarde_mensuelle.Enabled = True
            End If
        Case 2
            If Year(rg) Mod 4 = 0 Then
                If Day(rg) > 22 Then
                    coche_sauvegarde_mensuelle.Enabled = True
                End If
            Else
                If Day(rg) > 21 Then
                    coche_sauvegarde_mensuelle.Enabled = True
                End If
            End If
    End Select
End If
End Sub
 

Imer2007

XLDnaute Occasionnel
Re : VBA : 1ere et dernière date du mois (ouvrés)

Bonjour,

Je viens de tester aujourd'hui mon code et ca a l'air de fonctionner.

Bon, c'est pas forcément terrible mais ca a le mérite de marcher ! ^^

Merci encore pour vos aides !
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…