dimanche 24 juin 2012

Entrer & sortir d'une cellule

“Entrer et sortir d’une cellule”, c’est l’impression que donnent ces opérations ultra-courantes et c’est comme ça que beaucoup de gens les appellent. Pour être précis, il s’agit du mode Edition (edit mode en anglais), qu’on active (entrer) ou qu’on désactive (sortir).

Ceci recouvre la grande distinction qu’il y a entre deux types de tâches qu’on effectue dans Excel.
- Travailler sur des ensembles de cellules : faire de la mise en forme, des graphiques, des TCD, etc : tout ça se fait toujours sur des ensembles de cellules (ou des lignes entières, ou des colonnes entières, ou des feuilles entières, ou éventuellement une seule cellule, mais sans saisir quoi que ce soit dans la cellule).
- Travailler le contenu d’une seule cellule : y entrer un nombre, ou du texte, ou une formule.

Le sujet, ici, est le passage d’un mode de travail à l’autre.
Commençons par quelques fondamentaux pour ça :

Quand on n’est pas en mode Edition et qu’on veut y aller, c’est à dire qu’on veut saisir un contenu dans une cellule :
- si la cellule active est la bonne : soit elle est vide et il suffit de taper au clavier, soit elle ne l’est pas et on peut double-cliquer dessus puis positionner le curseur au bon endroit, ou bien aller dans la barre de formule pour cela, ou bien encore taper F2.
- si la cellule active n’est pas encore la bonne, on peut double-cliquer directement sur la cible.

Quand on est en mode Edition et qu’on veut en sortir :
- on tape Entrée,
- ou bien Tab,
- ou on clique ailleurs.
(Ou on tape Echap, mais ceci n’aura pas modifié le contenu de la cellule.)

Bon, pourquoi parler de ça ici ?
C’est une manière de mettre en évidence le fait que le contenu et le format d’une cellule sont deux choses différentes :
- le contenu, c’est ce qui se travaille en mode Edition (2e point qu’on a vu tout au début) ;
- le format, c’est ce qui se travaille en-dehors de ce mode Edition (1er point au début).


Et concrètement, ça veut dire quoi ?

Ça peut poser problème notamment quand on travaille avec des nombres qu’on souhaite traiter comme du texte : par exempl des numéros de Sécurité Sociale, des codes postaux, etc.

Illustration. Si je saisis mon numéro de Sécurité Sociale (SS) dans une cellule, ça donne ça :

Que s’est-il passé ? Excel voit que les caractères que j’ai saisis sont tous des chiffres, donc il considère que c’est un nombre. Et comme ce nombre est grand, il l’affiche en format Ingénieur, avec ce “E+14” qui veut dire “x 1014”.

Évidemment, un numéro SS ou un code postal, en tant que nombre, n’a aucun intérêt : on ne calcule pas de somme ou de moyenne avec ces numéros ! Ce qui nous intéresse, c’est de le voir comme du texte, c’est à dire pour simplifier de visualiser chacun de ses caractères et de le voir aligné à gauche.


Pour arriver à ça, plusieurs moyens.

On peut ajouter une apostrophe avant le numéro SS, au début de la saisie (ou même après). C’est une méthode que je rechigne un peu à utiliser, non seulement parce qu’on ne voit pas cette apostrophe, donc on oublie qu’elle est là (ce qui peut être gênant ensuite sur certaines manips), mais aussi parce que d’autres manips peuvent la supprimer, ce qui casse tout.

C’est plus propre de donner à la cellule le format Texte. Bien sûr, on aurait pu formater cette cellule en texte avant de saisir le numéro SS. Mais si on a déjà saisi le numéro SS, il faut alors faire deux choses :
1. modifier le format de la cellule,
2. revalider son contenu en entrant et en sortant de la cellule.
Cette seconde étape est essentielle. Si on ne la fait pas, la cellule aura cette apparence :

Le contenu de la cellule est bien aligné à gauche, conformément au format Texte qu’on vient de définir. Sauf que son contenu est encore un nombre !

Donc il faut revalider le contenu. C’est là qu’on a besoin de faire l’opération en question : entrer et ressortir de la cellule !

Voyons voir :
- c’est facile à faire sur une cellule : F2 puis Entrée ;
- si on a 3 cellules l’une en-dessous de l’autre, c’est aussi facile : F2, Entrée,  F2, Entrée,  F2, Entrée ; ça va vite ;
- si on en en a 10, ou 30, ou 100, c’est plus fastidieux, non ?


Voyons ce qu’on peut faire en VBA !

Problème : activer le mode Edition est une manipulation d’utilisateur et rien d’autre. Il n’existe pas de méthode (au sens VBA) qui pourrait effectuer la même chose. Pour faire ça, on va devoir simuler l’action de l’utilisateur en ayant recours à l’instruction SendKeys. On trouve assez facilement une description détaillée de cette instruction et de son usage (sur le site de Microsoft ou tout simplement sur l’aide en ligne d’Excel, par exemple). Je ne m’y attarde donc pas.

Ici, pour dire “entrer dans la cellule” on va utiliser l’astuce F2 qu’on a vue plus haut. Pour dire à la macro de faire comme si l’utilisateur appuyait sur la touche F2, le code adéquat va être celui-ci :
SendKeys "{F2}"

On a exactement le même souci pour la validation par la touche Entrée. On va le résoudre exactement de la même manière, avec le code suivant :
SendKeys "{Enter}"

Il reste à organiser ça proprement, par exemple en le plaçant dans une boucle qui parcourt l’ensemble des cellules sélectionnées. Comme ceci :
Dim c as Range
For Each c In Selection
' instructions
Next c

On va aussi encadrer cela avec des instructions qui désactivent le rafraichissement écran pour le réactiver à la fin (Application.ScreenUpdating). Voici tout cela assemblé :


Sub Entrer_Sortir_Cellule()

Application.ScreenUpdating = False

Dim c as Range
For Each c In Selection
SendKeys "{F2}"
SendKeys "{Enter}"
Next c

Application.ScreenUpdating = True

End Sub


Avoir cette macro à portée de clic est parfois bien utile lorsqu’on a un fichier à nettoyer !

Aucun commentaire:

Enregistrer un commentaire