Une Saisie ultra-rapide et automatisée sur Excel !
Aujourd’hui pour ce nouveau tutoriel, je vous propose répondre à la question posée par Gabrielle Dumais dans l’espace des commentaires de la chaîne YouTube qui souhaite savoir comment faire pour mettre en place une saisie de données ultra-rapide sur Excel en automatisant un maximum la reconnaissance et la complétion automatique des données
Téléchargement
Vous pouvez télécharger le fichier d'exemple de cet article en cliquant sur le lien suivant :
Tutoriel Vidéo
1. Utiliser la fonctionnalité de correction automatique en cours de frappe
Dans un précédent tutoriel, que vous pourrez retrouver en cliquant ici, nous avons déjà eu l’occasion de découvrir qu’Excel dispose d’un outil de correction automatique en cours de saisie.
Cela va permettre de modifier directement les données saisies (fautes de frappes, fautes d’orthographes courantes, …) ou encore la manière dont celles-ci sont saisies (double majuscule en début de mot, …)
Cet outil va alors analyser les données saisies par un utilisateur afin de corriger les données lorsque cela s’avère nécessaire.
Cela permettra par exemple de pouvoir saisir facilement le caractère copyright en saisissant la lettre c entre parenthèses :
Pour mettre en place et paramétrer la correction automatique en cours de saisie, rendez-vous dans le menu Fichier > Option, puis dans la catégorie Vérification, cliquez sur le bouton Options de correction automatique…
Les règles que nous allons mettre en place au sein d’Excel seront également valables pour toutes les applications de la suite Office, ce qui évite d’avoir à répéter une même opération pour chacune d’entre elles.
Nous retrouvons tout d’abord un certain nombre de fonctionnalités très pratiques, mais qui ne nous intéresseront pas ici, telles que :
- La suppression automatiquement de la double majuscule saisie en début de mot : « EXcel » devient alors « Excel.
- L’inversion de la casse lorsque tout un mot (sauf la première lettre) est saisi en majuscule : « eXCEL » devient « Excel »,
- Les possibilités d’ajouter automatiquement une majuscule en début de phrase, ou aux jours de la semaine sont présentées dans cette fenêtre car les fonctions de corrections automatiques sont communes à toutes les applications de la suite Office, mais ne fonctionnent pas avec Excel.
Et enfin, dans la partie inférieure de la fenêtre, nous retrouvons l’option la plus utile ici : l’option de correction automatique en cours de frappe. Celle-ci permet de remplacer automatiquement des mots saisis par d’autres mots que nous allons pouvoir définir. L’exemple le plus parlant étant le « (c) » qui devient « © »
Par défaut, Excel contient déjà un très grand nombre de règles de préfinis que nous pouvons consulter :
Nous pouvons par exemple constater que saisir « aujourdhui » permettra d’afficher rapidement « aujourd’hui ».
Pour ajouter une nouvelle règle, il suffit de saisir dans le champ « Remplacer : » le terme à repérer et dans le champ « Par : » le terme à insérer à la place de celui-ci.
Nous pouvons ainsi remplacer « ecxel » par « excel » :
(Nous saisissons donc « excel » dans le champ « Remplacer : » et « excel » dans le champ « Par : », puis nous validons la création en appuyant sur le bouton « Ajouter ») :
Pour annuler une modification automatique non désirée, appuyez simplement sur les touches [Ctrl]+[Z] (sans valider la saisie).
Nous passons rapidement sur cette fonctionnalité, une fois encore si vous souhaitez en savoir davantage, vous pouvez consulter le tutoriel dédié à cette fonctionnalité en cliquant ici.
2. Créer un système de reconnaissance automatique
Maintenant, pour aller plus loin, imaginons que nous souhaitions reproduire exactement le même fonctionnement, mais en améliorant le système pour pouvoir ajouter rapidement des règles personnalisées.
À titre d’exemple, nous allons utiliser un tableau d’affectation à deux colonnes :
Dans la première colonne nous allons saisir le terme qui va permettre d’identifier la saisie à remplacer, et dans la seconde colonne se trouve la valeur à insérer à la place.
Ici, nous limitons l’analyse aux jours de la semaine, mais nous pourrions aller plus loin en saisissant les codes-barres produits et les désignations correspondantes à ces derniers.
Pour automatiser ce remplacement, nous allons bien entendu devoir passer par le développement d’une petite macro-commande en VBA.
Pour que ce tutoriel soit accessible à tout le monde, nous allons revenir dans le détail sur aspect de cette dernière.
Si vous souhaitez aller plus loin dans la découverte du langage VBA, vous pouvez évidemment consulter la formation disponible sur le blog en cliquant ici.
Pour commencer, nous allons lancer l’éditeur de code VBE (pour Visual Basic Editor), qui est l’éditeur de code intégré dans les différentes applications de la suite Office et qui permet de développer des macro-commandes en VBA.
Pour cela, nous appuyons simplement sur les touches [Alt]+[F11] :
VBE s’ouvre alors sur le projet dans lequel nous nous trouvions (le classeur Excel), et nous allons pouvoir insérer la macro dans la feuille de code en double cliquant sur celle-ci :
La macro que nous allons développer repose sur l’utilisation de l’évènement Worksheet_Change
Un évènement permet de déclencher automatiquement une série d’instructions lorsque quelque chose se passe sur la feuille de calcul.
L’évènement Worksheet_Change en particulier va se déclencher à chaque fois qu’une cellule de la feuille va être modifiée.
Pour l’insérer sur la feuille de code, nous commençons par dérouler le menu de sélection d’objet pour sélectionner Worksheet (c’est-à-dire les évènements de feuille de calcul) :
Puis dans le second menu nous sélectionnons directement l’évènement Change :
Excel ajoute automatiquement l’évènement sur la feuille de code :
Nous pouvons supprimer l’évènement Worksheet_SelectionChange ajouté par Excel, mais qui ne nous servira pas.
Maintenant pour vérifier le bon fonctionnement de l’évènement, nous allons commencer par automatiser l’affichage d’une notification à chaque fois qu’une donnée va être saisie dans la feuille de calcul :
Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox Target
End Sub
Comme vous pouvez le constater, nous utilisons ici la fonction Target dans laquelle la ou les cellules modifiées sont retournées :
Le fonctionnement de la macro est alors très simple, il suffira en effet de passer en revue toutes les cellules qui se trouve dans la colonne « Rechercher » du tableau de données « dictionnaire » :
Lorsque la valeur de la cellule analysée est égale à la valeur de la cellule retournée par la variable Target, nous insérons simplement la valeur de la cellule située juste à droite.
Pour passer en revue les cellules de la colonne « Recherche », nous allons utiliser une boucle For… Each, avec une variable que nous appelons simplement « c » et que nous typons en tant que Range (c’est-à-dire un objet dans lequel une cellule est inséré, comme la variable Target que nous avons vu un peu plus tôt) :
Dim c As Range
For Each c In [dictionnaire[Rechercher]]
...
Next
Ensuite, il ne reste plus qu’à réaliser un test If… Then pour vérifier si la valeur de c est identique à celle de Target :
For Each c In [dictionnaire[Rechercher]]
If c = Target Then
End If
Next
Et lorsque c’est le cas, alors nous pouvons modifier la valeur de Target afin de lui affecter le contenu de la cellule située juste à droite de c (pour cela, nous utilisons l’instruction Offset, qui permet d’appliquer un décalage sur une cellule) :
If c = Target Then
Target = c.Offset(0, 1)
End If
Les arguments que nous passons dans l’instruction Offset permettent de rester sur la même ligne que la cellule c (0), mais de se décaler d’une cellule vers la droite (1).
Nous pouvons maintenant tester en saisissant les première lettres d’un jour de la semaine :
Maintenant pour ajouter de nouvelles analyses, il suffit de les saisir à la suite du tableau :
Pour finir, nous allons nous assurer qu’une seule cellule a été modifiée, ce qui évitera de provoquer des bugs. En effet, la macro que nous avons mis en place ici étant très simple, elle n’est pas capable de gérer le cas dans lequel Target renverrait une plage de plusieurs cellules).
Pour cela, nous utilisons la propriété Count de l’objet Target qui renvoie le nombre de cellule contenu dans un objet Range.
Nous ajoutons donc la ligne suivante au tout début de la macro :
If Target.Count > 1 Then Exit Sub