Code vba création tableau avec jours du mois en cours Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
R
Relien33
Membre habitué
Membre habitué
Messages : 75
Inscrit le : 20 janvier 2011
Version d'Excel : 2007

Message par Relien33 » 1 juin 2014, 19:58

Bonjour à tous,

Je suis à la recherche d'un code vba pouvant me permettre de créer un tableau ayant pour en-tête tous les jours ouvrés du mois en cours. Avez vous quelque chose à me proposer?

Bien cordialement.
R
Relien33
Membre habitué
Membre habitué
Messages : 75
Inscrit le : 20 janvier 2011
Version d'Excel : 2007

Message par Relien33 » 1 juin 2014, 22:55

Bonsoir,

En pièce jointe, un exemple pour illustrer ma demande. Dans le tableau, tous les jours ouvrés de Juin sont placés en en-tête. A noter que cette procédure aura pour but de créer des rapports d'activité automatiques c'est donc pour cela que je souhaite passer par vba.

Merci par avance!
PLANNING.xlsx
(9.43 Kio) Téléchargé 32 fois
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 8'999
Appréciations reçues : 337
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 1 juin 2014, 23:52

Bonjour,
Sub J_Ouvres()
    Dim mois As Long, annee As Long, date1 As Date
    Dim fini As Boolean, i As Long, j As Long
    
    mois = 6: annee = 2014
    [A1:W1].ClearContents
    [A1] = CDate("1/" & mois & "/" & annee)
    Do
        i = i + 1
        date1 = (Application.WorkDay_Intl(CDate([A1]), i))
        If Month(date1) = mois Then
            [A1].Offset(, i) = date1
        Else
            fini = True
        End If
    Loop Until fini
End Sub
Le fait que tu aies mis la plage en tableau amène des bizarreries.
Comme j'utilise la fonction SERIE.JOUR.OUVRE.INTL, tu peux facilement ajouter une liste des fériés et y faire référence.

eric
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
R
Relien33
Membre habitué
Membre habitué
Messages : 75
Inscrit le : 20 janvier 2011
Version d'Excel : 2007

Message par Relien33 » 2 juin 2014, 00:04

Merci Eric pour la réponse. Petite coqueterie cependant. Tu mentionnes que A1 sera toujours 01/XX/XX or le 1er du mois n'est pas toujours un jour ouvré comme c'est le cas aujourd'hui d'ailleurs. Comment y remédier? Je me suis également trompé dans mon énoncé, je cherche en effet à énumérer tous les jours OUVRABLES et non OUVRES ce qui change la donne... Toutes mes excuses!
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 8'999
Appréciations reçues : 337
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 2 juin 2014, 08:32

Bonjour,

ce n'est pas une coquetterie, c'est une grossière erreur de ma part.
Qu'entends-tu exactement par ouvrable ? Là tu as du lundi au vendredi.

eric
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
R
Relien33
Membre habitué
Membre habitué
Messages : 75
Inscrit le : 20 janvier 2011
Version d'Excel : 2007

Message par Relien33 » 2 juin 2014, 08:55

Bonjour eric,

J'entends par jours ouvrables, du lundi au samedi puisque j'ai une rotation d'effectif. Une equipe tourne du lundi au vendredi et une autre du mardi au samedi.

Cordialement
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 8'999
Appréciations reçues : 337
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 2 juin 2014, 09:51

Voilà :
Sub test()
    J_Ouvrables 6, 2014
End Sub

Sub J_Ouvrables(mois As Long, annee As Long)
    Dim date1 As Date, fini As Boolean, i As Long
    
    [A1:AA1].ClearContents
    [A1] = (Application.WorkDay_Intl(CDate("1/" & mois & "/" & annee) - 1, 1, 11))
    Do
        i = i + 1
        date1 = Application.WorkDay_Intl(CDate([A1]), i, 11)
        If Month(date1) = mois Then
            [A1].Offset(, i) = date1
        Else
            fini = True
        End If
    Loop Until fini
End Sub
Une précision que j'avais oubliée : ne fonctionne que sur excel 2010 et supérieur.

eric
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
r
rvtoulon
Membre habitué
Membre habitué
Messages : 76
Inscrit le : 21 mai 2013
Version d'Excel : 2007 et 2010

Message par rvtoulon » 2 juin 2014, 10:08

Salut à tous,
une autre approche sur la base du code précédent de Eriic, que je salut:
Sub J_Ouvrable()
    Dim mois As Long, annee As Long, jour1 As Byte, madate As Date
    Dim fini As Boolean, i As Long, j As Long
    
    mois = 6: annee = 2014
    [A1:W1].ClearContents
    
    madate = CDate("1/" & mois & "/" & annee)
    
    'je récupère le num du jour pour une semaine de Lundi à Dimanche
    jour1 = (Application.WorksheetFunction.Weekday(madate, 2))

    i = 1
    
    Do
       
        'si le num du jour est différent de 7 soit dimanche
        If jour1 <> 7 Then
            If Month(madate) = mois Then
                Cells(1, i) = madate
                madate = madate + 1
                jour1 = (Application.WorksheetFunction.Weekday(madate, 2))
                i = i + 1
            
            Else
            fini = True
            
            End If
        Else
         madate = madate + 1
         jour1 = (Application.WorksheetFunction.Weekday(madate, 2))

        End If
    Loop Until fini
End Sub
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 8'999
Appréciations reçues : 337
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 2 juin 2014, 10:36

Bonjour rvtoulon,
une autre approche...
Pas sûr que ce soit ok s'il désire ajouter la gestion des fériés.
eric
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
R
Relien33
Membre habitué
Membre habitué
Messages : 75
Inscrit le : 20 janvier 2011
Version d'Excel : 2007

Message par Relien33 » 2 juin 2014, 10:49

Bonjour Eric,rVtoulon,

La solution d'Eric est parfaite. Merci beaucoup!

Cordialement
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message