XL 2016 Liste des mots-clés utilisés par Excel dans l'Undo Stack

Dudu2

XLDnaute Barbatruc
Bonjour,
Quelqu'un aurait-il un moyen de trouver dans Excel VBA les références des mots-clés utilisés par Excel dans sa pile des Undo, mots qu'on peut afficher avec par exemple:
VB:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Dim UndoName As String
  
    UndoName = Application.CommandBars("Standard").FindControl(ID:=128).Caption
    MsgBox Application.CommandBars("Standard").Controls(UndoName).List(1)
End Sub

2020-11-03_171733.jpg
2020-11-03_171751.jpg
2020-11-03_171812.jpg
2020-11-03_171827.jpg
etc...

Ces mots sont en "Local language" et c'est la raison pour laquelle j'aimerais plutôt les trouver par une référence codée.

Merci par avance.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Dudu,
La bonne vieille méthode de bourrin, avec :
VB:
 Sub Essai()
 For i = 1 To 255
    Cells(i, 1) = i
    On Error Resume Next
    Cells(i, 2) = Application.CommandBars("Standard").FindControl(ID:=i).Caption
 Next i
 End Sub
Ca donne :
Code:
2    Or&thographe...
3    &Enregistrer
19    &Copier
21    Cou&per
23    Ouvrir
108    &Reproduire la mise en forme
109    &Aperçu avant impression
128    &Annuler
129    Réta&blir
204    &Dessin
210    &Tri croissant
211    Tri &décroissant
226    &Somme automatique
 

Pièces jointes

  • Dudu.xlsm
    16.2 KB · Affichages: 10

Dranreb

XLDnaute Barbatruc
Bonjour.
Moi je le noterais par un Set dans une variable As CommandBarControl.
C'est une erreur de débutant de noter le nom d'un objet dans un String puis de le reconstituer bêtement par recherche de ce nom dans la collection à laquelle il appartient, alors qu'on l'a directemlent dès le début ! C'est comme utiliser par exemple Workbooks(Wbk.Name), c'est Wbk tout simplement ! Plutôt que de noter le nom d'un objet parce qu'on en aura besoin utlérieurement, il vaut toujours mieux noter par un Set l'objet lui même dans une variable de son type.
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
Bonjour sylvanu,
Oui ça je l'ai fait aussi pour trouver le 128, mais ce ne sont pas les mots-clés recherchés. Ce sont les Captions des Controls, et en l'occurrence on n'utilise que le 128. D'ailleurs il faudrait que tu partes de 0 pour aller jusqu'à 10000.
Ce que je cherche c'est le contenu de la pile, i.e. ce qui est dans .List(1).

Bonjour Dranreb,
Je suis sûrement un débutant qui fait très bêtement les choses.
Quelle est ta solution d'expert intelligent ?
Merci.
 

Dranreb

XLDnaute Barbatruc
Ce code fait la même chose sans avoir besoin du nom du CommandBarControl :
VB:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
   Dim CBC As CommandBarControl
   Set CBC = Application.CommandBars("Standard").FindControl(ID:=128)
   MsgBox CBC.List(1)
   End Sub
Celui ci aussi, d'ailleurs :
VB:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
   MsgBox Application.CommandBars("Standard").FindControl(ID:=128).List(1)
   End Sub
 

Dudu2

XLDnaute Barbatruc
Bonsoir patricktoulon,

Je pense avoir été clair dans la question avec des screenshots en prime pour montrer ce que je cherche. Ce sont bien les mots qu'on trouve en langue locale dans la pile, c'est à dire ce qui est dans
Application.CommandBars("Standard").FindControl(ID:=128).List(1) (pour faire court comme l'Expert).

Personnellement je n'ai pas trouvé de réponse malgré mes recherches. Ça veut dire que soit j'ai mal cherché soit ce n'est pas possible. En tous cas j'ai posé la question sur le forum au cas où et je dois dire que je n'aurais pas du. Ça m'aurait évité des désagréments.

J'en resterai donc sur ton avis: " tu n'es pas prêt d'avoir une réponse "
 

patricktoulon

XLDnaute Barbatruc
re
d'ailleurs je pense avoir compris les intentions de @Dudu2
il voudrais pouvoir annuler telle ou telle action mais pas forcement dans l'ordre
et cela c'est pas possible
undo commence par la dernière action jusqu'a la dernière mémorise dans le stack

quand une action est sélectionnée dans la list il annule aussi toute les suivantes

conclusion
si il s'agit bien de cela mon cher @Dudu2 il va te falloir utiliser un autre stratagème
pour les cellules il y en une très connu avec les commentaires et le calculate
 

Dudu2

XLDnaute Barbatruc
Bonjour Staple1600,

Merci de t'être penché sur la question.

Ton code donne la liste de ce qui est présent dans la pile de l'Undo et donc ce qui a été fait par l'utilisateur, exprimé en langue locale:
"Saisie de..."
"Coller"
"Collage spécial"
"Recopie incrémentée"
etc.. (voir les screenshots du post #1).

Ce que je cherchais à savoir (maintenant je parle au passé car je ne cherche plus) c'est s'il y avait un moyen de référencer ces "verbes" / "Mots" d'une manière indépendante de la langue, par un indice ou valeur quelconque puisqu'Excel utilise évidemment une méthode indépendante de la langue locale pour identifier les actions de l'utilisateur.
 

Discussions similaires

Réponses
16
Affichages
1 K

Membres actuellement en ligne

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa