OVH Cloud OVH Cloud

Problème ! [très difficile]

2 réponses
Avatar
Emcy
salut,

(attention c'est dure =E0 comprendre, je vais=20
essayer d'=EAtre clair) :

- J'ai fait un classeur Excel qui lan=E7ait une macro =E0 son=20
ouverture (affichage d'userform).

- Pour =E9viter d'avoir le message "voulez-vous activer les=20
macro ?", j'ai fait cette macro dans un autre classeur=20
qui ouvre mon classeur avec la userform :

Sub Main()
=20
' Start Excel and loads the text file
On Error GoTo Fin
Dim excelApp As Object
Set excelApp =3D CreateObject("Excel.Application")
On Error GoTo 0
excelApp.Visible =3D True
excelApp.Workbooks.OpenText Filename:=3D"C:\Documents=20
and Settings\MARMONIER_C\Bureau\Travail En=20
Cours\CreationComposant.xls"
=20
Fin:

End Sub

- Le probl=E8me avec cette macro c'est que =E7a ouvre le=20
documment mais =E7a ne le met pas actif (=3D> la macro ne se=20
lance pas automatiquemment)

-Alors j'ai ajouter dans mon classeur ( avec l'userform )
un bout de code qui permet =E0 l'ouverture de celui-ci de=20
lui donner la main. Le voici :

Private Declare Function SetWindowPos _
Lib "user32" ( _
ByVal Hwnd As Long, _
ByVal hWndInsertAfter As Long, _
ByVal x As Long, _
ByVal y As Long, _
ByVal cx As Long, _
ByVal cy As Long, _
ByVal wFlags As Long) As Long

Private Declare Function FindWindowA _
Lib "user32" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long

Private Sub Workbook_Open()
=20
Dim Position As Long
Dim Hwnd As Long
Dim Hauteur As Long
Dim Largeur As Long
With Application
Hauteur =3D .Height
Largeur =3D .Width

Hwnd =3D FindWindowA(vbNullString, .Caption)

Position =3D SetWindowPos(Hwnd, -1, _
.Top, _
.Left, _
.Width, _
.Height, 0)

'.Width =3D Largeur
'.Height =3D Hauteur
End With

Application.ActiveWorkbook.Activate
Application.WindowState =3D xlMinimized
AppActivate "Microsoft Excel"

UserForm1.Show

End Sub=20

- c'=E9tait super, =E7a marchait enfin ! ... mais ce n'=E9tait=20
pas fini. Je voulais maintenant ouvrir mon classeur =E0=20
partir du logiciel "PowerLogic" qui =E0 un interpreteur VB=20
(il s'appel Sax Basic Engine). J'ai copier la macro Main=20
dans l'interpreteur et je l'ai lancer. Resultat : =E7a=20
ouvre bien le classeur Excel et mon userform est bien=20
affich=E9e mais =E7a n'active pas Excel : dans la barre des=20
tache Excel clignote (bizare ?! ). Et lorsque je clic le=20
logiciel Power logic pour le r=E9activer, le=20
message "Serveur occup=E9 !
Impossble de terminer cette action car le programme=20
Microsoft Excel ne r=E9pond pas." s'affiche (ce message est=20
issu du logiciel "PowerLogic".
Il semplerait que la macro de Powerlogic ne soit pas=20
encore termin=E9e alors que celle d'Excel a d=E9ja commenc=E9 =E0=20
s'executer =3D> je pense qu'il faudrait arr=E9ter l'execution=20
de la macro powerLogic d=E8s qu'Excel est ouvert et avant=20
que la macro d'excel se lance mais je ne sais pas comment=20
faire

Quelqu'un pourait-il m'aider ?

2 réponses

Avatar
Patrice Henrio
J'ai l'impression que Excell attend,d une réponse dans une boîte de dialogue
(clignotement) mais que celle-ci ne peut pas s'afficher.
Essaie soit Entrée
soit tabulation puis Entrée

"Emcy" a écrit dans le message de
news:1f1b101c389b9$10335320$
salut,

(attention c'est dure à comprendre, je vais
essayer d'être clair) :

- J'ai fait un classeur Excel qui lançait une macro à son
ouverture (affichage d'userform).

- Pour éviter d'avoir le message "voulez-vous activer les
macro ?", j'ai fait cette macro dans un autre classeur
qui ouvre mon classeur avec la userform :

Sub Main()

' Start Excel and loads the text file
On Error GoTo Fin
Dim excelApp As Object
Set excelApp = CreateObject("Excel.Application")
On Error GoTo 0
excelApp.Visible = True
excelApp.Workbooks.OpenText Filename:="C:Documents
and SettingsMARMONIER_CBureauTravail En
CoursCreationComposant.xls"

Fin:

End Sub

- Le problème avec cette macro c'est que ça ouvre le
documment mais ça ne le met pas actif (=> la macro ne se
lance pas automatiquemment)

-Alors j'ai ajouter dans mon classeur ( avec l'userform )
un bout de code qui permet à l'ouverture de celui-ci de
lui donner la main. Le voici :

Private Declare Function SetWindowPos _
Lib "user32" ( _
ByVal Hwnd As Long, _
ByVal hWndInsertAfter As Long, _
ByVal x As Long, _
ByVal y As Long, _
ByVal cx As Long, _
ByVal cy As Long, _
ByVal wFlags As Long) As Long

Private Declare Function FindWindowA _
Lib "user32" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long

Private Sub Workbook_Open()

Dim Position As Long
Dim Hwnd As Long
Dim Hauteur As Long
Dim Largeur As Long
With Application
Hauteur = .Height
Largeur = .Width

Hwnd = FindWindowA(vbNullString, .Caption)

Position = SetWindowPos(Hwnd, -1, _
.Top, _
.Left, _
.Width, _
.Height, 0)

'.Width = Largeur
'.Height = Hauteur
End With

Application.ActiveWorkbook.Activate
Application.WindowState = xlMinimized
AppActivate "Microsoft Excel"

UserForm1.Show

End Sub

- c'était super, ça marchait enfin ! ... mais ce n'était
pas fini. Je voulais maintenant ouvrir mon classeur à
partir du logiciel "PowerLogic" qui à un interpreteur VB
(il s'appel Sax Basic Engine). J'ai copier la macro Main
dans l'interpreteur et je l'ai lancer. Resultat : ça
ouvre bien le classeur Excel et mon userform est bien
affichée mais ça n'active pas Excel : dans la barre des
tache Excel clignote (bizare ?! ). Et lorsque je clic le
logiciel Power logic pour le réactiver, le
message "Serveur occupé !
Impossble de terminer cette action car le programme
Microsoft Excel ne répond pas." s'affiche (ce message est
issu du logiciel "PowerLogic".
Il semplerait que la macro de Powerlogic ne soit pas
encore terminée alors que celle d'Excel a déja commencé à
s'executer => je pense qu'il faudrait arréter l'execution
de la macro powerLogic dès qu'Excel est ouvert et avant
que la macro d'excel se lance mais je ne sais pas comment
faire

Quelqu'un pourait-il m'aider ?
Avatar
Emcy
Salut,

Je pense que c'est plustot PowerLogic qui attend qu'excel
finisse de lancer ça macro. Le problème c'est qu'il
faudrait que la macro de PowerLogic se stop entre le
moment où il ouvre Excel et le moment où Excel lance sa
macro. la commande (dans powerlogic) "Set excelApp =
CreateObject("Excel.Application")" crée une liaison avec
EXcel. N'exite-t-il pas un autre moyen d'ouvrir mon
classeur ?

-----Message d'origine-----
J'ai l'impression que Excell attend,d une réponse dans


une boîte de dialogue
(clignotement) mais que celle-ci ne peut pas s'afficher.
Essaie soit Entrée
soit tabulation puis Entrée

"Emcy" a écrit dans le message de
news:1f1b101c389b9$10335320$
salut,

(attention c'est dure à comprendre, je vais
essayer d'être clair) :

- J'ai fait un classeur Excel qui lançait une macro à son
ouverture (affichage d'userform).

- Pour éviter d'avoir le message "voulez-vous activer les
macro ?", j'ai fait cette macro dans un autre classeur
qui ouvre mon classeur avec la userform :

Sub Main()

' Start Excel and loads the text file
On Error GoTo Fin
Dim excelApp As Object
Set excelApp = CreateObject("Excel.Application")
On Error GoTo 0
excelApp.Visible = True
excelApp.Workbooks.OpenText Filename:="C:Documents
and SettingsMARMONIER_CBureauTravail En
CoursCreationComposant.xls"

Fin:

End Sub

- Le problème avec cette macro c'est que ça ouvre le
documment mais ça ne le met pas actif (=> la macro ne se
lance pas automatiquemment)

-Alors j'ai ajouter dans mon classeur ( avec l'userform )
un bout de code qui permet à l'ouverture de celui-ci de
lui donner la main. Le voici :

Private Declare Function SetWindowPos _
Lib "user32" ( _
ByVal Hwnd As Long, _
ByVal hWndInsertAfter As Long, _
ByVal x As Long, _
ByVal y As Long, _
ByVal cx As Long, _
ByVal cy As Long, _
ByVal wFlags As Long) As Long

Private Declare Function FindWindowA _
Lib "user32" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long

Private Sub Workbook_Open()

Dim Position As Long
Dim Hwnd As Long
Dim Hauteur As Long
Dim Largeur As Long
With Application
Hauteur = .Height
Largeur = .Width

Hwnd = FindWindowA(vbNullString, .Caption)

Position = SetWindowPos(Hwnd, -1, _
.Top, _
.Left, _
.Width, _
.Height, 0)

'.Width = Largeur
'.Height = Hauteur
End With

Application.ActiveWorkbook.Activate
Application.WindowState = xlMinimized
AppActivate "Microsoft Excel"

UserForm1.Show

End Sub

- c'était super, ça marchait enfin ! ... mais ce n'était
pas fini. Je voulais maintenant ouvrir mon classeur à
partir du logiciel "PowerLogic" qui à un interpreteur VB
(il s'appel Sax Basic Engine). J'ai copier la macro Main
dans l'interpreteur et je l'ai lancer. Resultat : ça
ouvre bien le classeur Excel et mon userform est bien
affichée mais ça n'active pas Excel : dans la barre des
tache Excel clignote (bizare ?! ). Et lorsque je clic le
logiciel Power logic pour le réactiver, le
message "Serveur occupé !
Impossble de terminer cette action car le programme
Microsoft Excel ne répond pas." s'affiche (ce message est
issu du logiciel "PowerLogic".
Il semplerait que la macro de Powerlogic ne soit pas
encore terminée alors que celle d'Excel a déja commencé à
s'executer => je pense qu'il faudrait arréter l'execution
de la macro powerLogic dès qu'Excel est ouvert et avant
que la macro d'excel se lance mais je ne sais pas comment
faire

Quelqu'un pourait-il m'aider ?


.