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

[VBA] Lancer une commande de compilation via VBA

10 réponses
Avatar
JièL
Salutatousses

sans sendkeys, comment puis-je lancer la commande "Compiler VBAProject"
du menu Débogage du VBE ?

Merci d'avance

--
JièL con pie lateur

10 réponses

Avatar
MichD
Bonjour,

Tu as des questions très étranges...!

Un exemple :

Suppose que tu as ce code dans le module de la feuil1

La compilation dans Excel se fait au fur et à mesure de la saisie du code...
si tu n'ajoutes aucun code, la commande "Compiler le projetVBA du menu débogage"
est inactive. Une manière de contourner le problème est j'ajouter un bout de code
dans le module avant d'appeler la commande "SendKeys".

Si tu exécute la macro "Test" à partir de l'interface de la feuille de calcul,
Excel devrait t'afficher qu'il y a une erreur avec cette ligne de code
10 = x <>1 dans la procédure "toto".

'-------------------------------------------------
Sub test()
Dim Code As String

Code = "Sub Bonjour()" & vbCrLf
Code = Code & "Msgbox ""Bonjour à toi.""" & vbCrLf
Code = Code & "End Sub"

ThisWorkbook.VBProject.VBComponents("Feuil1").CodeModule.AddFromString Code

SendKeys "%{F11}" + "%Dl"

End Sub

'-------------------------------------------------
Sub toto()

10 = x <>1

End Sub
'-------------------------------------------------
Avatar
JièL
Hello,

Le 04/12/2015 20:42, MichD a écrit :
Bonjour,

Tu as des questions très étranges...!



Ah bon, tu trouves ? ;-)
Pour tout te/vous dire, j'essaye de tester les connaissances de
personnes en VBA, donc je dois vérifier ce qu'elle savent faire, et ceci
en VBA/VBS donc sans bloquer la vérif

dans le module avant d'appeler la commande "SendKeys".



Nan, MichD, je voudrais justement EVITER le sendkeys.

J'ai avancé et j'ai pu trouver ceci

Excel.Application.VBE.CommandBars.FindControl(ID:W8).Execute
Ca lance une compilation, et ça ça marche, mais...
...après je voudrais (évidement) récupérer l'erreur de compil et,
théoriquement, faire un Ctrl+C sur une boite de dialogue copie le texte
de cette dernière dans le presse papier, sauf que dans le cas ci
dessous, msgbox txt affiche l'ancien contenu du PP et que si on colle
manuellement une fois le prog terminé ben y'a le nouveau contenu

Sub test()
select
End Sub

Sub RecupErrCompil()
' cocher "Microsoft Forms 2.0 Object Library"
Dim PP As New MSForms.DataObject, Txt As String
PP.GetFromClipboard
SendKeys "^c~"
Excel.Application.VBE.CommandBars.FindControl(ID:W8).Execute
Txt = PP.GetText()
MsgBox Txt
End Sub

Est-ce que qq'un aurait une idée pour récupérer l'erreur qui se serait
affiché ?

Encore merci de prendre le temps de vous casser la tête sur mes
questions "étranges". ;-)

--
JièL poseur de questions 13 hé tran jeux
Avatar
JièL
Bon, je m'auto-répond ;-)

en fait, pour une raison que j'ignore, il semblerait que la récup du
contenu du presse-papier soit "lente" (ou légèrement différée).

une temporisation d'une seconde (mini d'après mes tests) est nécessaire.
Donc (si ça peut servir à d'autres qui ont des questions 13 et tranges)

Sub test()
select
End Sub

Sub RecupErrCompil()
' cocher "Microsoft Forms 2.0 Object Library"
Dim PP As New MSForms.DataObject, Txt As String
SendKeys "^c{ESC}" ' envoi Ctrl+C et Escape pour copier et fermer
la boite de dialogue
On Error Resume Next ' si la compil n'est pas possible/dispo
Excel.Application.VBE.CommandBars.FindControl(ID:W8).Execute
'lance la compil
Application.Wait Now + (1 / 86400) ' attend 1 seconde
PP.GetFromClipboard ' récup le contenu du presse papier
Txt = PP.GetText() ' récup du texte du pp
MsgBox Txt ' affiche la récup
End Sub

Le coté amusant des forums c'est que le fait de poser sa question aide à
la résoudre ;-)

Merci

--
JièL résolveur de ses propres questions ;-)


Le 05/12/2015 10:41, JièL a écrit :
Hello,

Le 04/12/2015 20:42, MichD a écrit :
Bonjour,

Tu as des questions très étranges...!



Ah bon, tu trouves ? ;-)
Pour tout te/vous dire, j'essaye de tester les connaissances de
personnes en VBA, donc je dois vérifier ce qu'elle savent faire, et ceci
en VBA/VBS donc sans bloquer la vérif

dans le module avant d'appeler la commande "SendKeys".



Nan, MichD, je voudrais justement EVITER le sendkeys.

J'ai avancé et j'ai pu trouver ceci

Excel.Application.VBE.CommandBars.FindControl(ID:W8).Execute
Ca lance une compilation, et ça ça marche, mais...
...après je voudrais (évidement) récupérer l'erreur de compil et,
théoriquement, faire un Ctrl+C sur une boite de dialogue copie le texte
de cette dernière dans le presse papier, sauf que dans le cas ci
dessous, msgbox txt affiche l'ancien contenu du PP et que si on colle
manuellement une fois le prog terminé ben y'a le nouveau contenu

Sub test()
select
End Sub

Sub RecupErrCompil()
' cocher "Microsoft Forms 2.0 Object Library"
Dim PP As New MSForms.DataObject, Txt As String
PP.GetFromClipboard
SendKeys "^c~"
Excel.Application.VBE.CommandBars.FindControl(ID:W8).Execute
Txt = PP.GetText()
MsgBox Txt
End Sub

Est-ce que qq'un aurait une idée pour récupérer l'erreur qui se serait
affiché ?

Encore merci de prendre le temps de vous casser la tête sur mes
questions "étranges". ;-)

Avatar
MichD
| je voudrais justement EVITER le sendkeys.

Encore faut-il le spécifier dans ta question...

a ) Pour récupérer le ID de chaque commande du menu de la fenêtre de l'éditeur de code (VBA)

'--------------------------------------------------------------------
Sub Test()
Dim Ctrl As CommandBarControl
Dim C As CommandBarControl
Dim A As Long

With ThisWorkbook.VBProject.VBE
For Each Ctrl In .CommandBars(1).Controls
A = A + 1
Range("A" & A) = Ctrl.Caption
Range("B" & A) = Ctrl.ID
For Each C In Ctrl.Controls
A = A + 1
Range("A" & A) = C.Caption
Range("B" & A) = C.ID
Next
A = A + 1
Next
End With
End Sub

'--------------------------------------------------------------------


Une question peut être étrange, cela ne signifie pas qu'il ne faut pas la poser ou qu'elle
est inintéressante... Depuis mes débuts avec Excel, c'est la première fois que quelqu'un
s'intéresse à ce type de situation!
Avatar
Jacquouille
Salut Jièl

Et si tu pensais plutôt à St Nicolas?



Jacques
" Le vin est au repas ce que le parfum est à la femme."
.
"JièL" a écrit dans le message de groupe de discussion :
n3ubh8$pfn$

Hello,

Le 04/12/2015 20:42, MichD a écrit :
Bonjour,

Tu as des questions très étranges...!



Ah bon, tu trouves ? ;-)
Pour tout te/vous dire, j'essaye de tester les connaissances de
personnes en VBA, donc je dois vérifier ce qu'elle savent faire, et ceci
en VBA/VBS donc sans bloquer la vérif

dans le module avant d'appeler la commande "SendKeys".



Nan, MichD, je voudrais justement EVITER le sendkeys.

J'ai avancé et j'ai pu trouver ceci

Excel.Application.VBE.CommandBars.FindControl(ID:W8).Execute
Ca lance une compilation, et ça ça marche, mais...
...après je voudrais (évidement) récupérer l'erreur de compil et,
théoriquement, faire un Ctrl+C sur une boite de dialogue copie le texte
de cette dernière dans le presse papier, sauf que dans le cas ci
dessous, msgbox txt affiche l'ancien contenu du PP et que si on colle
manuellement une fois le prog terminé ben y'a le nouveau contenu

Sub test()
select
End Sub

Sub RecupErrCompil()
' cocher "Microsoft Forms 2.0 Object Library"
Dim PP As New MSForms.DataObject, Txt As String
PP.GetFromClipboard
SendKeys "^c~"
Excel.Application.VBE.CommandBars.FindControl(ID:W8).Execute
Txt = PP.GetText()
MsgBox Txt
End Sub

Est-ce que qq'un aurait une idée pour récupérer l'erreur qui se serait
affiché ?

Encore merci de prendre le temps de vous casser la tête sur mes
questions "étranges". ;-)

--
JièL poseur de questions 13 hé tran jeux


---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
http://www.avast.com
Avatar
Jacquouille
Salut Denis

Attends la suivante, ce sera sur la courbe d'atterrissage d'un OVNI, qui,
bien évidemment, variera suivant la t° au sol. -))


Jacques
" Le vin est au repas ce que le parfum est à la femme."
.
"MichD" a écrit dans le message de groupe de discussion :
n3ukf2$ddu$

| je voudrais justement EVITER le sendkeys.

Encore faut-il le spécifier dans ta question...



Une question peut être étrange, cela ne signifie pas qu'il ne faut pas la
poser ou qu'elle
est inintéressante... Depuis mes débuts avec Excel, c'est la première fois
que quelqu'un
s'intéresse à ce type de situation!


---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
http://www.avast.com
Avatar
JièL
Jacquouille, je t'interdis de dévoiler mes prochaines questions, tu
brise tout l'effet de surprise ;-)

--
JièL sur preneur/prenant


Le 06/12/2015 15:21, Jacquouille a écrit :
Salut Denis

Attends la suivante, ce sera sur la courbe d'atterrissage d'un OVNI,
qui, bien évidemment, variera suivant la t° au sol. -))


Jacques
" Le vin est au repas ce que le parfum est à la femme."
.
"MichD" a écrit dans le message de groupe de discussion :
n3ukf2$ddu$

| je voudrais justement EVITER le sendkeys.

Encore faut-il le spécifier dans ta question...



Une question peut être étrange, cela ne signifie pas qu'il ne faut pas
la poser ou qu'elle
est inintéressante... Depuis mes débuts avec Excel, c'est la première
fois que quelqu'un
s'intéresse à ce type de situation!


---
L'absence de virus dans ce courrier électronique a été vérifiée par le
logiciel antivirus Avast.
http://www.avast.com

Avatar
JièL
Hello,

Le 05/12/2015 13:14, MichD a écrit :
| je voudrais justement EVITER le sendkeys.

Encore faut-il le spécifier dans ta question...



j'avais écrit ceci

Salutatousses

sans sendkeys, comment puis-je...

est-ce que ça n'est pas suffisamment clair ? ;-)

a ) Pour récupérer le ID de chaque commande du menu de la fenêtre de
l'éditeur de code (VBA)



Très intéressant, merci, mais... (oui, je sais, je suis ch*** ;-D)
Bizarrement, j'ai des doublons d'ID, comment est-ce possible ?
voici les doublons
Nom ID
&Nouveau projet 746
&Fermer le projet 746
&Supprimer Module1... 746
Créer EXE... 746
Ajouter 746
Ajouter 746
Ajouter 746
Ajouter 746
C&omposants... 746
&Signature électronique... 746
&1 Module1 (Code) 830
&3 PERSONAL.XLSB - Module1 (Code) 830
&4 PERSONAL.XLSB - Module2 (Code) 830
&5 PERSONAL.XLSB - ThisWorkbook (Code) 830
&6 PERSONAL.XLSB - Module3 (Code) 830
&Nom de fenêtre 830

et si c'est normal, comment j'active telle ou telle commande qui aurait
le même id ???

Et aussi un truc étrange, j'ai des noms et des ID qui correspondent à
des commandes que je ne vois même pas, notamment une qui m'a sauté à la
figure "Créer EXE... 746"

Une question peut être étrange, cela ne signifie pas qu'il ne faut pas
la poser ou qu'elle
est inintéressante... Depuis mes débuts avec Excel, c'est la première
fois que quelqu'un
s'intéresse à ce type de situation!



Ben faut dire que généralement les utilisateurs cherchent à résoudre un
pb Excel, moi je cherche ici à résoudre des pb VBA, donc je comprend que
ça soit hé tran jeux ;-)

Encore merci pour ton aide sur mes questions si bizarres.

--
JièL Bis hareu
Avatar
MichD
Utilise plutôt cette macro, elle va afficher seulement les commandes
des menus qui sont affichées.

Le seul "ID" qui s'affiche 3 fois est 746. Il représente 3 commandes
différentes :
A ) "&Supprimer Feuil1..." du menu fichier
B ) "&Signature électronique.." du menu Outils
C ) "MSDN sur le &Web" du menu ?

Si tu essaies d'exécuter cette ligne de code :
Application.VBE.CommandBars.FindControl(ID:t6).Execute
On obtient une erreur : "erreur automation - erreur non spécifiée"

Je suppose qu'une commande comme "Supprimer Feuil1..." émane
d'une très vieille version d'Excel. Je n'ai aucune idée ce que cette
commande peut effectuer comme travail dans une fenêtre VBA.

Si tu fais un clic droit sur la barre des menus, il y a la commande
"Personnaliser" qui te permet de modifier les commandes des sous-menus.

'-------------------------------------------------------------
Sub Test()
Dim Ctrl As CommandBarControl
Dim C As CommandBarControl
Dim A As Long

With ThisWorkbook.VBProject.VBE
Range("A1") = .CommandBars(1).Name
For Each Ctrl In .CommandBars("Barre de menus").Controls
A = A + 1
Range("A" & A) = Ctrl.Caption
Range("B" & A) = Ctrl.ID
For Each C In Ctrl.Controls
If C.Visible = True Then 'Ligne de code ajoutée
A = A + 1
Range("A" & A) = C.Caption
Range("B" & A) = C.ID
End If
Next
A = A + 1
Next
End With
End Sub
'-------------------------------------------------------------
Avatar
JièL
C'est nickel, merci

--
JièL


Le 07/12/2015 18:35, MichD a écrit :
Utilise plutôt cette macro, elle va afficher seulement les commandes
des menus qui sont affichées.

Le seul "ID" qui s'affiche 3 fois est 746. Il représente 3 commandes
différentes :
A ) "&Supprimer Feuil1..." du menu fichier
B ) "&Signature électronique.." du menu Outils
C ) "MSDN sur le &Web" du menu ?

Si tu essaies d'exécuter cette ligne de code :
Application.VBE.CommandBars.FindControl(ID:t6).Execute
On obtient une erreur : "erreur automation - erreur non spécifiée"

Je suppose qu'une commande comme "Supprimer Feuil1..." émane
d'une très vieille version d'Excel. Je n'ai aucune idée ce que cette
commande peut effectuer comme travail dans une fenêtre VBA.

Si tu fais un clic droit sur la barre des menus, il y a la commande
"Personnaliser" qui te permet de modifier les commandes des sous-menus.

'-------------------------------------------------------------
Sub Test()
Dim Ctrl As CommandBarControl
Dim C As CommandBarControl
Dim A As Long

With ThisWorkbook.VBProject.VBE
Range("A1") = .CommandBars(1).Name
For Each Ctrl In .CommandBars("Barre de menus").Controls
A = A + 1
Range("A" & A) = Ctrl.Caption
Range("B" & A) = Ctrl.ID
For Each C In Ctrl.Controls
If C.Visible = True Then 'Ligne de code ajoutée
A = A + 1
Range("A" & A) = C.Caption
Range("B" & A) = C.ID
End If
Next
A = A + 1
Next
End With
End Sub
'-------------------------------------------------------------