IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Erreur 462 sur du VBA Excel une fois sur deux [AC-2007]


Sujet :

VBA Access

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    610
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 610
    Points : 213
    Points
    213
    Par défaut Erreur 462 sur du VBA Excel une fois sur deux
    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.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    610
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 610
    Points : 213
    Points
    213
    Par défaut
    Précision sur mon problème :

    En fait l'erreur se produit sur le premier bloc "with Selection".
    Si je remplace le bloc situé ligne 119 par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    sht.Range("A1:FG1").Interior.ColorIndex = 17
    sht.Range("A1:FG1").Interior.Pattern = xlSolid
    sht.Range("A1:FG1").HorizontalAlignment = xlCenter
    sht.Range("A1:FG1").VerticalAlignment = xlVAlignCenter
    sht.Range("A1:FG1").Orientation = xlDownward
    sht.Range("A1:FG1").Font.Bold = True
    alors l'erreur interviendra sur le bloc With Selection suivant (ligne 129).

    cela doit provenir donc de l'initialisation de la variable sht.

    Maintenant j'ai donc modifié tous les blocs with selection et ajouté une référence directe à l'objet sht.

    Mais j'ai une erreur qui subsiste sur cette partie de 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
    '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(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
    L'erreur intervient sur le select ou la ligne suivante. Ce n'est plus une erreur 462 mais une erreur 91 "Variable objet non définie ( Erreur 91 )"

    Si vous pouviez m'éclairer !

  3. #3
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,

    En automation il faut des expression explicites.
    Selection n'est pas explicite car on ne sait pas à quel objet parent il fait référence.

    Tu t'en es rendu compte en replaçant With Selection par quelque chose de plus explicite.
    Le principe pour être explicite est de commencer une expression par une de tes variables objets (xlApp, wbk, sht).

    J'ai remanié ton code et il semble bien fonctionner chez moi:
    Code vba : 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
    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 xlRg As Excel.Range
        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
         ' Rendre Excel visible
         xlApp.Visible = True
     
         ' Créer un nouveau classeur
         Set wbk = xlApp.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
             wbk.Close
             Set wbk = Nothing
             xlApp.Quit
             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
         monRcs.Close
     
         'Zone la premiere ligne : Hauteur de ligne, Police, Gras, centré
         Set xlRg = sht.Range("A1:FG1")
         xlRg.Interior.ColorIndex = 17
         xlRg.Interior.Pattern = xlSolid
         xlRg.HorizontalAlignment = xlCenter
         xlRg.VerticalAlignment = xlVAlignCenter
         xlRg.Orientation = xlDownward
         xlRg.Font.Bold = True
     
         'Zone colonnes planning
         Set xlRg = sht.Range("E1:FG1")
         xlRg.Interior.ColorIndex = 20
         xlRg.ColumnWidth = 2.57
         xlRg.Font.Name = "Calibri"
         xlRg.Font.Size = 10
         xlRg.Font.Bold = False
     
         'Application de style des titres des quatres premieres colonnes : Hauteur de ligne, Police, Gras, centré
         'Application orientation texte vertical pour les colonnes de semaines
         Set xlRg = sht.Range("A1:D1")
         xlRg.Interior.Pattern = xlSolid
         xlRg.Interior.PatternColorIndex = xlAutomatic
         xlRg.Interior.ThemeColor = xlThemeColorAccent3
         xlRg.Interior.TintAndShade = 0.399975585192419
         xlRg.Interior.PatternTintAndShade = 0
         xlRg.HorizontalAlignment = xlCenter
         xlRg.VerticalAlignment = xlVAlignCenter
         xlRg.Orientation = xlHorizontal
         xlRg.Font.Bold = True
     
         'Coloration de la Zone des informations des outillages SN
         With sht.Range("A2:D" & Int(lgNbreLignes))
             .Interior.Pattern = xlSolid
             .Interior.ColorIndex = 35
         End With
     
        'Figer les volets permière ligne et colonne 4
         'Filtrer automatiquement les données
         With xlApp.ActiveWindow
             .SplitColumn = 4
             .SplitRow = 1
             .FreezePanes = True
         End With
     
         'Filtrer les 4 permières colonnes automatiquement
         sht.Range("A:D").AutoFilter
     
         'Largeur automatique des colonnes
         sht.Cells.EntireColumn.AutoFit
     
         'Application de régles de mise en forme conditionnelle pour les colonnes de semaines
         'Supprime les mises en forme conditionnelles existantes
         Set xlRg = sht.Range("E2:FG" & Int(lgNbreLignes))
         xlRg.FormatConditions.Delete
     
         'xlRg.FormatConditions.Add Type:=xlExpression, Formula1:="=NBCAR(SUPPRESPACE(E2))>0"
         xlRg.FormatConditions.Add Type:=xlExpression, Formula1:="=NBCAR(SUPPRESPACE(E2))>0"
         xlRg.FormatConditions(xlRg.FormatConditions.Count).SetFirstPriority
         With xlRg.FormatConditions(1).Font
             .Color = -16776961
             .TintAndShade = 0
         End With
         With xlRg.FormatConditions(1).Interior
             .PatternColorIndex = xlAutomatic
             .Color = 255
             .TintAndShade = 0
         End With
         xlRg.FormatConditions(1).StopIfTrue = False
     
         ' Sauvegarder et fermer le classeur
         wbk.Save
         wbk.Close
     
         ' Quitter Excel
         xlApp.Quit
     
     
    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
        Resume
    End Sub
    Pour faciliter l'écriture du code je passe parfois par une variable intermédiaire xlRg (Excel.Range).
    J'ai laissé quelques bloc With ... End With pour montrer que ça fonctionne avec des expressions explicites.

    A+

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    610
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 610
    Points : 213
    Points
    213
    Par défaut
    Bonjour,

    Merci beaucoup pour ta réponse qui effectivement m'a résolu mon problème d'erreurs 91 et 462.

    J'ai cependant un dernier phénomène, un peu bizarre, concernant la partie de mon code qui définit la règle de mise en forme conditionnelle.
    Je souhaite colorer les cellules de la plage "E2:FGxxxx" en rouge lorsque celles-ci contiennent une valeur.

    Normalement la règle à mettre en place pour ces cellules et la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xlRg.FormatConditions.Add Type:=xlExpression, Formula1:="=NBCAR(SUPPRESPACE(E2))>0"
    Mais je me retrouve dans le classeur finale avec la règle i-dessous ce qui induit un décalage sur les cellules colorées par rapport à celles qui contiennent un valeur :

    =NBCAR(SUPPRESPACE(I3))>0
    Je pensai que le fait de figer les volets à la première ligne et au 4 premières colonnes pouvait avoir une influence ce décalage de la mise en forme conditionnelle mais apparemment ce n'est pas le cas.


    Note Importante : Avant quand j'avais implémenté le code suivant, cela fonctionnait au premier coup, mais cela plantait les fois suivantes. D'ou la correction ci-dessus. Mais le fichier final était correct du point de vue de la mise en forme conditionnelle !!!

    'Application de règles de mise en forme conditionnelle pour les colonnes de semaines
    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
    Bon finalement en remplaçant le "E2" par "A1" cela résout mon problème.

    Une petite explication cependant ?

  5. #5
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    Je ne sais pas expliquer pourquoi il y a un décalage, uniquement du au fait que le formatage conditionnel est créé par code.
    Peut-être est-ce lié au fait que l'on passe par une variable objet de type Range au lieu du membre Selection ?

    As-tu déjà essayé ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
         xlRg.FormatConditions.Add xlNoBlanksCondition
    ... à la place de ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
         xlRg.FormatConditions.Add Type:=xlExpression, Formula1:="=NBCAR(SUPPRESPACE(E2))>0"
    A+

  6. #6
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bon j'ai trouvé la logique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
         'Application de régles de mise en forme conditionnelle pour les colonnes de semaines
         'Supprime les mises en forme conditionnelles existantes
         Set xlRg = sht.Range("$E$2:$FG" & Int(lgNbreLignes))
         xlRg.FormatConditions.Delete
     
         ' Pour Formula1, il faut que la cellule active soit le coin supérieur gauche
         ' de la plage de cellules à laquelle on va appliquer le format conditionnel.
         xlRg.Offset(0, 0).Activate
         xlRg.FormatConditions.Add Type:=xlExpression, Formula1:="=NBCAR(SUPPRESPACE(E2))>0"
    Il faut que la cellule active soit le coin supérieur gauche de la plage de cellules à laquelle on va appliquer la mise en forme conditionnelle.
    C'est ce qui se passe, de manière indirecte, quand on fait un Select.

    A+

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    610
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 610
    Points : 213
    Points
    213
    Par défaut
    Merci LedZeppII pour ta recherche et ta réponse.

    Cela me parait effectivement cohérent.
    J'ai encore beaucoup de choses à découvrir sur la programmation Excel !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] Import depuis excel Erreur 462 une fois sur 2
    Par prendel dans le forum Access
    Réponses: 2
    Dernier message: 28/07/2014, 14h13
  2. Erreur 462 une fois sur deux
    Par claude21 dans le forum VBA Access
    Réponses: 5
    Dernier message: 05/11/2012, 15h30
  3. [VBA]Exécuter une tache sur chaque ligne d'une table
    Par Tierisa dans le forum VBA Access
    Réponses: 1
    Dernier message: 13/04/2007, 16h53
  4. Erreur ASP : le test qui marche une fois sur 2 !
    Par Ryo_san dans le forum ASP
    Réponses: 2
    Dernier message: 04/07/2006, 09h47
  5. [Vba-Excel] Récupérer événement sur une cellule
    Par steps5ive dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/04/2006, 20h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo