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 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219
| Public Sub MiseEnFormeCalPrevExcel(ByVal parNomFichier As String)
'Objets Excel
Dim xlApp As Excel.Application
Dim wbk As Excel.Workbook
Dim sht As Excel.Worksheet
'Définition des plages
Dim objRngTitresSem As Excel.Range
Dim objRngTitres As Excel.Range
'Objets Access
Dim maBase As Database
Dim monRcs As Recordset
'Nombre de lignes de la feuille
Dim lgNbreLignes As Long
Dim strAnneeSemaine As String
Dim lgIndexColCellule As Long
On Error GoTo Err_MiseEnFormeCalPrevExcel
'Initialisations
Set sht = Nothing
Set wbk = Nothing
Set xlApp = Nothing
Set objRngTitres = Nothing
Set objRngTitresSem = Nothing
'Créer un objet Excel
'(ce qui équivaut à démarrer Excel à distance)
Set xlApp = CreateObject("Excel.Application")
'Ouverture du fichier Excel existant
With xlApp
' Rendre Excel visible
.Visible = True
' Créer un nouveau classeur
Set wbk = .Workbooks.Open(parNomFichier)
' Instancier la première feuille du classeur
Set sht = wbk.Worksheets(1)
'Vérifier que la feuille active porte le nom attendu
If sht.Name <> "R_CAL_PREV_SEMAINES" Then
MsgBox "Feuille de classeur Excel du calendrier prévisionnel non trouvée ! ", vbExclamation, "Erreur"
' Libérer les variables objet
Set sht = Nothing
Set wbk = Nothing
Set xlApp = Nothing
MsgBox "Mise en forme du calendrier prévisionnel Excel abandonnée ! ", vbExclamation, "Erreur"
Exit Sub
End If
'première feuille active par défaut
sht.Activate
'Déterminer le nombre de ligne de la feuille
lgNbreLignes = sht.Range("D65536").End(xlUp).row
'Debug.Print "Nombre de lignes du tableau = ", lgNbreLignes
'--------------------------------------------------
'Début des traitements de mise en forme du classeur
'--------------------------------------------------
'Insertion des colonnes de semaines manquantes
'Index de la cellule
lgIndexColCellule = 5
'Lire la table temporaire des années-semaines
Set maBase = CurrentDb()
Set monRcs = maBase.OpenRecordset("T_TEMP_ANNEE_SEMAINE")
If Not monRcs.EOF Then
While Not monRcs.EOF
'lire Annee(Mois à traiter
strAnneeSemaine = monRcs![AnneeSemaine]
Do
'Cas 1 : Intitulé colonne = Année mois
If sht.Cells(1, lgIndexColCellule).Value = strAnneeSemaine Then
'On passe à la colonne suivante et à l'annee mois suivante
lgIndexColCellule = lgIndexColCellule + 1
Exit Do
End If
If sht.Cells(1, lgIndexColCellule).Value > strAnneeSemaine Then
'On doit insérer une colonne à gauche
sht.Columns(lgIndexColCellule).Insert xlToRight
'Intitulé colonne = Année mois
sht.Cells(1, lgIndexColCellule).Value = strAnneeSemaine
'Comme colonne est insérée on doit faire évoluer index
lgIndexColCellule = lgIndexColCellule + 1
'Sortie boucle pour passer année mois suivante
Exit Do
Else
'Cas ou intitulé colonne courante et inférieur à année-mois ou vide
'Si vide
If IsNull(sht.Cells(1, lgIndexColCellule).Value) Or (sht.Cells(1, lgIndexColCellule).Value = "") Then
'Intitulé colonne = Année mois
sht.Cells(1, lgIndexColCellule).Value = strAnneeSemaine
'Comme colonne est insérée on doit faire évoluer index
lgIndexColCellule = lgIndexColCellule + 1
Exit Do
Else
'Si pas vide alors inférieur
'Cas ou valeur inférieure à année mois
lgIndexColCellule = lgIndexColCellule + 1
End If
End If
Loop While lgIndexColCellule < 164
'Année mois suivante
monRcs.MoveNext
Wend
End If
'Fin insertion des colonnes de semaine manquantes
'Zone la premiere ligne : Hauteur de ligne, Police, Gras, centré
sht.Activate
sht.Range("A1:FG1").Select
With Selection
.Interior.ColorIndex = 17
.Interior.Pattern = xlSolid
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlVAlignCenter
.Orientation = xlDownward
.Font.Bold = True
End With
'Zone colonnes planning
sht.Range("E1:FG1").Select
With Selection
.Interior.ColorIndex = 20
.ColumnWidth = 2.57
.Font.Name = "Calibri"
.Font.Size = 10
.Font.Bold = False
End With
'Application de style des titres des quatres premieres colonnes : Hauteur de ligne, Police, Gras, centré
'Application orientation texte vertical pour les colonnes de semaines
sht.Range("A1:D1").Select
With Selection
.Interior.Pattern = xlSolid
.Interior.PatternColorIndex = xlAutomatic
.Interior.ThemeColor = xlThemeColorAccent3
.Interior.TintAndShade = 0.399975585192419
.Interior.PatternTintAndShade = 0
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlVAlignCenter
.Orientation = xlHorizontal
.Font.Bold = True
End With
'Coloration de la Zone des informations des outillages SN
sht.Range("A2:D" & Int(lgNbreLignes)).Select
With Selection
.Interior.Pattern = xlSolid
.Interior.ColorIndex = 35
End With
'Figer les volets permière ligne et colonne 4
'Filtrer automatiquement les données
With ActiveWindow
.SplitColumn = 4
.SplitRow = 1
End With
ActiveWindow.FreezePanes = True
'Filtrer les 4 permières colonnes automatiquement
sht.Range("A:D").Select
Selection.AutoFilter
'Largeur automatique des colonnes
sht.Select
sht.Cells.EntireColumn.AutoFit
'Application de régles de mise en forme conditionnelle pour les colonnes de semaines
sht.Range("E2:FG" & Int(lgNbreLignes)).Select
'Supprime les mises en forme conditionnelles existantes
Selection.FormatConditions.Delete
'Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=NBCAR(SUPPRESPACE(E2))>0"
Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=NBCAR(SUPPRESPACE(E2))>0"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Font
.Color = -16776961
.TintAndShade = 0
End With
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
' Sauvegarder et fermer le classeur
wbk.Save
wbk.Close
' Quitter Excel
.Quit
End With
Exit_MiseEnFormeCalPrevExcel:
' Libérer les variables objet
Set sht = Nothing
Set wbk = Nothing
Set xlApp = Nothing
'Sortie
Exit Sub
Err_MiseEnFormeCalPrevExcel:
'En cas d'erreur, sauvegarde et quitter excel
wbk.Save
wbk.Close
xlApp.Quit
'Signaler erreur
MsgBox "M_CAL_PREV/MiseEnFormeCalPrevExcel()/Erreur " & Err.Number & " " & Err.description, vbCritical, "Erreur"
Resume Exit_MiseEnFormeCalPrevExcel
End Sub |
Partager