[débutant] Aide génération de dates
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:
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 |