OVH Cloud OVH Cloud

automation vers EXCELL

21 réponses
Avatar
Pascal
bonsoir,
ai un petit soucis dans le code suivant
ce code ouvre un fichier excell, mise en page(format) et inscrit des
données puis se ferme
le problème réside dans le format, a chaque ouverture de la base et appel de
la procédure, tout fonctionne à merveille, dès que je relance une seconde ou
xème fois, le format ne se fait pas et rien ne s'inscrit

voici le code
'ouvrir le fichier Excell
Dim xlApp As Excel.Application
Dim wbk As Excel.Workbook
Dim sht As Excel.Worksheet
'Créer un objet Excell
Set xlApp = CreateObject("Excel.Application")
With xlApp
' Rendre Excell visible
.Visible = True
' Créer un nouveau classeur
Set wbk = .Workbooks.Add
' Instancier la feuille active dans le classeur
Set sht = wbk.ActiveSheet
End With
'mise en page (format)
Range("A1").Select
ActiveCell.FormulaR1C1 = "test1"
Range("B1").Select
ActiveCell.FormulaR1C1 = "test2"
Range("C1").Select
ActiveCell.FormulaR1C1 = "test3"
Range("D1").Select
ActiveCell.FormulaR1C1 = "test4"
Range("A2").Select
etc.......

je précise que les objet sont libéré à chaque sortie de la sub
Set sht = Nothing
Set wbk = Nothing
Set xlApp = Nothing

qqn a-t-il une vague idée?

merci

Pascal

10 réponses

1 2 3
Avatar
Pascal
re,re,rebonsoir Raymond
non ce n'est même pas cela
le simple code qui suit
Range("A1").Select
ActiveCell.FormulaR1C1 = "Nb1"
ne fonctionne qu'une seule fois, si je veux relancer la procédure une
seconde fois, cela ne fonctionne pas!
sais pas!
Merci de ta patience
Pascal



"Raymond [mvp]" a écrit dans le message de
news: #
impossible à savoir s'il manque une ligne ou 1 ligne en trop.
vérifie bien tes With , s'ils s'appliquent bien au bon objet.
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


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

Bonsoir,
ben c'est ce que je fait M'sieur Raymond, j'ai pû isoler le problème
sans


pour autant l'expliquer ni le résoudre!

si je supprime dans le code l'appel à la mise en forme du tableau
Excell,


tout fonctionne à merveille
Donc si je supprime cette partie (qui je précise fonctionne 1 et 1 seul
fois!!)

Private Sub formaterFeuilleExcell()
Range("A1").Select
ActiveCell.FormulaR1C1 = "Nb1"
Range("B1").Select
ActiveCell.FormulaR1C1 = "Nb2"
Range("C1").Select
ActiveCell.FormulaR1C1 = "Nb3"
Range("D1").Select
ActiveCell.FormulaR1C1 = "Nb4"
Range("E1").Select
ActiveCell.FormulaR1C1 = "Nb5"
Range("F1").Select
ActiveCell.FormulaR1C1 = "Sortis"


Columns("A:E").Select
Range("A2").Activate
Selection.ColumnWidth = 5
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Columns("F:F").Select
Selection.ColumnWidth = 7
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection.Font
.Name = "Arial"
.FontStyle = "Gras"
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
End Sub

Ai oublié qqchose la dedans??

Pascal








Avatar
Pascal
re, raymond,
je viens de faire un test sur Access 2000 et cela fonctionne,cela est dû
soit a ACCESS 2003 soit à Excell2003
y a t-il un format d'écriture différent entre 2000 et 2003 sur automation
EXCELL?
Pascal


"Raymond [mvp]" a écrit dans le message de
news: #
impossible à savoir s'il manque une ligne ou 1 ligne en trop.
vérifie bien tes With , s'ils s'appliquent bien au bon objet.
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


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

Bonsoir,
ben c'est ce que je fait M'sieur Raymond, j'ai pû isoler le problème
sans


pour autant l'expliquer ni le résoudre!

si je supprime dans le code l'appel à la mise en forme du tableau
Excell,


tout fonctionne à merveille
Donc si je supprime cette partie (qui je précise fonctionne 1 et 1 seul
fois!!)

Private Sub formaterFeuilleExcell()
Range("A1").Select
ActiveCell.FormulaR1C1 = "Nb1"
Range("B1").Select
ActiveCell.FormulaR1C1 = "Nb2"
Range("C1").Select
ActiveCell.FormulaR1C1 = "Nb3"
Range("D1").Select
ActiveCell.FormulaR1C1 = "Nb4"
Range("E1").Select
ActiveCell.FormulaR1C1 = "Nb5"
Range("F1").Select
ActiveCell.FormulaR1C1 = "Sortis"


Columns("A:E").Select
Range("A2").Activate
Selection.ColumnWidth = 5
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Columns("F:F").Select
Selection.ColumnWidth = 7
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection.Font
.Name = "Arial"
.FontStyle = "Gras"
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
End Sub

Ai oublié qqchose la dedans??

Pascal








Avatar
Raymond [mvp]
bonjour.

as-tu vérifié que les références excel étaient identiques à la version
access ? access2003 avec excel 2003 et non access 2003 avec excel 2000 .

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Pascal" a écrit dans le message de news:
%
re, raymond,
je viens de faire un test sur Access 2000 et cela fonctionne,cela est dû
soit a ACCESS 2003 soit à Excell2003
y a t-il un format d'écriture différent entre 2000 et 2003 sur automation
EXCELL?
Pascal



Avatar
Rv
Salut,

J'ai du mal à voir comment s'intègre la procédure "Private Sub
formaterFeuilleExcell()"

De mon coté sous Access2000, Excel2000, référence Excel 9 dans VBE si je
fais le test : 1 formulaire, 3 boutons (Ouvre Excel, Ecrit dans Excel, Ferme
Excel), le gestionnaire des tâches montre bien la fermeture du processus
excel sur le clic du bouton.
Le code derriere le formulaire est le suivant:

Option Compare Database
Option Explicit
Dim objAppXls As Excel.Application
Dim objWbk As Excel.Workbook
Dim objWsh As Excel.Worksheet

Private Sub btnEcrit_Click()
Set objWbk = objAppXls.Workbooks.Add
Set objWsh = objWbk.Worksheets(1)
objWsh.Cells(1, 1) = "Coucou"
End Sub

Private Sub btnFerme_Click()
Set objWsh = Nothing
If Not objWbk Is Nothing Then
objWbk.SaveAs "testAuto.xls"
objWbk.Close
End If
Set objWbk = Nothing
If Not objAppXls Is Nothing Then objAppXls.Quit
Set objAppXls = Nothing
End Sub

Private Sub btnOuvre_Click()
Set objAppXls = New Excel.Application
objAppXls.Visible = True

End Sub

A+

Rv


"Pascal" a écrit dans le message de
news:
Bonsoir,
ben c'est ce que je fait M'sieur Raymond, j'ai pû isoler le problème sans
pour autant l'expliquer ni le résoudre!

si je supprime dans le code l'appel à la mise en forme du tableau Excell,
tout fonctionne à merveille
Donc si je supprime cette partie (qui je précise fonctionne 1 et 1 seul
fois!!)

Private Sub formaterFeuilleExcell()
Range("A1").Select
ActiveCell.FormulaR1C1 = "Nb1"
Range("B1").Select
ActiveCell.FormulaR1C1 = "Nb2"
Range("C1").Select
ActiveCell.FormulaR1C1 = "Nb3"
Range("D1").Select
ActiveCell.FormulaR1C1 = "Nb4"
Range("E1").Select
ActiveCell.FormulaR1C1 = "Nb5"
Range("F1").Select
ActiveCell.FormulaR1C1 = "Sortis"


Columns("A:E").Select
Range("A2").Activate
Selection.ColumnWidth = 5
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Columns("F:F").Select
Selection.ColumnWidth = 7
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection.Font
.Name = "Arial"
.FontStyle = "Gras"
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
End Sub

Ai oublié qqchose la dedans??

Pascal


Avatar
Pascal
bonjour Raymond,
oui c'est bien identique version 11.0!

je cherche, je cherche!
merci de ton aide


"Raymond [mvp]" a écrit dans le message de
news:
bonjour.

as-tu vérifié que les références excel étaient identiques à la version
access ? access2003 avec excel 2003 et non access 2003 avec excel 2000 .

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Pascal" a écrit dans le message de news:
%
re, raymond,
je viens de faire un test sur Access 2000 et cela fonctionne,cela est dû
soit a ACCESS 2003 soit à Excell2003
y a t-il un format d'écriture différent entre 2000 et 2003 sur
automation


EXCELL?
Pascal








Avatar
Pascal
Bonjour RV,
ca y est grâce à vous je sais exactement ce qui ne vas pas, c'est la méthode
Range qui échoue
Range("A1").Select
ActiveCell.FormulaR1C1 = "Nb1"
Range("B1").Select
ActiveCell.FormulaR1C1 = "Nb2"
etc...................

je remarque que tu n'utilise pas cette méthode!
on peux adapter ce range ou je doit utiliser ta méthode :
objWsh.Cells(1, 1) = "Coucou"

dès lors je fais comment avec celle-ci pour mettre en gras, centrage etc...

très GRAND merci à vous deux

Ps: pour ton info <<<J'ai du mal à voir comment s'intègre la procédure
"Private Sub formaterFeuilleExcell()">>>
cette sub est dans mon form pour ne aps intégré dans le code de la routine
(question de lisibilité) je l'appelle quant ai besoin

Pascal




"Rv" a écrit dans le message de news:
e#
Salut,

J'ai du mal à voir comment s'intègre la procédure "Private Sub
formaterFeuilleExcell()"

De mon coté sous Access2000, Excel2000, référence Excel 9 dans VBE si
je

fais le test : 1 formulaire, 3 boutons (Ouvre Excel, Ecrit dans Excel,
Ferme

Excel), le gestionnaire des tâches montre bien la fermeture du processus
excel sur le clic du bouton.
Le code derriere le formulaire est le suivant:

Option Compare Database
Option Explicit
Dim objAppXls As Excel.Application
Dim objWbk As Excel.Workbook
Dim objWsh As Excel.Worksheet

Private Sub btnEcrit_Click()
Set objWbk = objAppXls.Workbooks.Add
Set objWsh = objWbk.Worksheets(1)
objWsh.Cells(1, 1) = "Coucou"
End Sub

Private Sub btnFerme_Click()
Set objWsh = Nothing
If Not objWbk Is Nothing Then
objWbk.SaveAs "testAuto.xls"
objWbk.Close
End If
Set objWbk = Nothing
If Not objAppXls Is Nothing Then objAppXls.Quit
Set objAppXls = Nothing
End Sub

Private Sub btnOuvre_Click()
Set objAppXls = New Excel.Application
objAppXls.Visible = True

End Sub

A+

Rv


"Pascal" a écrit dans le message de
news:
Bonsoir,
ben c'est ce que je fait M'sieur Raymond, j'ai pû isoler le problème
sans


pour autant l'expliquer ni le résoudre!

si je supprime dans le code l'appel à la mise en forme du tableau
Excell,


tout fonctionne à merveille
Donc si je supprime cette partie (qui je précise fonctionne 1 et 1 seul
fois!!)

Private Sub formaterFeuilleExcell()
Range("A1").Select
ActiveCell.FormulaR1C1 = "Nb1"
Range("B1").Select
ActiveCell.FormulaR1C1 = "Nb2"
Range("C1").Select
ActiveCell.FormulaR1C1 = "Nb3"
Range("D1").Select
ActiveCell.FormulaR1C1 = "Nb4"
Range("E1").Select
ActiveCell.FormulaR1C1 = "Nb5"
Range("F1").Select
ActiveCell.FormulaR1C1 = "Sortis"


Columns("A:E").Select
Range("A2").Activate
Selection.ColumnWidth = 5
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Columns("F:F").Select
Selection.ColumnWidth = 7
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection.Font
.Name = "Arial"
.FontStyle = "Gras"
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
End Sub

Ai oublié qqchose la dedans??

Pascal







Avatar
Rv
Re,

Je ne comprends pas comment le pb peut venir de l'utilisation de la
propriété Range. M'enfin si tu as la solution, c'est tant mieux!

Sinon j'utilise la propriété Cells car elle prend en paramètre un indice
de ligne et un indice de colonne, ce qui me semble plus facile à manipuler
qu'un paramètre de type string tel que "A1". Cette propriété Cells renvoie
un objet Range. Donc tout ce que tu faisais avec un Range(..) faisant
référence à une seule cellule se fera de façon identique avec un Cells(...).
Par contre si le Range fait référence à une plage de cellule alors je ne
connais pas d'équivalent avec Cells. Seule info, dans ce cas toujours pour
éviter les paramètres alphanumériques, j'utilise la syntaxe
MAfeuil.Range(MAfeuil.Cells(i,j),MAfeuil.Cells(k,l)) plutôt que
MAfeuil.Range("WX:YZ")

A+

Rv


"Pascal" a écrit dans le message de
news:%
Bonjour RV,
ca y est grâce à vous je sais exactement ce qui ne vas pas, c'est la
méthode

Range qui échoue
Range("A1").Select
ActiveCell.FormulaR1C1 = "Nb1"
Range("B1").Select
ActiveCell.FormulaR1C1 = "Nb2"
etc...................

je remarque que tu n'utilise pas cette méthode!
on peux adapter ce range ou je doit utiliser ta méthode :
objWsh.Cells(1, 1) = "Coucou"

dès lors je fais comment avec celle-ci pour mettre en gras, centrage
etc...


très GRAND merci à vous deux

Ps: pour ton info <<<J'ai du mal à voir comment s'intègre la procédure
"Private Sub formaterFeuilleExcell()">>>
cette sub est dans mon form pour ne aps intégré dans le code de la
routine

(question de lisibilité) je l'appelle quant ai besoin

Pascal



Avatar
Pascal
Merci pour les éclaircissements, je vais utiliser ta méthode
MAfeuil.Range(MAfeuil.Cells(i,j),MAfeuil.Cells(k,l)) <<<




Encore mille merci à tous les deux pour le temps et la patience, c'est très
agréable d'avoir des profs à dispo, cela permet de progresser bien vite!
Pascal


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

Re,

Je ne comprends pas comment le pb peut venir de l'utilisation de la
propriété Range. M'enfin si tu as la solution, c'est tant mieux!

Sinon j'utilise la propriété Cells car elle prend en paramètre un
indice

de ligne et un indice de colonne, ce qui me semble plus facile à manipuler
qu'un paramètre de type string tel que "A1". Cette propriété Cells renvoie
un objet Range. Donc tout ce que tu faisais avec un Range(..) faisant
référence à une seule cellule se fera de façon identique avec un
Cells(...).

Par contre si le Range fait référence à une plage de cellule alors je ne
connais pas d'équivalent avec Cells. Seule info, dans ce cas toujours pour
éviter les paramètres alphanumériques, j'utilise la syntaxe
MAfeuil.Range(MAfeuil.Cells(i,j),MAfeuil.Cells(k,l)) plutôt que
MAfeuil.Range("WX:YZ")

A+

Rv


"Pascal" a écrit dans le message de
news:%
Bonjour RV,
ca y est grâce à vous je sais exactement ce qui ne vas pas, c'est la
méthode

Range qui échoue
Range("A1").Select
ActiveCell.FormulaR1C1 = "Nb1"
Range("B1").Select
ActiveCell.FormulaR1C1 = "Nb2"
etc...................

je remarque que tu n'utilise pas cette méthode!
on peux adapter ce range ou je doit utiliser ta méthode :
objWsh.Cells(1, 1) = "Coucou"

dès lors je fais comment avec celle-ci pour mettre en gras, centrage
etc...


très GRAND merci à vous deux

Ps: pour ton info <<<J'ai du mal à voir comment s'intègre la procédure
"Private Sub formaterFeuilleExcell()">>>
cette sub est dans mon form pour ne aps intégré dans le code de la
routine

(question de lisibilité) je l'appelle quant ai besoin

Pascal








Avatar
Pascal
voilà, après changement c'est NIckel !
voulais vous en faire profiter
Pascal


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

Re,

Je ne comprends pas comment le pb peut venir de l'utilisation de la
propriété Range. M'enfin si tu as la solution, c'est tant mieux!

Sinon j'utilise la propriété Cells car elle prend en paramètre un
indice

de ligne et un indice de colonne, ce qui me semble plus facile à manipuler
qu'un paramètre de type string tel que "A1". Cette propriété Cells renvoie
un objet Range. Donc tout ce que tu faisais avec un Range(..) faisant
référence à une seule cellule se fera de façon identique avec un
Cells(...).

Par contre si le Range fait référence à une plage de cellule alors je ne
connais pas d'équivalent avec Cells. Seule info, dans ce cas toujours pour
éviter les paramètres alphanumériques, j'utilise la syntaxe
MAfeuil.Range(MAfeuil.Cells(i,j),MAfeuil.Cells(k,l)) plutôt que
MAfeuil.Range("WX:YZ")

A+

Rv


"Pascal" a écrit dans le message de
news:%
Bonjour RV,
ca y est grâce à vous je sais exactement ce qui ne vas pas, c'est la
méthode

Range qui échoue
Range("A1").Select
ActiveCell.FormulaR1C1 = "Nb1"
Range("B1").Select
ActiveCell.FormulaR1C1 = "Nb2"
etc...................

je remarque que tu n'utilise pas cette méthode!
on peux adapter ce range ou je doit utiliser ta méthode :
objWsh.Cells(1, 1) = "Coucou"

dès lors je fais comment avec celle-ci pour mettre en gras, centrage
etc...


très GRAND merci à vous deux

Ps: pour ton info <<<J'ai du mal à voir comment s'intègre la procédure
"Private Sub formaterFeuilleExcell()">>>
cette sub est dans mon form pour ne aps intégré dans le code de la
routine

(question de lisibilité) je l'appelle quant ai besoin

Pascal







Avatar
Rv
Merci du retour d'infos.

A+

Rv

"Pascal" a écrit dans le message de
news:
voilà, après changement c'est NIckel !
voulais vous en faire profiter
Pascal


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

Re,

Je ne comprends pas comment le pb peut venir de l'utilisation de la
propriété Range. M'enfin si tu as la solution, c'est tant mieux!

Sinon j'utilise la propriété Cells car elle prend en paramètre un
indice

de ligne et un indice de colonne, ce qui me semble plus facile à
manipuler


qu'un paramètre de type string tel que "A1". Cette propriété Cells
renvoie


un objet Range. Donc tout ce que tu faisais avec un Range(..) faisant
référence à une seule cellule se fera de façon identique avec un
Cells(...).

Par contre si le Range fait référence à une plage de cellule alors je ne
connais pas d'équivalent avec Cells. Seule info, dans ce cas toujours
pour


éviter les paramètres alphanumériques, j'utilise la syntaxe
MAfeuil.Range(MAfeuil.Cells(i,j),MAfeuil.Cells(k,l)) plutôt que
MAfeuil.Range("WX:YZ")

A+

Rv


"Pascal" a écrit dans le message de
news:%
Bonjour RV,
ca y est grâce à vous je sais exactement ce qui ne vas pas, c'est la
méthode

Range qui échoue
Range("A1").Select
ActiveCell.FormulaR1C1 = "Nb1"
Range("B1").Select
ActiveCell.FormulaR1C1 = "Nb2"
etc...................

je remarque que tu n'utilise pas cette méthode!
on peux adapter ce range ou je doit utiliser ta méthode :
objWsh.Cells(1, 1) = "Coucou"

dès lors je fais comment avec celle-ci pour mettre en gras, centrage
etc...


très GRAND merci à vous deux

Ps: pour ton info <<<J'ai du mal à voir comment s'intègre la
procédure



"Private Sub formaterFeuilleExcell()">>>
cette sub est dans mon form pour ne aps intégré dans le code de la
routine

(question de lisibilité) je l'appelle quant ai besoin

Pascal










1 2 3