Bonjour à tous,

Dans le cadre d'un stage, je suis chargé de développer un procédé en VB/VBA qui doit extraire et traiter des informations dans différents fichiers excel existants.

Précision: J'ai appris le VB très rapidement (en une journée), et lorsque je suis bloqué je vais chercher les informations sur le net via divers forums, mais là je suis bloqué sur ce souci sans trouver de solution. Je suis plutôt d'habitude adepte du Java (je suis étudiant, on a surtout insisté sur ce langage) mais on m'a "imposé" VB pour le traitement excel (ce qui semble logique).

Pour le moment, mon souci est de générer la liste des jours ouvrés (chaque date dans une case différente). J'ai recherché pas mal sur le net (dont sur ce forum) pour exécuter des fonctions excel en VBA mais j'ai quelques soucis actuellement. J'ai bien connaissance de la fonction NB.JOURS.OUVRES().

Pour le moment je n'ai pas traité la partie insertion des dates dans les cellules voulues, je pense m'y prendre comme cela:

Une boucle de génération des dates, dès qu'elle est générée, je l'insère à l'aide d'une incrémentation de cellule (il m'a semblé voir que c'était possible)

Voici donc mon code actuel, qui n'insère rien pour le moment, et ne va pas pour le moment utiliser les données des fichiers sources.

Je précise encore que je suis vraiment un débutant en VBA, et que j'ai donc fatalement fait des erreurs grossières qui ne m'ont pas sauté aux yeux. Je précise aussi le type de logiciel utilisé: Excel 2003 standard version française.

Voici le code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
Function genererJoursOuvres(mois As Byte, annee As Integer)
 
    'déclarations des variables
    Dim moisCourant As Byte, semPremierJourMois As Byte, cptJour As Byte
    Dim premierJourMois As Date, dernierJourMois As Date
    Dim nbJour As Integer
    Dim premierJourMoisString As String
 
    'construction d'une date à partir des paramètres mois et annee
    'ici mois +1 pour ensuite l'utiliser pour connaitre le dernier jour du mois:
    'on prend le premier jour du mois précédent puis on enlève un jour
    premierJourMoisString = "01/" & mois + 1 & "/" & annee
 
    'détermination du dernier jour du mois à partir de la date précédente
    dernierJourMois = Format(DateAdd("d", -1, premierJourMoisString), "dd/mm/yyyy")
 
    'détermination de la date du premier jour du mois
    premierJourMoisString = "01/" & mois & "/" & annee
 
    'conversion de la date premierJourMoisString en format date
    premierJourMois = Format(CDbl(CDate(premierJourMoisString)), "dd/mm/yyyy")
 
    'vérification qu'il s'agit bien d'une date
    'If (IsDate(premierJourMois) = False) Then
    '    MsgBox "C'est pas une date. La conversion a échoué."
    'End If
 
    'Variable contenant le nombre de jours dans le mois courrant.
    nbJourMois = (dernierJourMois - premierJourMois) + 1
 
    'Vérification visuelle des informations
    MsgBox "Premier jour du mois: " & premierJourMois & " Dernier jour du mois: " & dernierJourMois
 
    'Compte le nombre de jours ouvrés (lundi => vendredi) sur le mois
    'NE FONCTIONNE PAS, testé avec Formula, avec Application.WorksheetFunction.NB.JOURS.OUVRES()
    NBJoursOuvres = Range("A5").Formula = "=NB.JOURS.OUVRES(" & premierJourMois & "; " & dernierJourMois & ")"
 
    'déclaration d'un compteur
    cptJour = 0
 
    'Boucle servant à déterminer quels jours sont ouvrés;
    'Doit ensuite inscrire ces dates dans un tableau déterminé // pas encore construit
    For i = 1 To Format(dernierJourMois, "dd")
 
        'conversion de la date incrémentée (1er au dernier jour du mois) en numéro série
        'afin de faciliter l'utilisation de JOURSEM et savoir quel jour de la semaine est le jour en cours
        NbJourSem = DateSerial(annee, mois, i)
 
        'tentative d'utilisation de JSEM
        jourSemaine = Application.WorksheetFunctions.JOURSEM(NbJourSem)
 
        'Affichage de jourSemaine dans un but vérificatif durant débuggage
        MsgBox jourSemaine
 
        'switch, voir lorsque le jour en cours est un jour ouvrable
        Select Case jourSemaine
 
            'vérification du jour
            Case 1, 2, 3, 4, 5
 
                'incrémentation de cptJour, qui détermine le nombre de jours ouvrables traités
                'à la fin, cptJour doit être égal à nbJoursOuvres
                cptJour = cptJour + 1
 
                'à terme le code pour insérer la date dans les cases se fera ici
            Case Else
        End Select
 
        'affichage dans un but de débuggage
        MsgBox i
    Next
 
    'affichage dans un but de débuggage
    MsgBox cptJour
End Function