Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Automation Excel depuis Access

8 réponses
Avatar
Gilbert
Bonjour,

A partir d'une base Access, je remplis un fichier Excel par automation.
Tout se passe sans problème. Quand je ferme le fichier Excel, le process est
bien supprimé.

Si j'ajoute de la mise en forme de la feuille comme
XL_Feuille.Cells(NumLigne, 2).Font.Bold = True
XL_Feuille.Cells(NumLigne, 2).HorizontalAlignment = xlLeft
ça fonctionne bien et je peux exécuter le traitement autant de fois que je
veux.

Par contre si j'utilise
With XL_Feuille.Range(Cells(NumLigneTmp, 1), Cells(NumLigne, 7))
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeLeft).Weight = xlMedium
End With

ou même sans le With
XL_Feuille.Range(Cells(NumLigneTmp, 1), Cells(NumLigne,
7)).Borders(xlInsideVertical).Weight = xlThin

la mise en forme se déroule correctement la première fois, mais le process
Excel ne disparait pas du gestionnaire de tâches après fermeture du fichier.
Et lorsque je veux relancer le traitement, j'obtiens une des erreurs
suivantes

462 Le serveur distant n'existe pas ou n'est pas disponible
1004 Erreur définie par l'application ou par l'objet

J'avais déjà été confronté à ce problème et je l'avais contourné en faisant
la mise en forme en lançant l'exécution d'un procédure située dans un module
du fichier Excel.
Mais j'aimerais pouvoir le résoudre et tout faire depuis Access, sans avoir
de code dans le fichier Excel.

Merci d'avance pour toutes vos idées

--
Cordialement,

Gilbert

8 réponses

Avatar
michdenis
essaie comme cecic :

With XL_Feuille
with .Range(.Cells(NumLigneTmp, 1), .Cells(NumLigne, 7))
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeLeft).Weight = xlMedium
End With
End with

Et avant de fermer l'instance d'excel que tu as créé par automation,
assure toi que tu as fermé tous les fichiers ouverts d'excel

Exemple : Si la variable représentant l'instance est Xl

For each Wk in Xl.workbookss
wk.close True ' true pour sauvegardes des modification
Next
xl.Quit



"Gilbert" a écrit dans le message de news:

Bonjour,

A partir d'une base Access, je remplis un fichier Excel par automation.
Tout se passe sans problème. Quand je ferme le fichier Excel, le process est
bien supprimé.

Si j'ajoute de la mise en forme de la feuille comme
XL_Feuille.Cells(NumLigne, 2).Font.Bold = True
XL_Feuille.Cells(NumLigne, 2).HorizontalAlignment = xlLeft
ça fonctionne bien et je peux exécuter le traitement autant de fois que je
veux.

Par contre si j'utilise
With XL_Feuille.Range(Cells(NumLigneTmp, 1), Cells(NumLigne, 7))
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeLeft).Weight = xlMedium
End With

ou même sans le With
XL_Feuille.Range(Cells(NumLigneTmp, 1), Cells(NumLigne,
7)).Borders(xlInsideVertical).Weight = xlThin

la mise en forme se déroule correctement la première fois, mais le process
Excel ne disparait pas du gestionnaire de tâches après fermeture du fichier.
Et lorsque je veux relancer le traitement, j'obtiens une des erreurs
suivantes

462 Le serveur distant n'existe pas ou n'est pas disponible
1004 Erreur définie par l'application ou par l'objet

J'avais déjà été confronté à ce problème et je l'avais contourné en faisant
la mise en forme en lançant l'exécution d'un procédure située dans un module
du fichier Excel.
Mais j'aimerais pouvoir le résoudre et tout faire depuis Access, sans avoir
de code dans le fichier Excel.

Merci d'avance pour toutes vos idées

--
Cordialement,

Gilbert
Avatar
Gilbert
Merci de ta réponse rapide.

Le résultat est le même.
En fait c'est le Range qui pose problème
Si je commente les ligne comme ça
With XL_Feuille
With .Range(Cells(NumLigneTmp, 1), Cells(NumLigne, 7))
' .Borders(xlEdgeBottom).Weight = xlMedium
' .Borders(xlEdgeLeft).Weight = xlMedium
End With
End With
c'est pareil

Existe-t-il un autre objet que Range pour travailler sur une plage de
cellules?
Ou un autre moyen de faire des bordures et autres mises en forme?

Merci
--
Cordialement,

Gilbert


"michdenis" a écrit dans le message de
news:
essaie comme cecic :

With XL_Feuille
with .Range(.Cells(NumLigneTmp, 1), .Cells(NumLigne, 7))
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeLeft).Weight = xlMedium
End With
End with

Et avant de fermer l'instance d'excel que tu as créé par automation,
assure toi que tu as fermé tous les fichiers ouverts d'excel

Exemple : Si la variable représentant l'instance est Xl

For each Wk in Xl.workbookss
wk.close True ' true pour sauvegardes des modification
Next
xl.Quit



"Gilbert" a écrit dans le message de


news:

Bonjour,

A partir d'une base Access, je remplis un fichier Excel par automation.
Tout se passe sans problème. Quand je ferme le fichier Excel, le process


est
bien supprimé.

Si j'ajoute de la mise en forme de la feuille comme
XL_Feuille.Cells(NumLigne, 2).Font.Bold = True
XL_Feuille.Cells(NumLigne, 2).HorizontalAlignment = xlLeft
ça fonctionne bien et je peux exécuter le traitement autant de fois que je
veux.

Par contre si j'utilise
With XL_Feuille.Range(Cells(NumLigneTmp, 1), Cells(NumLigne, 7))
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeLeft).Weight = xlMedium
End With

ou même sans le With
XL_Feuille.Range(Cells(NumLigneTmp, 1), Cells(NumLigne,
7)).Borders(xlInsideVertical).Weight = xlThin

la mise en forme se déroule correctement la première fois, mais le process
Excel ne disparait pas du gestionnaire de tâches après fermeture du


fichier.
Et lorsque je veux relancer le traitement, j'obtiens une des erreurs
suivantes

462 Le serveur distant n'existe pas ou n'est pas disponible
1004 Erreur définie par l'application ou par l'objet

J'avais déjà été confronté à ce problème et je l'avais contourné en


faisant
la mise en forme en lançant l'exécution d'un procédure située dans un


module
du fichier Excel.
Mais j'aimerais pouvoir le résoudre et tout faire depuis Access, sans


avoir
de code dans le fichier Excel.

Merci d'avance pour toutes vos idées

--
Cordialement,

Gilbert





Avatar
michdenis
Si XL_Feuille est une feuille du classeur actif
ce qui suit fonctionne sauf si ta feuille est protégée

Cette ligne de code va ajouter une bordure sur la ligne
du bas de la plage de cellules.

With XL_Feuille
With .Range(.Cells(NumLigneTmp, 1), .Cells(NumLigne, 7))
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeLeft).Weight = xlMedium
End With
End With





"Gilbert" a écrit dans le message de news:
uv$
Merci de ta réponse rapide.

Le résultat est le même.
En fait c'est le Range qui pose problème
Si je commente les ligne comme ça
With XL_Feuille
With .Range(Cells(NumLigneTmp, 1), Cells(NumLigne, 7))
' .Borders(xlEdgeBottom).Weight = xlMedium
' .Borders(xlEdgeLeft).Weight = xlMedium
End With
End With
c'est pareil

Existe-t-il un autre objet que Range pour travailler sur une plage de
cellules?
Ou un autre moyen de faire des bordures et autres mises en forme?

Merci
--
Cordialement,

Gilbert


"michdenis" a écrit dans le message de
news:
essaie comme cecic :

With XL_Feuille
with .Range(.Cells(NumLigneTmp, 1), .Cells(NumLigne, 7))
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeLeft).Weight = xlMedium
End With
End with

Et avant de fermer l'instance d'excel que tu as créé par automation,
assure toi que tu as fermé tous les fichiers ouverts d'excel

Exemple : Si la variable représentant l'instance est Xl

For each Wk in Xl.workbookss
wk.close True ' true pour sauvegardes des modification
Next
xl.Quit



"Gilbert" a écrit dans le message de


news:

Bonjour,

A partir d'une base Access, je remplis un fichier Excel par automation.
Tout se passe sans problème. Quand je ferme le fichier Excel, le process


est
bien supprimé.

Si j'ajoute de la mise en forme de la feuille comme
XL_Feuille.Cells(NumLigne, 2).Font.Bold = True
XL_Feuille.Cells(NumLigne, 2).HorizontalAlignment = xlLeft
ça fonctionne bien et je peux exécuter le traitement autant de fois que je
veux.

Par contre si j'utilise
With XL_Feuille.Range(Cells(NumLigneTmp, 1), Cells(NumLigne, 7))
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeLeft).Weight = xlMedium
End With

ou même sans le With
XL_Feuille.Range(Cells(NumLigneTmp, 1), Cells(NumLigne,
7)).Borders(xlInsideVertical).Weight = xlThin

la mise en forme se déroule correctement la première fois, mais le process
Excel ne disparait pas du gestionnaire de tâches après fermeture du


fichier.
Et lorsque je veux relancer le traitement, j'obtiens une des erreurs
suivantes

462 Le serveur distant n'existe pas ou n'est pas disponible
1004 Erreur définie par l'application ou par l'objet

J'avais déjà été confronté à ce problème et je l'avais contourné en


faisant
la mise en forme en lançant l'exécution d'un procédure située dans un


module
du fichier Excel.
Mais j'aimerais pouvoir le résoudre et tout faire depuis Access, sans


avoir
de code dans le fichier Excel.

Merci d'avance pour toutes vos idées

--
Cordialement,

Gilbert





Avatar
michdenis
En passant, tes variables : NumLigneTmp et NumLigne
doivent avoir une valeur entre 1 et le nombre de lignes
maximum de ta feuille de calcul !



"michdenis" a écrit dans le message de news:
%
Si XL_Feuille est une feuille du classeur actif
ce qui suit fonctionne sauf si ta feuille est protégée

Cette ligne de code va ajouter une bordure sur la ligne
du bas de la plage de cellules.

With XL_Feuille
With .Range(.Cells(NumLigneTmp, 1), .Cells(NumLigne, 7))
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeLeft).Weight = xlMedium
End With
End With





"Gilbert" a écrit dans le message de news:
uv$
Merci de ta réponse rapide.

Le résultat est le même.
En fait c'est le Range qui pose problème
Si je commente les ligne comme ça
With XL_Feuille
With .Range(Cells(NumLigneTmp, 1), Cells(NumLigne, 7))
' .Borders(xlEdgeBottom).Weight = xlMedium
' .Borders(xlEdgeLeft).Weight = xlMedium
End With
End With
c'est pareil

Existe-t-il un autre objet que Range pour travailler sur une plage de
cellules?
Ou un autre moyen de faire des bordures et autres mises en forme?

Merci
--
Cordialement,

Gilbert


"michdenis" a écrit dans le message de
news:
essaie comme cecic :

With XL_Feuille
with .Range(.Cells(NumLigneTmp, 1), .Cells(NumLigne, 7))
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeLeft).Weight = xlMedium
End With
End with

Et avant de fermer l'instance d'excel que tu as créé par automation,
assure toi que tu as fermé tous les fichiers ouverts d'excel

Exemple : Si la variable représentant l'instance est Xl

For each Wk in Xl.workbookss
wk.close True ' true pour sauvegardes des modification
Next
xl.Quit



"Gilbert" a écrit dans le message de


news:

Bonjour,

A partir d'une base Access, je remplis un fichier Excel par automation.
Tout se passe sans problème. Quand je ferme le fichier Excel, le process


est
bien supprimé.

Si j'ajoute de la mise en forme de la feuille comme
XL_Feuille.Cells(NumLigne, 2).Font.Bold = True
XL_Feuille.Cells(NumLigne, 2).HorizontalAlignment = xlLeft
ça fonctionne bien et je peux exécuter le traitement autant de fois que je
veux.

Par contre si j'utilise
With XL_Feuille.Range(Cells(NumLigneTmp, 1), Cells(NumLigne, 7))
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeLeft).Weight = xlMedium
End With

ou même sans le With
XL_Feuille.Range(Cells(NumLigneTmp, 1), Cells(NumLigne,
7)).Borders(xlInsideVertical).Weight = xlThin

la mise en forme se déroule correctement la première fois, mais le process
Excel ne disparait pas du gestionnaire de tâches après fermeture du


fichier.
Et lorsque je veux relancer le traitement, j'obtiens une des erreurs
suivantes

462 Le serveur distant n'existe pas ou n'est pas disponible
1004 Erreur définie par l'application ou par l'objet

J'avais déjà été confronté à ce problème et je l'avais contourné en


faisant
la mise en forme en lançant l'exécution d'un procédure située dans un


module
du fichier Excel.
Mais j'aimerais pouvoir le résoudre et tout faire depuis Access, sans


avoir
de code dans le fichier Excel.

Merci d'avance pour toutes vos idées

--
Cordialement,

Gilbert





Avatar
Gilbert
XL_Feuille est bien une feuille du classeur actif
Ma feuille n'est pas protégée
et ça ne fonctionne pas.
Enfin ça fonctionne le premier coup, mais le process Excel ne disparait pas
quand je ferme le classeur et donc au 2ème essai ça plante.

J'ai trouvé ça sur le forum US d'Access
If you reference any Excel methods or properties by reference instead of
explicitly, such as Selection, ActiveCell, ActiveWorkbook, etc., instead of
your objWB.ActiveCell etc. then Access will hold the reference open until
Access closes. To make sure that everything closes when you want it to,
make
sure to EXPLICITLY reference the item.

J'ai donc remplacé
With XL_Feuille.Range(Cells(NumLigneTmp, 1), Cells(NumLigne, 7))
par
With XL_Feuille.Range(XL_Feuille.Cells(NumLigneTmp, 1),
XL_Feuille.Cells(NumLigne, 7))

afin de référencer explicitement les objets Cells

Et CA MARCHE!!

Encore merci

--
Cordialement,

Gilbert


"michdenis" a écrit dans le message de
news:%
Si XL_Feuille est une feuille du classeur actif
ce qui suit fonctionne sauf si ta feuille est protégée

Cette ligne de code va ajouter une bordure sur la ligne
du bas de la plage de cellules.

With XL_Feuille
With .Range(.Cells(NumLigneTmp, 1), .Cells(NumLigne, 7))
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeLeft).Weight = xlMedium
End With
End With





"Gilbert" a écrit dans le message de


news:
uv$
Merci de ta réponse rapide.

Le résultat est le même.
En fait c'est le Range qui pose problème
Si je commente les ligne comme ça
With XL_Feuille
With .Range(Cells(NumLigneTmp, 1), Cells(NumLigne, 7))
' .Borders(xlEdgeBottom).Weight = xlMedium
' .Borders(xlEdgeLeft).Weight = xlMedium
End With
End With
c'est pareil

Existe-t-il un autre objet que Range pour travailler sur une plage de
cellules?
Ou un autre moyen de faire des bordures et autres mises en forme?

Merci
--
Cordialement,

Gilbert


"michdenis" a écrit dans le message de
news:
> essaie comme cecic :
>
> With XL_Feuille
> with .Range(.Cells(NumLigneTmp, 1), .Cells(NumLigne, 7))
> .Borders(xlEdgeBottom).Weight = xlMedium
> .Borders(xlEdgeLeft).Weight = xlMedium
> End With
> End with
>
> Et avant de fermer l'instance d'excel que tu as créé par automation,
> assure toi que tu as fermé tous les fichiers ouverts d'excel
>
> Exemple : Si la variable représentant l'instance est Xl
>
> For each Wk in Xl.workbookss
> wk.close True ' true pour sauvegardes des modification
> Next
> xl.Quit
>
>
>
> "Gilbert" a écrit dans le message de
news:
>
> Bonjour,
>
> A partir d'une base Access, je remplis un fichier Excel par automation.
> Tout se passe sans problème. Quand je ferme le fichier Excel, le process
est
> bien supprimé.
>
> Si j'ajoute de la mise en forme de la feuille comme
> XL_Feuille.Cells(NumLigne, 2).Font.Bold = True
> XL_Feuille.Cells(NumLigne, 2).HorizontalAlignment = xlLeft
> ça fonctionne bien et je peux exécuter le traitement autant de fois que


je
> veux.
>
> Par contre si j'utilise
> With XL_Feuille.Range(Cells(NumLigneTmp, 1), Cells(NumLigne, 7))
> .Borders(xlEdgeBottom).Weight = xlMedium
> .Borders(xlEdgeLeft).Weight = xlMedium
> End With
>
> ou même sans le With
> XL_Feuille.Range(Cells(NumLigneTmp, 1), Cells(NumLigne,
> 7)).Borders(xlInsideVertical).Weight = xlThin
>
> la mise en forme se déroule correctement la première fois, mais le


process
> Excel ne disparait pas du gestionnaire de tâches après fermeture du
fichier.
> Et lorsque je veux relancer le traitement, j'obtiens une des erreurs
> suivantes
>
> 462 Le serveur distant n'existe pas ou n'est pas disponible
> 1004 Erreur définie par l'application ou par l'objet
>
> J'avais déjà été confronté à ce problème et je l'avais contourné en
faisant
> la mise en forme en lançant l'exécution d'un procédure située dans un
module
> du fichier Excel.
> Mais j'aimerais pouvoir le résoudre et tout faire depuis Access, sans
avoir
> de code dans le fichier Excel.
>
> Merci d'avance pour toutes vos idées
>
> --
> Cordialement,
>
> Gilbert
>
>
>




Avatar
michdenis
C'est exactement ce que je t'ai écrit dans mon premier message !

Surprenant... tu m'as répondu que cela ne fonctionnait pas !!!




"Gilbert" a écrit dans le message de news:

XL_Feuille est bien une feuille du classeur actif
Ma feuille n'est pas protégée
et ça ne fonctionne pas.
Enfin ça fonctionne le premier coup, mais le process Excel ne disparait pas
quand je ferme le classeur et donc au 2ème essai ça plante.

J'ai trouvé ça sur le forum US d'Access
If you reference any Excel methods or properties by reference instead of
explicitly, such as Selection, ActiveCell, ActiveWorkbook, etc., instead of
your objWB.ActiveCell etc. then Access will hold the reference open until
Access closes. To make sure that everything closes when you want it to,
make
sure to EXPLICITLY reference the item.

J'ai donc remplacé
With XL_Feuille.Range(Cells(NumLigneTmp, 1), Cells(NumLigne, 7))
par
With XL_Feuille.Range(XL_Feuille.Cells(NumLigneTmp, 1),
XL_Feuille.Cells(NumLigne, 7))

afin de référencer explicitement les objets Cells

Et CA MARCHE!!

Encore merci

--
Cordialement,

Gilbert


"michdenis" a écrit dans le message de
news:%
Si XL_Feuille est une feuille du classeur actif
ce qui suit fonctionne sauf si ta feuille est protégée

Cette ligne de code va ajouter une bordure sur la ligne
du bas de la plage de cellules.

With XL_Feuille
With .Range(.Cells(NumLigneTmp, 1), .Cells(NumLigne, 7))
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeLeft).Weight = xlMedium
End With
End With





"Gilbert" a écrit dans le message de


news:
uv$
Merci de ta réponse rapide.

Le résultat est le même.
En fait c'est le Range qui pose problème
Si je commente les ligne comme ça
With XL_Feuille
With .Range(Cells(NumLigneTmp, 1), Cells(NumLigne, 7))
' .Borders(xlEdgeBottom).Weight = xlMedium
' .Borders(xlEdgeLeft).Weight = xlMedium
End With
End With
c'est pareil

Existe-t-il un autre objet que Range pour travailler sur une plage de
cellules?
Ou un autre moyen de faire des bordures et autres mises en forme?

Merci
--
Cordialement,

Gilbert


"michdenis" a écrit dans le message de
news:
> essaie comme cecic :
>
> With XL_Feuille
> with .Range(.Cells(NumLigneTmp, 1), .Cells(NumLigne, 7))
> .Borders(xlEdgeBottom).Weight = xlMedium
> .Borders(xlEdgeLeft).Weight = xlMedium
> End With
> End with
>
> Et avant de fermer l'instance d'excel que tu as créé par automation,
> assure toi que tu as fermé tous les fichiers ouverts d'excel
>
> Exemple : Si la variable représentant l'instance est Xl
>
> For each Wk in Xl.workbookss
> wk.close True ' true pour sauvegardes des modification
> Next
> xl.Quit
>
>
>
> "Gilbert" a écrit dans le message de
news:
>
> Bonjour,
>
> A partir d'une base Access, je remplis un fichier Excel par automation.
> Tout se passe sans problème. Quand je ferme le fichier Excel, le process
est
> bien supprimé.
>
> Si j'ajoute de la mise en forme de la feuille comme
> XL_Feuille.Cells(NumLigne, 2).Font.Bold = True
> XL_Feuille.Cells(NumLigne, 2).HorizontalAlignment = xlLeft
> ça fonctionne bien et je peux exécuter le traitement autant de fois que


je
> veux.
>
> Par contre si j'utilise
> With XL_Feuille.Range(Cells(NumLigneTmp, 1), Cells(NumLigne, 7))
> .Borders(xlEdgeBottom).Weight = xlMedium
> .Borders(xlEdgeLeft).Weight = xlMedium
> End With
>
> ou même sans le With
> XL_Feuille.Range(Cells(NumLigneTmp, 1), Cells(NumLigne,
> 7)).Borders(xlInsideVertical).Weight = xlThin
>
> la mise en forme se déroule correctement la première fois, mais le


process
> Excel ne disparait pas du gestionnaire de tâches après fermeture du
fichier.
> Et lorsque je veux relancer le traitement, j'obtiens une des erreurs
> suivantes
>
> 462 Le serveur distant n'existe pas ou n'est pas disponible
> 1004 Erreur définie par l'application ou par l'objet
>
> J'avais déjà été confronté à ce problème et je l'avais contourné en
faisant
> la mise en forme en lançant l'exécution d'un procédure située dans un
module
> du fichier Excel.
> Mais j'aimerais pouvoir le résoudre et tout faire depuis Access, sans
avoir
> de code dans le fichier Excel.
>
> Merci d'avance pour toutes vos idées
>
> --
> Cordialement,
>
> Gilbert
>
>
>




Avatar
Gilbert
Bonjour,
Je suis d'accord avec toi, mais il semble qu'il y ait une différence de
fonctionnement entre

XL_Feuille.Range(XL_Feuille.Cells(NumLigneTmp, 1),
XL_Feuille.Cells(NumLigne, 7))
et
With XL_Feuille
.Range(.Cells(NumLigneTmp, 1), .Cells(NumLigne, 7))

Je retesterai ce soir, peut-être me suis-je trompé hier après ta 1ère
réponse.

--
Cordialement,

Gilbert


"michdenis" a écrit dans le message de news:

C'est exactement ce que je t'ai écrit dans mon premier message !

Surprenant... tu m'as répondu que cela ne fonctionnait pas !!!




"Gilbert" a écrit dans le message de
news:

XL_Feuille est bien une feuille du classeur actif
Ma feuille n'est pas protégée
et ça ne fonctionne pas.
Enfin ça fonctionne le premier coup, mais le process Excel ne disparait
pas
quand je ferme le classeur et donc au 2ème essai ça plante.

J'ai trouvé ça sur le forum US d'Access
If you reference any Excel methods or properties by reference instead of
explicitly, such as Selection, ActiveCell, ActiveWorkbook, etc., instead
of
your objWB.ActiveCell etc. then Access will hold the reference open until
Access closes. To make sure that everything closes when you want it to,
make
sure to EXPLICITLY reference the item.

J'ai donc remplacé
With XL_Feuille.Range(Cells(NumLigneTmp, 1), Cells(NumLigne, 7))
par
With XL_Feuille.Range(XL_Feuille.Cells(NumLigneTmp, 1),
XL_Feuille.Cells(NumLigne, 7))

afin de référencer explicitement les objets Cells

Et CA MARCHE!!

Encore merci

--
Cordialement,

Gilbert


"michdenis" a écrit dans le message de
news:%
Si XL_Feuille est une feuille du classeur actif
ce qui suit fonctionne sauf si ta feuille est protégée

Cette ligne de code va ajouter une bordure sur la ligne
du bas de la plage de cellules.

With XL_Feuille
With .Range(.Cells(NumLigneTmp, 1), .Cells(NumLigne, 7))
.Borders(xlEdgeBottom).Weight = xlMedium
.Borders(xlEdgeLeft).Weight = xlMedium
End With
End With





"Gilbert" a écrit dans le message de


news:
uv$
Merci de ta réponse rapide.

Le résultat est le même.
En fait c'est le Range qui pose problème
Si je commente les ligne comme ça
With XL_Feuille
With .Range(Cells(NumLigneTmp, 1), Cells(NumLigne, 7))
' .Borders(xlEdgeBottom).Weight = xlMedium
' .Borders(xlEdgeLeft).Weight = xlMedium
End With
End With
c'est pareil

Existe-t-il un autre objet que Range pour travailler sur une plage de
cellules?
Ou un autre moyen de faire des bordures et autres mises en forme?

Merci
--
Cordialement,

Gilbert


"michdenis" a écrit dans le message de
news:
> essaie comme cecic :
>
> With XL_Feuille
> with .Range(.Cells(NumLigneTmp, 1), .Cells(NumLigne, 7))
> .Borders(xlEdgeBottom).Weight = xlMedium
> .Borders(xlEdgeLeft).Weight = xlMedium
> End With
> End with
>
> Et avant de fermer l'instance d'excel que tu as créé par automation,
> assure toi que tu as fermé tous les fichiers ouverts d'excel
>
> Exemple : Si la variable représentant l'instance est Xl
>
> For each Wk in Xl.workbookss
> wk.close True ' true pour sauvegardes des modification
> Next
> xl.Quit
>
>
>
> "Gilbert" a écrit dans le message de
news:
>
> Bonjour,
>
> A partir d'une base Access, je remplis un fichier Excel par automation.
> Tout se passe sans problème. Quand je ferme le fichier Excel, le
> process
est
> bien supprimé.
>
> Si j'ajoute de la mise en forme de la feuille comme
> XL_Feuille.Cells(NumLigne, 2).Font.Bold = True
> XL_Feuille.Cells(NumLigne, 2).HorizontalAlignment = xlLeft
> ça fonctionne bien et je peux exécuter le traitement autant de fois que


je
> veux.
>
> Par contre si j'utilise
> With XL_Feuille.Range(Cells(NumLigneTmp, 1), Cells(NumLigne,
> 7))
> .Borders(xlEdgeBottom).Weight = xlMedium
> .Borders(xlEdgeLeft).Weight = xlMedium
> End With
>
> ou même sans le With
> XL_Feuille.Range(Cells(NumLigneTmp, 1), Cells(NumLigne,
> 7)).Borders(xlInsideVertical).Weight = xlThin
>
> la mise en forme se déroule correctement la première fois, mais le


process
> Excel ne disparait pas du gestionnaire de tâches après fermeture du
fichier.
> Et lorsque je veux relancer le traitement, j'obtiens une des erreurs
> suivantes
>
> 462 Le serveur distant n'existe pas ou n'est pas disponible
> 1004 Erreur définie par l'application ou par l'objet
>
> J'avais déjà été confronté à ce problème et je l'avais contourné en
faisant
> la mise en forme en lançant l'exécution d'un procédure située dans un
module
> du fichier Excel.
> Mais j'aimerais pouvoir le résoudre et tout faire depuis Access, sans
avoir
> de code dans le fichier Excel.
>
> Merci d'avance pour toutes vos idées
>
> --
> Cordialement,
>
> Gilbert
>
>
>









Avatar
Gilbert
Bien sûr c'est toi qui a raison, ta solution fonctionne.
J'ai du oublier le . devant les Cells

Encore merci

--
Cordialement,

Gilbert


"Gilbert" a écrit dans le message de
news:%
Bonjour,
Je suis d'accord avec toi, mais il semble qu'il y ait une différence de
fonctionnement entre

XL_Feuille.Range(XL_Feuille.Cells(NumLigneTmp, 1),
XL_Feuille.Cells(NumLigne, 7))
et
With XL_Feuille
.Range(.Cells(NumLigneTmp, 1), .Cells(NumLigne, 7))

Je retesterai ce soir, peut-être me suis-je trompé hier après ta 1ère
réponse.

--
Cordialement,

Gilbert


"michdenis" a écrit dans le message de news:

> C'est exactement ce que je t'ai écrit dans mon premier message !
>
> Surprenant... tu m'as répondu que cela ne fonctionnait pas !!!
>
>
>
>
> "Gilbert" a écrit dans le message de
> news:
>
> XL_Feuille est bien une feuille du classeur actif
> Ma feuille n'est pas protégée
> et ça ne fonctionne pas.
> Enfin ça fonctionne le premier coup, mais le process Excel ne disparait
> pas
> quand je ferme le classeur et donc au 2ème essai ça plante.
>
> J'ai trouvé ça sur le forum US d'Access
> If you reference any Excel methods or properties by reference instead of
> explicitly, such as Selection, ActiveCell, ActiveWorkbook, etc., instead
> of
> your objWB.ActiveCell etc. then Access will hold the reference open


until
> Access closes. To make sure that everything closes when you want it to,
> make
> sure to EXPLICITLY reference the item.
>
> J'ai donc remplacé
> With XL_Feuille.Range(Cells(NumLigneTmp, 1), Cells(NumLigne, 7))
> par
> With XL_Feuille.Range(XL_Feuille.Cells(NumLigneTmp, 1),
> XL_Feuille.Cells(NumLigne, 7))
>
> afin de référencer explicitement les objets Cells
>
> Et CA MARCHE!!
>
> Encore merci
>
> --
> Cordialement,
>
> Gilbert
>
>
> "michdenis" a écrit dans le message de
> news:%
>> Si XL_Feuille est une feuille du classeur actif
>> ce qui suit fonctionne sauf si ta feuille est protégée
>>
>> Cette ligne de code va ajouter une bordure sur la ligne
>> du bas de la plage de cellules.
>>
>> With XL_Feuille
>> With .Range(.Cells(NumLigneTmp, 1), .Cells(NumLigne, 7))
>> .Borders(xlEdgeBottom).Weight = xlMedium
>> .Borders(xlEdgeLeft).Weight = xlMedium
>> End With
>> End With
>>
>>
>>
>>
>>
>> "Gilbert" a écrit dans le message de
> news:
>> uv$
>> Merci de ta réponse rapide.
>>
>> Le résultat est le même.
>> En fait c'est le Range qui pose problème
>> Si je commente les ligne comme ça
>> With XL_Feuille
>> With .Range(Cells(NumLigneTmp, 1), Cells(NumLigne, 7))
>> ' .Borders(xlEdgeBottom).Weight = xlMedium
>> ' .Borders(xlEdgeLeft).Weight = xlMedium
>> End With
>> End With
>> c'est pareil
>>
>> Existe-t-il un autre objet que Range pour travailler sur une plage de
>> cellules?
>> Ou un autre moyen de faire des bordures et autres mises en forme?
>>
>> Merci
>> --
>> Cordialement,
>>
>> Gilbert
>>
>>
>> "michdenis" a écrit dans le message de
>> news:
>> > essaie comme cecic :
>> >
>> > With XL_Feuille
>> > with .Range(.Cells(NumLigneTmp, 1), .Cells(NumLigne, 7))
>> > .Borders(xlEdgeBottom).Weight = xlMedium
>> > .Borders(xlEdgeLeft).Weight = xlMedium
>> > End With
>> > End with
>> >
>> > Et avant de fermer l'instance d'excel que tu as créé par automation,
>> > assure toi que tu as fermé tous les fichiers ouverts d'excel
>> >
>> > Exemple : Si la variable représentant l'instance est Xl
>> >
>> > For each Wk in Xl.workbookss
>> > wk.close True ' true pour sauvegardes des modification
>> > Next
>> > xl.Quit
>> >
>> >
>> >
>> > "Gilbert" a écrit dans le message


de
>> news:
>> >
>> > Bonjour,
>> >
>> > A partir d'une base Access, je remplis un fichier Excel par


automation.
>> > Tout se passe sans problème. Quand je ferme le fichier Excel, le
>> > process
>> est
>> > bien supprimé.
>> >
>> > Si j'ajoute de la mise en forme de la feuille comme
>> > XL_Feuille.Cells(NumLigne, 2).Font.Bold = True
>> > XL_Feuille.Cells(NumLigne, 2).HorizontalAlignment = xlLeft
>> > ça fonctionne bien et je peux exécuter le traitement autant de fois


que
> je
>> > veux.
>> >
>> > Par contre si j'utilise
>> > With XL_Feuille.Range(Cells(NumLigneTmp, 1), Cells(NumLigne,
>> > 7))
>> > .Borders(xlEdgeBottom).Weight = xlMedium
>> > .Borders(xlEdgeLeft).Weight = xlMedium
>> > End With
>> >
>> > ou même sans le With
>> > XL_Feuille.Range(Cells(NumLigneTmp, 1), Cells(NumLigne,
>> > 7)).Borders(xlInsideVertical).Weight = xlThin
>> >
>> > la mise en forme se déroule correctement la première fois, mais le
> process
>> > Excel ne disparait pas du gestionnaire de tâches après fermeture du
>> fichier.
>> > Et lorsque je veux relancer le traitement, j'obtiens une des erreurs
>> > suivantes
>> >
>> > 462 Le serveur distant n'existe pas ou n'est pas disponible
>> > 1004 Erreur définie par l'application ou par l'objet
>> >
>> > J'avais déjà été confronté à ce problème et je l'avais contourné en
>> faisant
>> > la mise en forme en lançant l'exécution d'un procédure située dans un
>> module
>> > du fichier Excel.
>> > Mais j'aimerais pouvoir le résoudre et tout faire depuis Access, sans
>> avoir
>> > de code dans le fichier Excel.
>> >
>> > Merci d'avance pour toutes vos idées
>> >
>> > --
>> > Cordialement,
>> >
>> > Gilbert
>> >
>> >
>> >
>>
>>
>
>
>