VBA PC automatisation macro

  • Initiateur de la discussion quenotte65
  • Date de début
Q

quenotte65

Guest
Bonjour à tous,

Je débute dans le vba et je ne sais pas trop comment faire pour créer une macro qui attendrait la fin de l'éxecution d'un programme.

La difficulté première vient du fait que le programme doit remplir directement un modele qui sera enregistré ensuite en tant que xls.

J'ai mis trouvé un code dans la littérature pour attendre la fin de l'execution du programme mais le probleme est qu'il a besoin de declaration de fonction et le thisworkbook n'accepte pas les déclarations de fonctions apparament


voici ce code


Private Sub Workbook_Open()


'declarations
Dim TaskID As Long
Dim hProc As Long
Dim lExitcode As Long

'attributions aux variables
access_type = &H400
still_active = &H103

program = 'rapports.exe'
On Error Resume Next

TaskID = Shell(program, vbNormalFocus)
hProc = OpenProcess(acces_type, False, TaskID)

'traitements des erreurs
If Err <> 0 Then
MsgBox 'Impossible de démarrer' & program, vbCritical, 'erreur'
Exit Sub
End If

'boucle d'attente
Do
GetExitCodeProcess hProc, lExitcode
DoEvents
Loop While lExitcode = still_active
'fin boucle d'attente

MsgBox program & ' n'est plus l'application active'

'destruction du code du wb
With ActiveWorkbook.VBProject.VBComponents('ThisWorkbook').CodeModule
.DeleteLines 1, .CountOfLines
End With
'fin destruction du code du wb

End Sub

'fonctions

Declare Function OpenProcess Lib 'kernel32' (ByVal dwDesiredAccess As
Long,
ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long

Declare Function GetExitCodeProcess Lib 'kernel32' (ByVal hProcess As
Long,
lpExitCode As Long) As Long


Quelqu un peut il m'aider pour resoudre ce probleme?

Je suis ouvert à toute suggestion

A bientot :)
 
Q

quenotte65

Guest
J'ai essayé dans le module 'normal' (pas de classe) mais ca n'a rien donné

J'ai également tenté en mettant tout le code dans le module, ca ne donne rien.

Je vais tenter en faisant les déclarations dans les feuilles, et dans le module de classe aussi, pour voir l'effet que ca fait.

Si tu pouvais m'expliquer, au passage, ce qu'est un module de classe ou si tu connais un site qui donne une définition claire, ce serait chouette. Dans les bouquins je n'ai rien compris.

Merci
 

Abel

XLDnaute Accro
Re,

Le module de classe est un endroit o&ugrave; on met du code qui pourra être vu de tout le projet.

Feuil1 à x (version française) est plutôt destiné à du code orienté sur la feuille considérée et à de l'évennementiel (c'est à dire qui se déclenche lorsque tel ou tel évennement se produit. 'Quand clic sur bouton1' par exemple) 'appartenant' à la feuille.

Thisworkbook est plutôt pour les macro évennementielles liées aux classeur. Exemple d'évennement (et très classique) gérés, ouverture du classeur, avant fermeture du classeur, etc.

En espérant t'avoir un peu éclairé.

Abel.

Edition : marrant ce pseudo. Me rappelle une autre vie.

Message édité par: Abel, à: 05/04/2005 17:32
 
Q

quenotte65

Guest
effectivement ca a à l'air chouette le .run sur un Object. Je vais voir ca. Merci Michel

Sinon j'ai testé avec les déclarations dans une feuille. Le programme est effectivement attendu mais du coup, je ne sais pas pour quoi le remplissage du modéle n'a pas lieu. Merci pour l'idée Abel


Questions betes:

pour appeler une macro il faut depuis le thisworkbook il faut juste taper son nom ou taper nomdelamacro.Open

J'avoue n'avoir jamais codé que sur ma TI 92 avant à deux petits prog en C++ près alors du coup j'ai de grosses lacunes.


En tout cas je vous dit un gros merci ;)

Note: je ne pourrai poursuivre qu'à partir de demain
 

Abel

XLDnaute Accro
Re,

Je reviens ici un peu penaud après avoir pris un petit cours VBA (merci Didier_mDF et Hervé).

L'explication que je donnais un peu plus haut pour le module de classe s'applique au module standard.

Le module de classe sert, si j'ai bien compris et entre eutres, a gérer des évennements au niveau application.
C'est notamment intéressant quand on a des 'morceaux' de procédure répétitifs pour limiter les lignes de code mais c'est plus ardu comme programmation et ça demande beaucoup de rigueur pour la déclaration des variables.
Mon conseil, qui n'engage que moi, à n'utiliser que si on a un bon niveau en VBA (voire en VB) ou en cas de nécessité incontournable.

Michel, je ne t'en aurais pas voulu si tu m'avais repris... hi hi.

Bonne journée.

Abel.
 

Discussions similaires