Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

ouverture excel en vba depuis une autre application

62 views
Skip to first unread message

Michel

unread,
Apr 5, 2009, 7:00:39 AM4/5/09
to
Bonjour a tout le monde,

Je ne sais pas si c'est HS ou pas...

depuis access j'essais d'ouvrir un fichier excel via le code :

Dim objSheet As Object
Dim strBook As String
Dim strPath As String

'init à modifier
strPath = "W:\REPORTING\Pricing"
strBook = "Extract_Prix_D-2_MF.xls"
strSheet = "Query_Px_Avant_Veille_1"

Set objApp = CreateObject("excel.application")
Set objBook = objApp.Workbooks.Open(strPath & "\" & strBook)
Set objSheet = objBook.Worksheets(strSheet)
objApp.Visible = True 'si on veut visualiser

With objSheet
.Range("A1").Value = "Valoren Number"
End With

en passant par cette methode, la session excel ne load pas toutes les memes
fonctionnalites ou barre outils qu'un simple :
ChDir "J:\"
Workbooks.Open FileName:="C:.....xls"

Sauriez vous me dire pourquoi ?

Merci d'avance...

Un pauvre utilisateur perdu dans les Add-ins.....

@+

Michel.


MichDenis

unread,
Apr 5, 2009, 7:42:25 AM4/5/09
to
Bonjour Michel,

Sur ce sujet, Frédéric Sigonneau a publié ce qui suit :

***************************************************************************

le comportement que tu décris semble faire partie des "charmes"
cachés de l'utilisation d'Excel avec Automation.
Il semble en effet que les macros complémentaires qui utilisent/créent un bouton
de barre d'outils pour leur fonctionnement ne soient pas lancées lorsqu'Excel
est créé par Automation. Alors que celles qui utilisent des entrées de menu le
sont...

Pour résoudre ce problème, ce genre de code fonctionne pour moi (Excel 2002) :

Sub TestAddinExcel()
Dim xl As Object

Set xl = CreateObject("Excel.Application")
xl.Workbooks.Add
xl.AddIns("Titre de la macro").Installed = False
xl.AddIns("Titre de la macro").Installed = True
xl.Visible = True

End Sub

"Titre de la macro" est le nom de la macro complémentaire tel qu'il apparaît
dans la liste ouverte par Outils\Macros complémentaires.

***************************************************************************


"Michel" <mholderi...@hotmailantispam.com> a écrit dans le message de groupe de
discussion : O5YqP4dt...@TK2MSFTNGP05.phx.gbl...

Michel

unread,
Apr 5, 2009, 9:02:30 AM4/5/09
to
encore un tres grand merci.... Que ferais-je sans toi... :o)

Je test demain et te dirais si ca a marche...

Bonne fin de we.

@+

Michel.

"MichDenis" <mich...@hotmail.com> a écrit dans le message de news:
8F3E0D62-9F8A-4A6C...@microsoft.com...

MichDenis

unread,
Apr 6, 2009, 1:09:53 PM4/6/09
to
Pour faire ta copie, si tu utilises la variable Objet Excel que tu as créée,

dim Xl as object
dim Wk As object

Set xl = CreateObject("Excel.Application")

Set Wk = Xl.Workbooks(Chemin & Fichier.xls) 'à ouvrir

Maintenant
Wk.Worksheets("NomDelaFeuille").Range("A1:A25").Copy
Wk.Worksheets("AutreFeuille").range(le reste de la commande...pour coller)

Ferme le classeur en sauvegardant
Wk.Close true
Ferme l'instance d'excel
xl.quit

"Michel" <mholderi...@hotmailantispam.com> a écrit dans le message de groupe de

discussion : e26Cggtt...@TK2MSFTNGP04.phx.gbl...
Bonjour,

super ca marche !!!!

Petite question j'essaie de faire un copier special valeur, mais ca ne
marche pas.
Aurais tu peut etre une idee ?
ObjApp.Selection.PasteSpecial Paste:=ObjApp.xlPasteValues,
Operation:=ObjApp.xlNone, SkipBlanks _
:=False, Transpose:=False

ou

Selection.PasteSpecial Paste:=ObjApp.xlPasteValues,
Operation:=ObjApp.xlNone, SkipBlanks _
'''' :=False, Transpose:=False

ne marche pas :o(

Merci encore,

@+

Michel.

"MichDenis" <mich...@hotmail.com> a écrit dans le message de news:
8F3E0D62-9F8A-4A6C...@microsoft.com...

Michel

unread,
Apr 6, 2009, 1:11:26 PM4/6/09
to
Vais faire ce demain, un tres, tres, tres grand merci de ton aide et de ton
temps.
Je trouve ces commandes bien compliquees. Dommage qu'on ne puisse pas
utilise les memes commandes que dans VBA de Excel :o)

@+

Micel.


"MichDenis" <mich...@hotmail.com> a écrit dans le message de news:

Ob%23bCqtt...@TK2MSFTNGP03.phx.gbl...

Michel

unread,
Apr 6, 2009, 12:50:49 PM4/6/09
to
Bonjour,

super ca marche !!!!

Petite question j'essaie de faire un copier special valeur, mais ca ne
marche pas.
Aurais tu peut etre une idee ?
ObjApp.Selection.PasteSpecial Paste:=ObjApp.xlPasteValues,
Operation:=ObjApp.xlNone, SkipBlanks _
:=False, Transpose:=False

ou

Selection.PasteSpecial Paste:=ObjApp.xlPasteValues,
Operation:=ObjApp.xlNone, SkipBlanks _
'''' :=False, Transpose:=False

ne marche pas :o(

Merci encore,

@+

Michel.

"MichDenis" <mich...@hotmail.com> a écrit dans le message de news:
8F3E0D62-9F8A-4A6C...@microsoft.com...

Michel

unread,
Apr 23, 2009, 1:42:04 PM4/23/09
to
Bonjour,

j'ai essaye mais ca ne marche pas le copier coller :o(
selectionner une feuille et la renommer ca c'est ok.

Aurais tu une idee pourquoi ?

Merci d'avance.

Michel.


"MichDenis" <mich...@hotmail.com> a écrit dans le message de news:

Ob%23bCqtt...@TK2MSFTNGP03.phx.gbl...

MichDenis

unread,
Apr 23, 2009, 3:12:20 PM4/23/09
to
Au lieu de te contenter de dire que cela ne fonctionne pas,
publie ici la procédure (non le fichier) que tu utilises, et,
spécifie le message d'erreur que tu obtiens et / ou la
ligne de code qui refuse de s'exécuter.





Michel

unread,
Apr 23, 2009, 3:56:45 PM4/23/09
to
:o(

A y est je t'ai enerve.... Sorry....

Publié le 06/04/2009 a 19:11 (je n'ai pas les secondes, sorry...)

copié coller de ce message du meme fil :

> Petite question j'essaie de faire un copier special valeur, mais ca ne
> marche pas.
> Aurais tu peut etre une idee ?
> ObjApp.Selection.PasteSpecial Paste:=ObjApp.xlPasteValues,
> Operation:=ObjApp.xlNone, SkipBlanks _
> :=False, Transpose:=False
>
> ou
>
> Selection.PasteSpecial Paste:=ObjApp.xlPasteValues,
> Operation:=ObjApp.xlNone, SkipBlanks _
> '''' :=False, Transpose:=False
>
> ne marche pas :o(

"MichDenis" <mich...@hotmail.com> a écrit dans le message de news:

ut8GudEx...@TK2MSFTNGP05.phx.gbl...

Michel

unread,
Apr 23, 2009, 4:37:10 PM4/23/09
to
j'ai omis de dire que je passe par la commande getobject de JAN au lieu de
CreateObject

ce qui change beaucoup de chose, mais comme tu le penses je suis super nul a
ce sujet, et je n'ai pas trouve grand chose pour m'aider....

voila le code :

Public Sub OpenExcel()

Dim XL As Object

' Test Excel ouvert
On Error Resume Next '
Set XL = GetObject(, "Excel.Application")
If Err.Number <> 0 Then
ExcelWasNotRunning = True
Set XL = CreateObject("Excel.Application")
End If
Err.Clear
'DetectExcel

Set XL = GetObject("C:\excel\nomfichier.xls")

XL.Application.Visible = True
XL.Parent.Windows(1).Visible = True
XL.Range("a1").Select

End Sub

"MichDenis" <mich...@hotmail.com> a écrit dans le message de news:

ut8GudEx...@TK2MSFTNGP05.phx.gbl...

MichDenis

unread,
Apr 23, 2009, 5:23:08 PM4/23/09
to
L'utilisation de cette ligne de code s'applique
lorsqu'excel est ouvert
Set XL = CreateObject("Excel.Application")

Si Excel n'est pas ouvert, une erreur est générée et
la procédure utilise
Set XL = CreateObject("Excel.Application")
Pour rendre l'application excel :
Xl.Vsible = True

Maintenant, si tu veux ouvrir un fichier en utilisant la
variable Xl, tu dois procéder ainsi

Set Wk = Xl.Workbooks. Open("C:\excel\nomfichier.xls")

La variable Xl est un substitut pour Application
La variable Wk est un substitut pour un Workbook

Ton code devrait ressembler a ceci :

'-------------------------------------------------------
Sub OpenExcel()

Dim XL As Object, Wk As object

' Test Excel ouvert
On Error Resume Next '
Set XL = GetObject(, "Excel.Application")
If Err.Number <> 0 Then
Err.Clear
Set XL = CreateObject("Excel.Application")
ExcelWasNotRunning = False
else
ExcelWasNotRunning = True
End If

'Rend visible application
XL.Application.Visible = True

'Ici ouverture de ton fichier
Set Wk = Xl.Workbooks.Open("C:\excel\nomfichier.xls")

'Pour sélectionner une cellule ou plage de cellules d'une feuille
with Wk.Worksheets("NomDeLaFeuille") 'Nom de la feuille a adapter
.Select
.Range("A5:G10").Select
End With
' le reste de ton code

'Pour fermer le classeur que tu viens d'ouvrir
Wk.Close True ' or false selon que tu veux sauvegarder les modifications

'pour fermer l'instance d'excel
xl.quit

End Sub
'-------------------------------------------------------

Michel

unread,
Apr 24, 2009, 1:16:11 PM4/24/09
to
bonjour,
desole mais je me suis peut etre mal exprime sur les derniers points.
Tout ce que tu m'as explique je l'ai vu sur internet et tu me l'avais
confirme avant aussi.
Je n'ai pas de probleme a selectionner une feuille a selectionner une
cellule quand :
* Je creer un nopuveau fichier excel
* J'ouvre un fichier excel (qui exister avant, mais est ferme) <<Set Wk =
Xl.Workbooks. Open("C:\excel\nomfichier.xls")
>>

Mon probleme est lorsque ce fichier excel est deja ouvert. Fonction
<<GetObject(, "Excel.Application")>>

Voila le code que j'utilise :

Public Sub OpenExcel()

Dim XL As Object

' Test Excel ouvert


On Error Resume Next '
Set XL = GetObject(, "Excel.Application")
If Err.Number <> 0 Then

ExcelWasNotRunning = True


Set XL = CreateObject("Excel.Application")

End If
Err.Clear
'DetectExcel

Set XL = GetObject("Z:\BOULOT\Extract_Prix_D-2_MF.xls")

XL.Application.Visible = True
XL.Parent.Windows(1).Visible = True


XL.Sheets.Add
XL.ActiveSheet.Name = "Liste_Finale"
'sa ne marche pas
XL.Range("a1").Select
XL.Cells.Select
XL.Cells.EntireColumn.AutoFit
XL.Range("A1").Select

'ca marche
XL.Sheets("Query_Px_Avant_Veille_1").Select

' les deux solutions ne marchent pas
Wk.Worksheets("Query_Px_Avant_Veille_1").Cells.Select
XL.Cells.Select
XL.Selection.Copy
XL.Range("A1").Select
XL.Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,

SkipBlanks _
:=False, Transpose:=False

XL.Range("A1").Select

End Sub

Aurais-tu une idee ?

Merci d'avance, de ton temps, qui je le sais est precieux.
Apres cela je pourrais cloturer mon projet :o)

@+

Michel.


"MichDenis" <mich...@hotmail.com> a écrit dans le message de news:

%23Mx9zmF...@TK2MSFTNGP04.phx.gbl...

MichDenis

unread,
Apr 24, 2009, 3:25:30 PM4/24/09
to
Bonjour Michel,

Tu fais quelque chose qui ressemble à :


Dim fichier As String
Dim X As String

X = "Z:\BOULOT\Extract_Prix_D-2_MF.xls"
fichier = Split(X, "\")(UBound(Split(X, "\")))

On Error Resume Next
'Si ouvert
Set wk = xl.Workbooks(fichier)
If Err <> 0 Then
Err.Clear
'si pas ouvert
Set wk = xl.Workbooks(X)
End If






"Michel" <mholderi...@hotmailantispam.com> a écrit dans le message de groupe de discussion : #ho2uBQx...@TK2MSFTNGP02.phx.gbl...

Michel

unread,
Apr 24, 2009, 3:40:29 PM4/24/09
to
Salut,
merci pour ton temps passe a m'aider mais je ne comprend plus rien je suis
perdu dans tous ces codes.
Ca me depasse completement. Je viens d'essayer sans resultat... :o(
Laisse tomber je dois etre trop bete.
Bon we a toi.
@+
Michel.


"MichDenis" <mich...@hotmail.com> a écrit dans le message de news:

O1bfuJRx...@TK2MSFTNGP06.phx.gbl...

0 new messages