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

Macro qui fonctionnait avec WORD XP et ne fonctionne plus avec Word 2007

3 réponses
Avatar
Aeronav
Bonjour,
J'utilise WIN XP SP2, Word XP and Word 2007 à jour, versions françaises.
Windows prévoit d'utiliser la virgule comme séparateur décimal et WORD
l'exige pour calculer avec des décimaux. Saisir des nombres par le pavé
numérique est plus rapide mais on obtient le point décimal normalement.
J'utilisais cette macro pour pouvoir passer à volonté du point décimal à la
virgule sur le pavé numérique dans WORD XP :
------------------
Public Sub PointOuVirgule()
CustomizationContext = NormalTemplate
If KeyBindings(1).command = Chr(46) Then
KeyBindings.Add KeyCategory:=wdKeyCategorySymbol,
KeyCode:=BuildKeyCode(wdKeyNumericDecimal), command:=Chr(44)
StatusBar = "Tu as la virgule"
Else
KeyBindings.Add KeyCategory:=wdKeyCategorySymbol,
KeyCode:=BuildKeyCode(wdKeyNumericDecimal), command:=Chr(46)
StatusBar = "Tu as le point"
End If
End Sub
------------------
Char(46) est le point décimal , Chr(44) est la virgule.
Si je l'utilise dans WORD 2007 j'obtiens toujours le caractère ÿ (Chr 255)
au lieu du point ou de la virgule et je reste coincé. Pour rétablir je suis
obligé d'aller à la personnalisation du clavier et de faire un "Reset".
Quelqu'un peut-il me donner une solution pour faire re-fonctionner cette
macro ?
Merci d'avance
--
Aeronav

3 réponses

Avatar
Anacoluthe
Bonjour !

'Aeronav' nous a écrit ...
J'utilisais cette macro pour pouvoir passer à volonté du point décimal à la
virgule sur le pavé numérique dans WORD XP :
...

KeyCode:=BuildKeyCode(wdKeyNumericDecimal), command:=Chr(44)
...

Si je l'utilise dans WORD 2007 j'obtiens toujours le caractère ÿ (Chr 255)


Essayez avec Command:=" ," (espace pour avoir 2 octets ?)

Sur mon WD2007 ça semble marcher ainsi :

Public Sub PointOuVirgule()
CustomizationContext = NormalTemplate
If KeyBindings(1).command = Chr(46) Then
KeyBindings.Add KeyCategory:=wdKeyCategorySymbol,
KeyCode:=BuildKeyCode(wdKeyNumericDecimal), command:=" ,"
StatusBar = "Tu as la virgule"
Else
KeyBindings.Add KeyCategory:=wdKeyCategorySymbol,
KeyCode:=BuildKeyCode(wdKeyNumericDecimal), command:=" ."
StatusBar = "Tu as le point"
End If
End Sub

NB1: Cette macro ne peut pas fonctionner sans qu'un objet KeyBindings ait été
initialisé au moins une première fois en forçant un KeyBindings.Add
(inhiber les lignes 3,7,8,9,10,11 pour une 1ère exécution).
NB2: attention pour les néophytes, ne vous lancez pas dans des essais de
réaffectation du clavier sans une certaine prudence. Aeronav a bien dit
qu'il faut savoir réinitialiser son clavier en cas de problème.

Anacoluthe
« Le clavier bien tempéré. »
- Jean Sébastien BACH

Avatar
Aeronav
Merci Anacoluthe, ma macro fonctionne à nouveau grâce à vos indications.
En particulier l'obligation de créer un premier KeyBinding (qui doit être
différent de l'affectation normale de le touche). Curieusement lorsque
j'utilisais mon code fautif WORD ne protestait pas alors que la collection
n'avait encore aucun membre.
J'aimerais aussi comprendre pourquoi on peut utiliser le Chr(46) dans le IF
initial alors qu'il faut mettre " ." ou " ," dans la commande voulue, et
pourquoi l'espace ainsi introduit n'apparaît pas dans le texte frappé ?
Mais, pourvu que ça marche...
Aeronav

"Anacoluthe" a écrit dans le message de news:
%
Bonjour !

'Aeronav' nous a écrit ...
J'utilisais cette macro pour pouvoir passer à volonté du point décimal à
la virgule sur le pavé numérique dans WORD XP :
...

KeyCode:=BuildKeyCode(wdKeyNumericDecimal), command:=Chr(44)
...

Si je l'utilise dans WORD 2007 j'obtiens toujours le caractère ÿ (Chr
255)


Essayez avec Command:=" ," (espace pour avoir 2 octets ?)

Sur mon WD2007 ça semble marcher ainsi :

Public Sub PointOuVirgule()
CustomizationContext = NormalTemplate
If KeyBindings(1).command = Chr(46) Then
KeyBindings.Add KeyCategory:=wdKeyCategorySymbol,
KeyCode:=BuildKeyCode(wdKeyNumericDecimal), command:=" ,"
StatusBar = "Tu as la virgule"
Else
KeyBindings.Add KeyCategory:=wdKeyCategorySymbol,
KeyCode:=BuildKeyCode(wdKeyNumericDecimal), command:=" ."
StatusBar = "Tu as le point"
End If
End Sub

NB1: Cette macro ne peut pas fonctionner sans qu'un objet KeyBindings ait
été
initialisé au moins une première fois en forçant un KeyBindings.Add
(inhiber les lignes 3,7,8,9,10,11 pour une 1ère exécution).
NB2: attention pour les néophytes, ne vous lancez pas dans des essais de
réaffectation du clavier sans une certaine prudence. Aeronav a bien dit
qu'il faut savoir réinitialiser son clavier en cas de problème.

Anacoluthe
« Le clavier bien tempéré. »
- Jean Sébastien BACH






Avatar
Anacoluthe
Bonjour !

'Aeronav' nous a écrit ...
J'aimerais aussi comprendre pourquoi on peut utiliser le Chr(46) dans le IF
initial alors qu'il faut mettre " ." ou " ," dans la commande voulue, et
pourquoi l'espace ainsi introduit n'apparaît pas dans le texte frappé ?


Hi hi pour tout vous dire j'aimerais bien comprendre aussi !! :-D )))

J'imagine (mais je ne suis pas dans les secrets de MS !) un beug 'latent'
dans la conception de KeyBindings.Add s'exprimant dans WD2007 avec le
codage des symboles. Car d'une façon générale, nous avons l'impression
qu'il n'y a pratiquement plus de développement VBA depuis longtemps
dans la maison MS-Office ...

Mais, pourvu que ça marche...


Merci du retour

Anacoluthe
« Le clavier bien tempéré. »
- Jean Sébastien BACH