Bonjour,

je galère depuis quelques temps sur un bout de code destiné à formater un fichier Excel généré à partir d'une requête sous Access 2007.
En général au premier passage le code se déroule normalement.
Au deuxième passage, ou lorsque je l'exécute dans la fenêtre d’exécution de VB, j'ai un message d'erreur 462 : Le serveur distant est introuvable ....

Voici mon 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
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
L'erreur se produit sur la ligne 119 au moment du with Selection.

Est-ce un problème de déclaration de variable ?

Merci pour votre aide.