formateur informatique

Modifier la casse des cellules en VBA Excel

Accueil  >  Bureautique  >  Excel  >  Excel VBA  >  Modifier la casse des cellules en VBA Excel


Pour partager cette vidéo sur les réseaux sociaux, voici son url absolue :

Pour l'intégrer sur votre site internet ou blog, vous pouvez l'embarquer :

Vous pourriez aussi être intéressé(e) par :
Select Case en VBA Excel pour gérer beaucoup de conditions
Les variables en VBA Excel, premiers pas en développement
Gérer les conditions et critères en VBA Excel
Débuter avec VBA Excel et la programmation
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. Tableau Excel pour tester macros de modification de casse

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(),
Procédures VBA Excel 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,
Créer boutons de macros dans un nouvel onglet de menu Excel

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,
Transformer cellules en majuscules avec bouton macro vba Excel



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,
Convertir en minuscules sauf premières lettres en majuscules avec VBA Excel

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().
 
Sur Facebook
Sur G+
Sur Youtube
Contact
Mentions légales