Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
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.
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,
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é.