Au cas où ça pourrait servir à quelqu'un, voici la macro que j'ai réalisée pour remplir mon calendrier.
Au préalable, il faut créer un tableau de 18 colonnes et 32 lignes et les mettre en forme, en paysage et en fonte Verdana 10 :
- remplir les noms des mois
- ajuster la taille des colonnes : 0.6cm, 0.9cm, et 3.3cm pour chaque mois
- en bas de la 1ère colonne de chaque mois, mettre le numéro du dernier jour : 30 sur l'avant dernière ligne de la 1ère colonne septembre, 31 sur la dernière ligne de la 1ère colonne d'octobre, ...etc
- ajuster les variables dans la macro :
Ici, on commençait le calendrier en septembre, donc x=0.
On démarre au 1er septembre, donc ligne 1 : y=1 (y=0, ce sont les noms des mois)
Il est possible de ne remplir le calendrier qu'à partir du
10 du
4ème mois (du 5ème, en fait, vu que ça commence à 0), par exemple :
x =
4x3 et y=10
Indiquer le nom du jour. Ici, septembre commence un vendredi, donc : jour=4 (0=lundi, 6=dimanche)
J'ai d'autres paramètres liés à mes besoins pour ce calendrier, qui indique les lieux pour les prochaines soirées jeux de mon association.
Code : Tout sélectionner
REM ***** BASIC *****
REM USAGE :
REM - le tableau doit s'appeler calendrier.
REM - chaque mois comporte 3 colonnes (0.6cm, 0.9cm, 3.3cm)
REM - Il faut mettre le dernier numéro de jour en bas de chaque colonne : 30 ou 31 (28 ou 29 pour février)
REM - Il faut initialiser x, y et jour :
REM x = 0 pour commencer au premier mois, x=3 pour le 2ème mois, x=3(n-1) pour le mois n
REM y = 1 pour commencer au premier jour du mois
REM jour = 0 si le premier jour est un lundi, 6 pour un dimanche
REM
REM Raccourci clavier : MAJ + F7
REM Style à mettre sur les soirée jeux : SoireeJeux
REM Style à mettre sur les vacances scolaires : Vacances
REM Vérifier que Contenu de tableau est toujours en fonte Verdana
sub Main
rem cellule en cours
Dim cellule, page As Object
Dim txt As string
dim document as Object
dim dispatcher as Object
rem Premiere case :
Dim x,y, jour As Integer
Dim jours(0 To 6) As String
rem Compter les lundis
Dim nbLundi As Integer
Dim finMois As Boolean
jours = Array("Lun","Mar","Mer","Jeu","Ven","Sam","Dim")
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
page = ThisComponent.TextTables.getByName("calendrier")
REM DONNER LES COORDONNEES DE LA PREMIERE CASE A REMPLIR AVEC DES NOMS DE JOURS
x=0 rem On commence en septembre (première colonne)
y=1 rem Remplir à partir du 1er du mois
jour = 4 rem septembre 2023 commence un vendredi
nbLundi = 0 rem Compter les lundis chaque mois afin d'insérer la soirée jeux en salle des fêtes (2ème lundi)
finMois = false rem S'active quand on remplit le dernier jour du mois (seul jour qui est rempli manuellement)
rem Parcourir les 6 mois
do while (x<18)
rem Parcourir tout le mois
do while (y< 32)
rem la cellule contenant le numero du jour
cellule = page.getCellByPosition(x,y)
txt = cellule.String
If (txt<>"") Then
rem Ceci est le dernier jour du mois :il y a un nombre dans le texte. Il faut passer au mois suivant (x+1) dès qu'on aura traité ce dernier jour.
finMois = true
End if
rem Le mois n'est pas encore complet. Continuer de nommer les jours.
rem Numero du jour (date)
cellule.String = y
rem la cellule contenant le nom du jour (semaine)
cellule = page.getCellByPosition(x+1,y)
cellule.String = jours(jour)
rem Compter les lundis
If (jour=0) Then
nbLundi = nbLundi+1
If (nbLundi = 2) Then
rem C'est le 2ème lundi du mois : soiree jeux salle M/ Koehl
cellule = page.getCellByPosition(x+2,y)
cellule.String = "Salle Koehl"
End if
End If
rem Est-on mardi ?
If (jour=1) Then
rem Oui => soiree jeux salle LCL
cellule = page.getCellByPosition(x+2,y)
cellule.String = "Salle LCL"
End If
If finMois Then
y = 32
End If
rem jour suivant
y = y+1
jour = (jour+1) Mod 7
Loop
y = 1
x = x+3
nbLundi = 0
finMois = false
Loop
end Sub