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

[VBA XL] comment connaitre les raccourcis clavier affectés aux macros ?

13 réponses
Avatar
JièL
Salutatousses,

En VBA, quelle(s) instruction(s)/bidouille(s) permet de savoir si un
raccourci clavier est affecté à une macro (sub) ?

Merci d'avance

--
JièL qui va avoir plein de questions ALC

10 réponses

1 2
Avatar
DanielCo
Bonjour JièL,
Ca va être assez pénible à faire (pour moi, au moins). Peut-être pour ce soir.
Cordialement.
Daniel

JièL a présenté l'énoncé suivant :
Salutatousses,

En VBA, quelle(s) instruction(s)/bidouille(s) permet de savoir si un
raccourci clavier est affecté à une macro (sub) ?

Merci d'avance
Avatar
isabelle
salut JièL,

voici un exemple,

Sub SupprimeToutCodeEtFormulaire()
Dim VBComp As Object
Dim VBComps As Object
Set VBComps = ThisWorkbook.VBProject.VBComponents
For Each VBComp In VBComps
Select Case VBComp.Type
Case 100
With VBComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
Case Else
VBComps.Remove VBComp
End Select
Next VBComp
End Sub


isabelle

Le 2015-10-29 05:59, JièL a écrit :
Salutatousses,

En VBA, quelle(s) instruction(s)/bidouille(s) permet de savoir si un raccourci
clavier est affecté à une macro (sub) ?

Merci d'avance

Avatar
DanielCo
Un premier jet (si "Sub" en colonne 1, si pas "Public"...
Sub test1()
Dim Ligne As Long, Wbk As Workbook, M As Object, Macro As String, Enrgt As
String, Res As String
Dim Txt As Variant
Set Wbk = ThisWorkbook
Macro = "test"
For Each M In Wbk.VBProject.VBComponents
If M.Type = 1 Then
Wbk.VBProject.VBComponents(M.Name).Export "c:temp" & M.Name & ".bas"
Close #1
Open "c:temp" & M.Name & ".bas" For Input As #1
Do While Not EOF(1)
Line Input #1, Enrgt
If InStr(1, Enrgt, "Sub") = 1 Then
Txt = Replace(Enrgt, "Sub ", "")
Res = Split(Txt, "()")(0)
If Res = Macro Then
Line Input #1, Enrgt
If InStr(1, Enrgt, "Attribute") = 1 Then
MsgBox Right(Split(Enrgt, "n14")(0), 1)
Exit Sub
End If
End If
End If
Loop
Close #1
End If
Next
Kill "c:temp" & M.Name & ".bas"
End Sub
Daniel
Il se trouve que JièL a formulé :
Salutatousses,

En VBA, quelle(s) instruction(s)/bidouille(s) permet de savoir si un
raccourci clavier est affecté à une macro (sub) ?

Merci d'avance
Avatar
DanielCo
Heu, la macro, c'est plutôt : voici le nom de la macro, quel est son raccourci.
Daniel
JièL avait écrit le 29/10/2015 :
Salutatousses,

En VBA, quelle(s) instruction(s)/bidouille(s) permet de savoir si un
raccourci clavier est affecté à une macro (sub) ?

Merci d'avance
Avatar
isabelle
oups mauvais aiguillage,
c'était pour la question [VBA XL] Macro qui s'autodétruit
isabelle

Le 2015-10-29 09:51, isabelle a écrit :
salut JièL,

voici un exemple,

Sub SupprimeToutCodeEtFormulaire()
Dim VBComp As Object
Dim VBComps As Object
Set VBComps = ThisWorkbook.VBProject.VBComponents
For Each VBComp In VBComps
Select Case VBComp.Type
Case 100
With VBComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
Case Else
VBComps.Remove VBComp
End Select
Next VBComp
End Sub


isabelle

Le 2015-10-29 05:59, JièL a écrit :
Salutatousses,

En VBA, quelle(s) instruction(s)/bidouille(s) permet de savoir si un raccourci
clavier est affecté à une macro (sub) ?

Merci d'avance

Avatar
MichD
Bonjour,

Une macro de Laurent Longre qui fait ce que tu demandes...
Elle liste les macros associées aux raccourcis claviés.

'-----------------------------------------------------------------
Sub ListeMacros()
Dim Macro As String, Racc As String
Dim Rpt As String, I As Integer

Application.ScreenUpdating = False
Workbooks.Add.Worksheets(1).[A1:B1] = [{"Procédure","Raccourci"}]

SendKeys "%{F8}%a{PGUP}{TAB}{ESC}"

'nécessite une référence à la bibliothèque
'Microsoft Forms 2.0 Object Library
With New DataObject
Do
Rpt = "%{F8}{TAB}" & Application.Rept("{DOWN}", I)
SendKeys Rpt & "%n^c{ESC}", True
.GetFromClipboard
If Macro = .GetText(1) Then Exit Do
Macro = .GetText(1)
SendKeys Rpt & "%t^c{ESC}{ESC}", True
.GetFromClipboard
Racc = .GetText(1)
I = I + 1
Cells(I + 1, 1) = Macro
If Racc <> Macro Then Cells(I + 1, 2) = "Ctrl-" & Racc
Loop
End With
With Columns("A:B")
.AutoFit
.Sort [A1], Header:=xlYes
.CurrentRegion.AutoFormat xlRangeAutoFormatColor2
End With
End Sub
'-----------------------------------------------------------------
Avatar
JièL
Merci DanielCo, la bidouille fonctionne bien.
L'enregistrement en .bas est la seule solution pour savoir quel est le
raccourci clavier ?

Je suis quand même surpris que ça soit "accessible" via un fichier texte
en pas directement dans le VBA

Si tu as d'autres idées, je prend, mais déjà merci beaucoup pour celle là

--
JièL

Le 29/10/2015 15:48, DanielCo a écrit :
Sub test1()
Dim Ligne As Long, Wbk As Workbook, M As Object, Macro As String, Enrgt
As String, Res As String
Dim Txt As Variant
Set Wbk = ThisWorkbook
Macro = "test"
For Each M In Wbk.VBProject.VBComponents
If M.Type = 1 Then
Wbk.VBProject.VBComponents(M.Name).Export "c:temp" & M.Name &
".bas"
Close #1
Open "c:temp" & M.Name & ".bas" For Input As #1
Do While Not EOF(1)
Line Input #1, Enrgt
If InStr(1, Enrgt, "Sub") = 1 Then
Txt = Replace(Enrgt, "Sub ", "")
Res = Split(Txt, "()")(0)
If Res = Macro Then
Line Input #1, Enrgt
If InStr(1, Enrgt, "Attribute") = 1 Then
MsgBox Right(Split(Enrgt, "n14")(0), 1)
Exit Sub
End If
End If
End If
Loop
Close #1
End If
Next
Kill "c:temp" & M.Name & ".bas"
End Sub
Avatar
JièL
Merci MichD, mais...
"Microsoft Forms 2.0 Object Library" n'est pas listé dans Excel 2010
(oublié de précisé la version), mais même si je la rajoute "à la main"
il doit y avoir un truc qui ne va pas car je ne retrouve pas le
raccourci clavier, juste le nom de la macro

Outre le fait que les sendkeys... bof bof et que je dois faire ça pour
une version FR et aussi pour une US, voire pour une DE :-(

Je vais quand même essayer de comprendre ce que font tout ces sendkeys

Merci

--
JièL

Le 29/10/2015 18:39, MichD a écrit :
Bonjour,

Une macro de Laurent Longre qui fait ce que tu demandes...
Elle liste les macros associées aux raccourcis claviés.

'-----------------------------------------------------------------
Sub ListeMacros()
Dim Macro As String, Racc As String
Dim Rpt As String, I As Integer

Application.ScreenUpdating = False
Workbooks.Add.Worksheets(1).[A1:B1] = [{"Procédure","Raccourci"}]

SendKeys "%{F8}%a{PGUP}{TAB}{ESC}"

'nécessite une référence à la bibliothèque
'Microsoft Forms 2.0 Object Library
With New DataObject
Do
Rpt = "%{F8}{TAB}" & Application.Rept("{DOWN}", I)
SendKeys Rpt & "%n^c{ESC}", True
.GetFromClipboard
If Macro = .GetText(1) Then Exit Do
Macro = .GetText(1)
SendKeys Rpt & "%t^c{ESC}{ESC}", True
.GetFromClipboard
Racc = .GetText(1)
I = I + 1
Cells(I + 1, 1) = Macro
If Racc <> Macro Then Cells(I + 1, 2) = "Ctrl-" & Racc
Loop
End With
With Columns("A:B")
.AutoFit
.Sort [A1], Header:=xlYes
.CurrentRegion.AutoFormat xlRangeAutoFormatColor2
End With
End Sub
'-----------------------------------------------------------------

Avatar
JièL
Toi tu devrais arrêter le sirop d'érable ;-)

Merci, je teste ta solution quand même ;-)

--
JièL

Le 29/10/2015 15:56, isabelle a écrit :
oups mauvais aiguillage,
c'était pour la question [VBA XL] Macro qui s'autodétruit
isabelle

Le 2015-10-29 09:51, isabelle a écrit :
salut JièL,

voici un exemple,

Sub SupprimeToutCodeEtFormulaire()
Dim VBComp As Object
Dim VBComps As Object
Set VBComps = ThisWorkbook.VBProject.VBComponents
For Each VBComp In VBComps
Select Case VBComp.Type
Case 100
With VBComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
Case Else
VBComps.Remove VBComp
End Select
Next VBComp
End Sub


isabelle

Le 2015-10-29 05:59, JièL a écrit :
Salutatousses,

En VBA, quelle(s) instruction(s)/bidouille(s) permet de savoir si un
raccourci
clavier est affecté à une macro (sub) ?

Merci d'avance

Avatar
MichD
|Microsoft Forms 2.0 Object Library

Cette bibliothèque s'ajoute automatiquement lorsqu'on insère un "formulaire"
dans un projetVBA, sinon, on doit l'insérer manuellement à partir du menu
Outils / références. Cette bibliothèque permet l'utilisation de l'objet "DataObject"
pour accéder au contenu du presse-papier.

À la décharge de Laurent, cette macro date d'avant Excel 2007. La séquence des
touches utilisées par "SendKeys" ne doit plus convenir!
1 2