formateur informatique

Mélanger les lettres des cellules Excel

Accueil  >  Bureautique  >  Excel  >  Excel VBA  >  Mélanger les lettres des cellules Excel
Livres à télécharger


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


Inscription Newsletter    Abonner à Youtube    Vidéos astuces Instagram
Sujets que vous pourriez aussi aimer :


Mélanger les lettres des cellules

Avec ce nouveau développement VBA Excel, nous allons apprendre à mélanger aléatoirement les caractères des cellules. Pour cela, nous allons bâtir une fonction. Ce procédé peut s'avérer intéressant pour construire un jeu qui s'apparenterait au célèbre "Des Chiffres et des Lettres". Cependant, dans notre cas, toutes les lettres seront nécessaires pour les remettre dans l'ordre et retrouver le mot d'origine.

Classeur Excel à télécharger
Pour développer ce code VBA, nous suggérons de baser l'étude sur un classeur Excel hébergeant quelques mots à désorganiser. Tableau Excel des lettres à mélanger

Les mots contenant les lettres à mélanger sont inscrits en colonne C. La réorganisation de ces lettres doit s'opérer dans la grille en colonne E. C'est la fonction VBA qu'il nous reste à construire que nous devrons appliquer sur chacune des cellules de cette colonne C.

La fonction et ses variables
Nous devons commencer par créer la fonction et déclarer les variables nécessaires à son bon fonctionnement.
  • Réaliser le raccourci clavier ALT + F11 pour basculer dans l'éditeur VBA Excel,
  • Dans l'explorateur sur la gauche, double cliquer sur l'élément Module1,
Il est rangé dans le dossier Modules. C'est ainsi que nous affichons au centre de l'écran sa feuille de code VBA, vierge pour l'instant.
  • Dans cette feuille de code, créer la fonction melanger comme suit :
Public Function melanger(chaine As String) As String
Dim tabl As Collection 'tableau de lettres
Dim longueur As Byte: Dim i As Byte 'longueur de chaîne + variable pour parcourir lettres
Dim longueurGauche As Byte: Dim posAlea As Byte 'position avant + numero aléatoire

End Function


Des commentaires expliquent déjà l'utilité de ces variables. Nous allons les exploiter à bon escient.

Ranger chaque lettre dans un tableau
Pour pouvoir analyser les caractères indépendamment et les mélanger, nous avons tout d'abord besoin de les isoler dans un tableau (La collection tabl). C'est ainsi que nous pourrons ensuite les choisir aléatoirement et les sortir un à un de la collection pour travailler sur ceux qui restent.
  • Après la déclaration des variables, ajouter les instructions VBA suivantes :
...
longueur = Len(chaine)

Set tabl = New Collection
For i = 1 To longueur
tabl.Add Mid(chaine, i, 1) 'Caractères indépendamment dans chaque rangée
Next i
...


Nous prélevons tout d'abord la longueur du texte hébergé par la cellule analysée, dans la variable longueur. Nous initialisons notre tableau de caractères (Set tabl = New Collection). Puis, nous parcourons la chaîne du premier au dernier caractère (For i = 1 To longueur). Grâce à la fonction Mid progressant au gré de l'analyse de la boucle (i), nous rangeons chacun d'entre eux (Add) indépendamment dans la collection.

Parcourir chaque caractère
Puisque nous connaissons désormais la longueur de la chaîne à analyser, nous pouvons maintenant la parcourir lettre à lettre grâce à une boucle For Next.
  • A la suite du code, ajouter les instructions VBA suivantes :
...
longueurGauche = longueur + 1
For i = 1 To longueur
longueurGauche = longueurGauche - 1

Next i
...


Nous calons la variable longueurGauche sur la taille de la chaîne à scruter. Nous lui ajoutons une unité car nous allons la décrémenter au fil de l'analyse de manière à étudier la dernière lettre et à remonter par le biais d'une boucle. Boucle que nous enclenchons dans la foulée, du premier au dernier caractère. Et effectivement, nous commençons par décrémenter la variable longueurGauche pour pointer sur le dernier caractère de la cellule.

Choisir une lettre au hasard
A chaque passage dans la boucle et au fur et à mesure de la restriction des caractères que nous allons entreprendre, nous devons générer une position aléatoire pour prélever l'une des lettres afin de construire la chaîne désorganisée. Pour cela, nous allons exploiter la fonction VBA Rnd.
  • A la suite du code dans la boucle, ajouter les instructions VBA suivantes :
...
Randomize
numAlea = Int((longueurGauche) * Rnd + 1)
...


La fonction Randomize permet tout d'abord de caler la génération aléatoire sur l'horloge système pour nous assurer de créer des nombres au hasard parfaitement différents. C'est ainsi, selon la syntaxe de la fonction Rnd que nous avons déjà démontrée à de nombreuses reprises, que nous générons une valeur comprise entre le début de la chaîne (1) et sa fin (longueurGauche) qui se rabougrira au fur et à mesure. De cette manière, nous considèrerons tous les caractères restants pour parfaitement les mélanger.

Assembler les lettres réorganisées
Grâce à cette génération, il ne nous reste plus qu'à piocher une lettre pour les concaténer tour à tour dans la chaîne qui sera retournée par la fonction avec son propre nom.
  • Toujours dans la boucle et à la suite du code, ajouter les deux instructions VBA suivantes :
...
melanger = melanger & tabl(numAlea)
tabl.Remove (numAlea)
...


Le nom de la fonction (melanger) est utilisé pour retourner le résultat des lettres mélangées. Tant que la boucle parcourant tous les caractères n'est pas terminée, nous ajoutons la nouvelle lettre choisie au hasard à la suite des autres (melanger = melanger & tabl(numAlea)). Puis, nous supprimons cette lettre de la collection (tabl.Remove (posAlea)). Comme la variable longueurGauche se réajuste à chaque passage (longueurGauche = longueurGauche - 1) sur cette nouvelle dimension, nous générons à chaque reprise un nouveau nombre aléatoire compris entre le premier et le dernier caractère restant, jusqu'à les sortir tous.

Mélanger les caractères
Il est temps de tester le bon fonctionnement de cette nouvelle fonction destinée à mélanger les lettres des cellules.
  • Enregistrer les modifications (CTRL + S) et basculer sur la feuille Excel (ALT + Tab),
  • Cliquer sur la cellule E3 pour la sélectionner,
  • Taper le symbole égal (=) pour initier la syntaxe de la formule,
  • Inscrire le nom de la nouvelle fonction suivi d'une parenthèse, soit : melanger(,
  • Désigner le premier texte à mélanger en cliquant sur la cellule C3,
  • Fermer la parenthèse de la fonction melanger,
  • Puis, valider la formule par le raccourci clavier CTRL + Entrée,
Comme vous pouvez l'apprécier, toutes les lettres du premier mot sont bien présentes, mais elles sont restituées dans un ordre parfaitement désorganisé.
  • Cliquer et glisser la poignée du résultat jusqu'en cellule E18,
Mélanger les lettres des cellules Excel avec une fonction VBA

Ce sont toutes les lettres de chaque cellule qui sont effectivement mélangées. Et si vous choisissez de réactualiser le calcul, c'est à chaque fois un nouveau mélange qui est proposé.

 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn