formateur informatique

Découper les textes sur la virgule en VBA Excel

Accueil  >  Bureautique  >  Excel  >  Excel VBA  >  Découper les textes sur la virgule en VBA 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 :


Découper des textes sur des virgules

Avec cette nouvelle astuce VBA Excel, sur la base d'informations séparées par des virgules, nous allons voir comment fractionner ces données dans des cellules explicitement différentes d'une même ligne.

Classeur Excel à télécharger
Pour créer cette fonction VBA Excel, nous suggérons d'appuyer l'étude sur un classeur offrant déjà des informations propices au découpage. Tableau Excel des textes à découper en VBA

Nous découvrons deux tableaux. Le premier liste les adresses postales de certains clients. Toutes les informations de chacune de ces adresses sont inscrites dans une même cellule. Mais chaque portion distincte est séparée d'une autre par une virgule.

Le second tableau est vide. Il attend les résultats à retourner par les fonctions VBA à créer. En première colonne, nous souhaitons livrer les nombres de mots qui composent chacune de ces adresses. Dans les colonnes suivantes, une même fonction, matricielle donc, doit fractionner les données des adresses sur les virgules, pour les placer dans des cellules distinctes.

La fonction pour compter les mots
Nous proposons de commencer par créer la fonction qui permettra de compter les mots d'une cellule. C'est la plus simple des deux bien que la seconde ne soit pas bien compliquée non plus.
  • Réaliser le raccourci clavier ALT + F11 pour basculer dans l'éditeur VBA Excel,
  • Dans l'explorateur de projet, double cliquer sur l'élément Module1,
De cette manière, nous affichons sa feuille de code (vierge pour l'instant) au centre de l'écran. C'est elle qui doit accueillir nos fonctions.
  • Dans cette feuille de code, créer la fonction cpteMots, comme suit :
Function cpteMots(cellule As Range) As Byte
Dim tabl() As String

End Function


Le paramètre en attente (cellule) est tout simplement la cellule que devra désigner l'utilisateur au moment de la construction de la fonction. Cette fonction est typée comme un entier court (As Byte) puisqu'elle doit retourner le nombre de mots contenus dans la cellule passée en paramètre. Ensuite, nous déclarons un tableau de variables. Il est destiné à accueillir chaque mot découpé dans ses rangées. C'est grâce à lui que nous pourrons les compter.

Découper sur les mots
C'est ensuite la fonction VBA Split qui permet de découper une chaîne sur le délimiteur signifié en second paramètre. Ici, il s'agit de l'espace.
  • A la suite de la fonction, ajouter les deux instructions VBA suivantes :
Function cpteMots(cellule As Range) As Byte
Dim tabl() As String

tabl = Split(cellule.Value, " ")
cpteMots = UBound(tabl()) + 1

End Function


Grâce à la fonction Split que nous faisons agir sur le contenu (Value) de la cellule passée en paramètre, nous rangeons tous les mots dans le tableau de variables nommé tabl. Grâce à la fonction UBound, nous connaissons sa dimension. Mais comme un tableau de variables commence à l'indice zéro, nous ajoutons une unité pour recaler sur le nombre exact de mots. Nous retournons ce nombre par le nom même de la fonction.

Il ne nous reste plus qu'à tester cette première fonction.
  • Enregistrer les modifications (CTRL + S) et revenir sur la feuille Excel (ALT + Tab),
  • Cliquer sur la cellule F4 du premier décompte à réaliser,
  • Taper le symbole égal (=) pour initier la syntaxe de la formule,
  • Inscrire le nom de la fonction suivi d'une parenthèse, soit : cpteMots(,
  • Désigner la première adresse en cliquant sur la cellule D4,
  • Fermer la parenthèse de la fonction cpteMots,
  • Puis, valider la formule avec le raccourci clavier CTRL + Entrée,
Comme vous pouvez le voir, le premier résultat tombe. Il indique que la première adresse est constituée de 6 mots ce qui est parfaitement juste.
  • Cliquer et glisser la poignée du résultat vers le bas jusqu'en cellule F11,
Fonction VBA Excel pour compter le nombre de mots dans une cellule

Cette fois, ce sont bien tous les décomptes que nous obtenons. Comme les virgules sont attachées aux mots et que la découpe est faite sur les espaces, elles ne sont pas considérées.

Fonction pour fractionner sur les virgules
Cette seconde fonction doit raisonner de façon matricielle cette fois. En effet, elle ne doit pas renvoyer un résultat, mais plusieurs sur une même ligne, en fonction de la quantité de virgules contenues dans la cellule source.
  • Revenir dans l'éditeur VBA Excel,
  • Sous la fonction cpteMots, créer la fonction decouper, comme suit :
Function decouper(cellule As Range) As Variant
Dim tabl As Variant: Dim tabChaine() As String

End Function


Nous la déclarons elle aussi avec un paramètre en attente. Il s'agit bien sûr de la cellule à découper. Nous ne la typons pas vraiment (As variant). C'est ainsi qu'elle pourra se transformer en tableau de variables au moment opportun. Rappelons-le, elle doit répondre par une matrice horizontale. Le tableau de variables tabChaine est destiné à recevoir la découpe de la cellule sur la virgule. Grâce à lui, nous pourrons transformer la variable tabl en matrice horizontale, dans laquelle nous y rangerons les éléments découpés. C'est elle que nous utiliserons à l'issue pour affecter la fonction.

Découper sur la virgule
Comme précédemment, nous devons maintenant engager la fonction Split pour découper les informations qu'elle contient sur la virgule.
  • Après la déclaration des variables, ajouter l'instruction VBA suivante :
...
tabChaine = Split(cellule, ",")
...


Désormais, chaque information qui était séparée d'une autre par une virgule est rangée indépendamment dans le tableau de variables nommé tabChaine.

Retourner les données à l'horizontale
C'est maintenant que doit entrer en lice notre variable tabl. Nous devons la redimensionner à l'horizontale, selon le nombre d'éléments qui constituent le tableau de variables tabChaine. Puis, nous devons parcourir tous les éléments de ce dernier pour les inscrire dans cette matrice tabl.
  • A la suite du code, ajouter les instructions VBA suivantes :
...
ReDim tabl(0, UBound(tabChaine))
For i = 0 To UBound(tabChaine)
tabl(0, i) = tabChaine(i)
Next i
decouper = tabl
...


Grâce à l'instruction ReDim, nous typons enfin notre variable tabl, comme un tableau d'une ligne et d'un nombre de colonnes correspondant à la dimension du tableau tabChaine, soit du nombre d'éléments (UBound) qu'il contient. C'est ainsi que nous engageons une boucle For pour ranger chaque donnée séparée dans le tableau tabl.

Le code VBA est terminé. Il ne nous reste plus qu'à le tester.
  • Enregistrer les modifications (CTRL + S) et basculer sur la feuille Excel (ALT + Tab),
  • Cliquer sur la cellule G4 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 : decouper(,
  • Désigner la première adresse en cliquant sur sa cellule D4,
  • Fermer la parenthèse de la fonction,
  • Puis, valider la formule par le raccourci clavier CTRL + Entrée,
Comme vous pouvez l'apprécier, la première adresse est parfaitement décomposée sur ses informations de rue, de code postal et de ville.
  • Cliquer et glisser la poignée du résultat jusqu'en cellule G11,
Découper des adresses postales sur les virgules avec une fonction VBA Excel

Ce sont bien toutes les adresses qui sont tronçonnées selon notre volonté.

 
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