XL 2021 Editeur VBA - Raccourci pour Redo ?

  • Initiateur de la discussion Initiateur de la discussion Dudu2
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Dudu2

XLDnaute Barbatruc
Bonjour,
Dans l'éditeur VBA, on peut faire Ctrl + z pour Undo.
Par contre Ctrl + y ne fait pas le Redo. Y a-t-il un raccourci ?
 
Solution
Mais je vais voir si avec un petit outil Windows qui génère des touches je peux y arriver.
Salut,
il y a AutoHotKey qui permet cela. Voici un script AHK qui permet de mapper CTRL+Y en ALT+e+é :
Code:
#SingleInstance Ignore  ; empêche une nouvelle instance d'être lancée
#HotIf WinActive("Microsoft Visual Basic pour Applications") ; condition pour exécuter le raccourci
^y::
{
   ; MsgBox "Vous avez appuyé sur CTRL-Y"
   Send "%eé" ; envoyer ALT+e+é -> Refaire
}

On le lance en double cliquant dessus dans l'explorateur de fichier. Il y a alors une icône verte avec un H dans le systemTray, avec un clic droit dessus , on peut faire différentes actions comme par exemple arrêter le script.
Le script vérifie si on a déjà une...
Bonjour
sujet au quel j'ai pensé pendant le dev du vba indenter interface

mais c'est normal qu'il n'y en ai pas

le ctrl+z gère tout les vbcomponents les fenêtres(modules tout type ) sans distinction
il n'y a donc pas de Redo possible sauf fonction perso donc pour undo aussi mais ça te limite a un module du VBE.codepane en l’occurrence celui qui est actif

En VBA, dans l’éditeur VBE, on dispose bien d’Annuler (Ctrl+Z), mais pas de Rétablir (Ctrl+Y) comme dans Word ou Excel.
Ce n’est pas un oubli : c’est une limitation structurelle du moteur du VBE (VBE6.DLL).


Techniquement parlant :
  1. Le VBE implémente une pile d’annulation (Undo Stack).
  2. Mais il n’existe pas de pile de rétablissement (Redo Stack) → dès que l’on fait Ctrl+Z, l’action est perdue, il n’y a rien à “réappliquer”.
Certaines idées sont envisageables add-ins comme
Rubberduck, gestion de snapshots de modules
hook clavier API…),

mais elles sont :
  1. Lourdes à mettre en œuvre,
  2. consommatrices en mémoire (sauvegarde des modules complets),
  3. et surtout fragiles, car le VBE n’est pas prévu pour ça.
Donc
il n’existe pas de vrai Ctrl+Y dans le VBE, et même les compléments les plus avancés (MZ-Tools, Rubberduck) ne l’ont pas intégré justement pour ces raisons.
il faudrait enregistrer dans le stack le code entier du module à chaque touche tapée ca ferait beaucoup selon moi



En résumé :
  1. Non possible nativement.
  2. Possible en théorie avec des bricolages, mais trop instables et coûteux pour être utile en pratique. on ne fait pas de ctrl+z a tout bout de champ ni de redo d'ailleurs
 
Bonjour @patricktoulon,

Merci pour cette explication complète.
Mais quand on clique là-dessus, y a bien un process qui est déclenché ?! Il serait impossible d'y associer un raccourci ?

1755881166614.png


Alors je vais faire un raccourci qui dans un Complément, clique sur cette flèche.
Pour la position curseur, ce sera à la louche à moins de pouvoir identifier l'endroit mais je n'y crois pas trop.
 
si tu le trouve le bouton

application.vbe.commandbars("nom de la barre").controls("nom du control "ou son index).execute

tu peux te lister les commandbars du VBE et leur control et choper le id qui sait
VB:
Sub test()
 Dim cmb As CommandBar, c&, i&, ctrl, n$
 For Each cmb In Application.VBE.CommandBars
        c = c + 1
        i = 1
        Cells(1, c) = cmb.Name
        For Each ctrl In cmb.Controls
            On Error Resume Next
            n = ctrl.Caption
            If Not Err Then i = i + 1: Cells(i, c) = ctrl.FaceId & "-" & n
            On Error GoTo 0
        Next
    Next
    ActiveSheet.UsedRange.EntireColumn.AutoFit
End Sub

quelque exemples que j'utilise avec les indexs
Code:
Sub test2()
    'mise en arret(mode creation)
    'Application.VBE.CommandBars(4).Controls(1).Execute
   
    'ajouter un userform
    'Application.VBE.CommandBars(7).Controls(1).Execute
   
    'ajoute un module standard
    'Application.VBE.CommandBars(7).Controls(2).Execute
   
    'ajoute un module classe
    'Application.VBE.CommandBars(7).Controls(3).Execute
   
   
    '
End Sub
 
Ok, intéressant, merci.
Le problème c'est que tu ne peux exécuter ces instructions que d'une feuille et pas directement dans le VBE.
Y a des outils qui ajoutent des fonctionnalités au VBE. Je n'ai aucune idée de comment ils se banchent dans le VBE.
 
Dernière édition:
Mais je vais voir si avec un petit outil Windows qui génère des touches je peux y arriver.
Salut,
il y a AutoHotKey qui permet cela. Voici un script AHK qui permet de mapper CTRL+Y en ALT+e+é :
Code:
#SingleInstance Ignore  ; empêche une nouvelle instance d'être lancée
#HotIf WinActive("Microsoft Visual Basic pour Applications") ; condition pour exécuter le raccourci
^y::
{
   ; MsgBox "Vous avez appuyé sur CTRL-Y"
   Send "%eé" ; envoyer ALT+e+é -> Refaire
}

On le lance en double cliquant dessus dans l'explorateur de fichier. Il y a alors une icône verte avec un H dans le systemTray, avec un clic droit dessus , on peut faire différentes actions comme par exemple arrêter le script.
Le script vérifie si on a déjà une instance en cours et active le mapping si c'est la fenêtre VBE qui est active.
ALT+e+é ne fonctionne pas quand on est dans l'éditeur de formulaire car dans le menu Edition il n'y a plus de lettres soulignées pour Annuler ou Répéter.
Dans AutoHotKey , on ne peut pas non plus utiliser un MenuSelect pour sélectionner un élément de menu comme le Répéter car VBE n'a pas un menu "Standard".
Par contre on peut faire un clic souris à des coordonnées bien précises que l'on peut repérer grâce à l'outil Window Spy d'AutoHotKey qui indique en temps réel les coordonnées souris dans la fenêtre active ( coordonnées Ecran, fenêtre, client) :
AHK_WindowSpy.png


La commande c'est ControlClick :
VB:
#SingleInstance Ignore  ; empêche une nouvelle instance d'être lancée
#HotIf WinActive("Microsoft Visual Basic pour Applications") ; condition pour exécuter le raccourci
^y::
{
   ControlClick "x222 y34" ; coordonnées Client du bouton Refaire
   ; MsgBox "Vous avez appuyé sur CTRL-Y"
   ;Send "%eé" ; envoyer ALT+e+é -> Refaire
}

Nullosse
 
Dernière édition:
En fait le Alt c'est le "!".
VB:
#SingleInstance Ignore  ; empêche une nouvelle instance d'être lancée
#HotIf WinActive("Microsoft Visual Basic pour Applications") ; condition pour exécuter le raccourci
^y::
{
   ; MsgBox "Vous avez appuyé sur CTRL-Y"
   Send "!eé" ; envoyer ALT+e+é -> Refaire
}
Ca fonctionne !
Merci @nullosse pour ces infos !
 
J'ai donc créé le script "VBE Redo" avec ça dedans:
Code:
#SingleInstance Ignore  ; empêche une nouvelle instance d'être lancée
#HotIf WinActive("Microsoft Visual Basic pour Applications") ; condition pour exécuter le raccourci
^y::
{
   ; MsgBox "Vous avez appuyé sur CTRL-Y"
  Send "%eé"; envoyer ALT+e+é -> Refaire
}
Hélas quand je fais Ctrl y, ça m'ajoute "%eé" dans le texte VBA. Il prend tout en caractères.
Salut,
oups je me suis trompé ALT c'est pas % mais ! :
Code:
 Send "!eé"
et si cela ne fonctionne pas vérifier l'encodage du script (moi ça fonctionne en UTF8)
Nullosse
 
Oui j'ai vu ça dans la doc et j'ai supprimé le Post où je disais que ça ne fonctionnait pas.

Edit: j'ai créé un raccourci du script et l'ai placé dans:
C:\Users\User\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\VBE Redo.ahk.lnk
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
287
Réponses
10
Affichages
380
Réponses
5
Affichages
104
  • Question Question
Microsoft 365 comparaison horaire
Réponses
5
Affichages
132
Réponses
5
Affichages
176
Réponses
6
Affichages
152
Retour