Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :Traitements de texte en VBA Excel
Dans cette formation, nous abordons des
fonctions VBA Excel qui permettent de manipuler les chaines de caractères. Nous exploiterons de même des notions déjà apprises au travers des supports précédents, comme les
boucles, afin de réaliser des traitements récurrents et optimisés.
Nous allons réaliser une
macro qui permettra de
changer la casse des cellules sélectionnées. En effet, si Word propose directement la fonctionnalité depuis son ruban Accueil, ce n'est pas le cas avec
Excel. Nous en profiterons pour apprendre à créer des boutons de macros que nous disposerons dans un ruban directement accessible par les onglets, comme tous les autres rubans d'Excel. Et pour l'occasion, nous créerons un ruban personnalisé afin d'accueillir ces commandes spécifiques.
Changer la casse en VBA
Modifier la casse signifie convertir en majuscules un texte saisi en minuscules et inversement. Pour réaliser nos programmes, nous allons démarrer avec un
classeur Excel existant.
Ce classeur est constitué de trois feuilles : CA, Encodage et Injection. La feuille
CA doit être active par défaut. C'est à partir d'elle que nous allons tester les
codes pour changer la casse des cellules.
- Réaliser le raccourci clavier ALT + F11 pour basculer dans l'éditeur de code Visual Basic,
Nous allons créer deux macros, une pour passer les cellules en majuscules, l'autre pour les passer en minuscules. Comme ces fonctionnalités sont utiles, il est intéressant de les coder à un endroit où elles seront disponibles partout, c'est-à -dire quel que soit le classeur
Excel. Nous devons donc les écrire dans le
classeur de macros personnelles, soit
personal.xlsb.
- Depuis l'explorateur de projets sur la gauche de la fenêtre VBA, cliquer avec le bouton droit de la souris sur Personal.xlsb,
- Dans le menu contextuel qui apparaît, pointer sur Insertion,
- Puis cliquer sur Module,
Un nouveau module de code vierge apparaît au centre de l'écran. Si votre classeur de macros personnelles personal.xlsb n'est pas visible, vous pouvez choisir pour l'exemple d'attacher le code directement à la feuille en cours. Et pour cela, depuis l'explorateur de projets, vous devez double cliquer sur Feuil1 (CA).
- Dans la feuille de code, créer les procédures majuscules() et minuscules(),
L'une et l'autre doivent être capables d'influer sur la casse des cellules contenues dans la sélection active sur la feuille
Excel au moment où nous déclencherons le
code par clic sur un bouton. Donc, nous exploiterons l'objet
Selection en
VBA qui désigne la plage de cellules sélectionnées. Le
support de formation pour débuter en VBA Excel présente cet objet. Et nous utiliserons une boucle
For Each qui permettra de passer en revue, une à une, chaque cellule de cette sélection afin de les traiter tour à tour pour en modifier la casse. Le
support de formation sur les boucles For Each présente l'efficacité de ces instructions.
Créer un ruban et ses boutons
Mais avant cela, nous allons commencer par créer les boutons qui déclencheront ces codes respectifs. Nous allons voir comment les greffer sur un nouveau ruban.
- Revenir sur la feuille CA du classeur par ALT + F11 par exemple,
- Cliquer sur l'onglet Fichier en haut à gauche de la fenêtre,
- Dans la liste, choisir Options,
- Dans la boîte de dialogue qui suit, cliquer sur Personnaliser le ruban dans la liste de gauche,
- Cliquer sur le bouton Nouvel onglet en bas à droite,
Le nouvel onglet ainsi créé apparaît dans la liste de droite de la boîte de dialogue, avec le nom
Nouvel onglet (Personnalisé). Il est composé par défaut d'un groupe
Nouveau groupe (Personnalisé). Les groupes sont les sections à thèmes des rubans dans lesquels sont réunis les boutons correspondants. Nous allons renommer ces éléments avant de les remplir.
- Cliquer avec le bouton droit de la souris sur l'élément Nouvel onglet (Personnalisé),
- Dans le menu contextuel, choisir Renommer,
- Dans la boîte de dialogue qui suit, taper Spécifique par exemple et valider,
Vous avez remarqué que le menu contextuel sur l'onglet vous permettait aussi de remonter ou redescendre l'onglet dans la hiérarchie afin de le placer où vous le souhaitez.
- Cliquer avec le bouton droit de la souris sur Nouveau groupe (Personnalisé),
- Dans le menu contextuel, choisir Renommer,
- Saisir Texte par exemple, et associer une icône représentative puis valider,
Ce
groupe Texte permettra de réunir toutes les fonctions personnalisées permettant de réaliser des traitements sur des textes comme les macros
majuscules et
minuscules que nous allons coder. L'onglet et le groupe sont encore vides. Il convient d'y insérer les boutons de nos marcos.
- En haut de la boîte de dialogue, dérouler la liste des catégories et choisir Macros,
- Depuis la liste du dessous, glisser les macros majuscules et minuscules dans le groupe Texte,
Si vous les avez déclarées dans un module du classeur de macros personnelles, leur nom est préfixé de
personal.xlsb!.
- Dans le groupe Texte du nouvel onglet, cliquer avec le bouton droit de la souris sur la macro minuscules,
- Dans le menu contextuel, choisir Renommer,
- Lui associer une icône représentative et valider,
- Faire de même pour la macro majuscules,
- Valider la boîte de dialogue par Ok,
De retour sur le classeur, vous remarquez la présence de l'
onglet Spécifique. Si vous cliquez dessus, vous affichez son
ruban, certes encore dépouillé à ce stade, puisqu'il n'est composé que de deux boutons pour l'instant.
Fonctions de casse VBA Excel
Les
fonctions VBA Excel qui permettent de modifier la casse sont respectivement
UCase() pour convertir en majuscules et
LCase() pour convertir en minuscules. Toutes deux ne requièrent qu'un seul argument, le texte à modifier. Et chacune d'elle retourne un
string (texte), soit le texte dont la casse a été convertie. Les deux
macros majuscules et
minuscules vont réaliser un traitement très similaire. Chacune d'elle, par le biais d'une
boucle For Each va parcourir chaque cellule contenue dans la sélection active sur la feuille. Et pour chaque cellule, elle va modifier la casse de la cellule en cours de lecture dans la boucle. Donc plutôt que d'écrire deux fois quasiment le même code, nous allons l'écrire dans une procédure externe. Cette procédure sera appelée par l'une ou l'autre macro en lui passant un paramètre permettant d'identifier le traitement de la casse à réaliser. Et c'est une
instruction If dans la boucle qui permettra de valider le critère. Le
support de formation VBA Excel sur les critères et conditions présente ces instructions If au travers de cas pratiques pertinents.
- Basculer dans l'éditeur de code par ALT + F11 par exemple,
- Créer la procédure traite_casse() sous les deux autres comme suit :
Sub traite_casse(comment As String)
End Sub
Le paramètre
comment déclaré en tant que string permettra d'identifier l'action à réaliser, majuscules ou minuscules. Avant de développer le code de cette procédure commune, nous devons réaliser les appels.
- Dans la procédure majuscules(), ajouter l'appel suivant : traite_casse('maj'),
- Dans la procédure minuscules(), ajouter l'appel suivant : traite_casse('min'),
Chacune des deux
macros se contente donc d'appeler la procédure commune
traite_casse() qui se chargera de réaliser le traitement en parcourant chaque cellule de la sélection. C'est le paramètre qui est passé au moment de l'appel qui permettra de personnaliser le traitement du texte dans la
boucle grâce à une instruction
If qui saura réaliser cette vérification. Nous devons commencer par déclarer la variable qui sera utilisée pour parcourir la sélection au travers de la boucle. Nous la nommerons
cellule. Cette variable doit être du même type que l'objet
Selection. C'est l'obligation d'une boucle
For Each. L'objet
Selection est de type
Range qui désigne une plage de cellules dans une feuille
Excel. Donc la variable
cellule doit être déclarée comme un
Range.
- Ajouter la déclaration suivante dans la procédure traite_casse () :
Dim cellule As Range
L'instruction
Dim permet d'initialiser cette déclaration. Le mot clé
As est utilisé pour appeler le type à affecter à la variable. Le
support de formation sur les variables en VBA Excel apprend ces notions au travers de différents types et différentes déclarations. Nous devons maintenant ajouter la boucle dans laquelle sera effectué le traitement sur la casse pour chaque cellule.
- A la suite de la déclaration, ajouter le code suivant pour la boucle For Each,
For Each cellule In Selection
Next cellule
For Each,
In et
Next sont les mots clés de cette boucle.
Next permet de fermer la boucle.
For Each permet d'initialiser la boucle en désignant la variable qui est utilisée pour l'incrémentation,
cellule.
In est le mot clé qui désigne le groupe à parcourir avec la variable, c'est pourquoi il est suivi de l'objet
Selection qui désigne la plage de cellules sélectionnées sur la feuille au moment de l'exécution. Le
support de formation sur les boucles For Each enseigne leur puissance au travers d'un cas pratique qui permet de faire ressortir les occurrences répétitives dans un tableau.
Dans cette
boucle, le traitement à réaliser dépend de la valeur de la
variable comment passée en argument. Si elle vaut
maj alors le texte de la cellule doit être passé en majuscules sinon il doit être converti en minuscules. L'instruction
If permet de tester cette condition sur la valeur de la variable. Le
support de formation VBA sur les conditions apprend à poser des raisonnements grâce à cette instruction.
- Dans les bornes de la boucle, ajouter l'instruction If suivante :
If(comment = 'maj') Then
Else
End If
Ainsi les deux cas sont prévus pour chaque cellule puisque nous sommes dans la
boucle. Si le paramètre passé vaut maj (
If (comment ='maj') Then), cela signifie que nous avons cliqué sur le bouton pour convertir les cellules en majuscules. Sinon (
Else), cela signifie que nous avons cliqué sur le bouton pour convertir les cellules en minuscules. Dans chacune des branches de cette
instruction If, il ne manque plus que les traitements, Ã savoir la modification de casse. Et c'est ici qu'interviennent les fonctions VBA
UCase() et
LCase() que nous avons présentées plus haut.
- Dans le If, avant le Else, ajouter le traitement pour les majuscules :
cellule = UCase(cellule)
- Dans le Else du If, ajouter le traitement pour les minuscules :
cellule = LCase(cellule)
Au final, nous obtenons un code très léger pour ce traitement de casse.
Sub traite_casse(comment As String)
Dim cellule As Range
For Each cellule In Selection
If (comment = 'maj') Then
cellule = UCase(cellule)
Else
cellule = LCase(cellule)
End If
Next cellule
End Sub
Il ne nous reste plus qu'Ã tester.
- Basculer sur la feuille avec ALT + F11 par exemple,
- Sélectionner la ligne de titre du tableau de la feuille CA, soit B4:J4,
- Cliquer sur le bouton majuscules du nouveau ruban,
Toutes les cellules sont instantanément converties en
majuscules comme nous le souhaitions. Inversement si vous cliquez sur le
bouton minuscules, toutes les cellules changent de casse en lettres minuscules. Voilà donc un code très simple, qui plus est, optimisé avec une branche commune, écrite dans une procédure appelée par un argument. Le
code VBA est déclenché depuis des boutons disposés sur un nouveau ruban. Ils permettent des traitements non proposés par défaut sur le ruban Accueil d'Excel. Donc VBA nous a permis d'ajouter des fonctions utiles et ergonomiques à l'environnement.
Traitement des chaînes de caractères
Il reste une amélioration à apporter au code précédent. Conventionnellement lorsque des cellules sont saisies en majuscules, tous les caractères sont concernés. Mais lorsque des cellules sont saisies en minuscules, la première lettre de chacune reste en majuscule. Autant, il existe une fonction de calcul
Excel pour changer la casse en conservant la première lettre des mots en majuscule, autant son équivalent n'existe pas en
VBA. Cette fonction Excel s'appelle d'ailleurs
NOMPROPRE().
En
VBA, il est néanmoins possible de traiter les chaînes de caractères par morceaux. Ainsi, la fonction
Left() permet de prélever une partie de la chaîne en partant de la gauche de l'occurrence. Elle requiert deux paramètres, tout d'abord la chaîne à traiter (cellule ici) puis le nombre de caractères à prélever en partant de la gauche. Ainsi
Left(cellule, 1) retournerait la première lettre de chaque mot. Donc
UCase(Left(cellule,1)) convertirait en majuscule la première lettre de chaque mot. La fonction VBA
Mid() permet de prélever une partie de la chaîne en partant d'une position donnée. Cette fonction VBA demande trois arguments, le dernier étant facultatif. Le premier argument est la chaîne de caractères à partir de laquelle prélever. Le deuxième argument est la position de départ à partir de laquelle prélever le texte. Le troisième enfin concerne la longueur sur laquelle prélever le texte. S'il n'est pas spécifié, la fonction VBA
Mid() prélève jusqu'à la fin du texte en partant de la position de départ définie par le deuxième argument. Ainsi Mid(cellule, 2) renverrait le texte de chaque cellule sans la première lettre. Donc
LCase(Mid(cellule, 2)) convertirait en minuscules tout le texte sauf la première lettre. Vous l'avez compris, il suffit de faire un assemblage de ces deux astuces pour convertir les cellules en minuscules tout en conservant la première lettre en majuscule.
- Modifier le traitement de la branche Else du If comme suit :
cellule = UCase(Left(cellule, 1)) & LCase(Mid(cellule, 2))
Le Et commercial (
&) est utilisé pour concaténer les chaînes de caractères. Concaténer signifie assembler. Ce même caractère peut d'ailleurs être utilisé dans les feuilles de calcul Excel avec les formules pour offrir des résultats de synthèse. C'est ce que présente, entre autres, le
support de formation Excel sur la concaténation. Ainsi à la première lettre de la cellule convertie en majuscule (
UCase(Left(cellule, 1))), nous associons (
&) tout le reste de la cellule converti en minuscules (
LCase(Mid(cellule, 2))).
- Basculer sur la feuille Excel ALT + F11,
- Sélectionner la ligne de titre du tableau,
- Cliquer sur le bouton majuscules du nouveau ruban,
- Puis, cliquer sur le bouton minuscules,
Cette fois c'est parfait, nous convertissons bien chaque cellule en minuscules en conservant la première lettre de chacune en majuscule. Pour ce faire, nous avons utilisé quatre fonctions
VBA de traitement de chaînes :
UCase(),
LCase(),
Left() et
Mid().