Transformer une chaine de caractère (string) en url (slug) avec EXCEL
Par arthur-and-ashes,
Publié le 5 avril 2020
J’ai été amené à importer une base de donnée excel sur mon site web. Avant l’importation, je souhaitais personnaliser les urls. Ce processus se nomme slugify en anglais, c’est à dire action de transformer un texte en slug (fragment d’url). En effet, avoir des urls propres est un atout pour votre site et peut jouer en votre faveur pour le référencement sur Google (SEO).
Mon objectif est de transformer Saison Printemps Été 2020
en saison-printemps-ete-2020
Voici la démarche que j’ai été amené à faire sur ma chaine de caractère :
- Je supprime les caractères avec accents pour ne garder que les caractères alphanumériques;
- Je supprime les caractères spéciaux (&;?!/ …), excepté les espaces;
- Je transforme les majuscules en minuscule;
- Je supprime les espaces en trop (doubles espaces, espaces au début ou à la fin);
- Enfin, je remplace les espaces entre les mots par un tiret « -« .
Supprimer les accents en VBA
Cette fonctionnalité n’est pas présente en natif sur excel. Pour cela, je vais devoir ajouter des fonctions en VBA. Cela consiste à écrire des nouvelles fonctions que je pourrais utiliser par la suite. Pour ajouter des fonctions, ouvrez le menu « ajouter des macros et créez une nouvelle macro. N’oubliez pas également de sauvegarder votre document en .xlsm ou dans un autre format qui prend en charge les macros.
Ici je vais donc remplacer les lettres avec accent par les mêmes lettres sans accent, avec cette fonction en VBA :
Function stripAccent(thestring As String) Dim A As String * 1 Dim b As String * 1 Dim i As Integer Const AccChars = "ŠŽšžŸÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðñòóôõöùúûüýÿ" Const RegChars = "SZszYAAAAAACEEEEIIIIDNOOOOOUUUUYaaaaaaceeeeiiiidnooooouuuuyy" For i = 1 To Len(AccChars) A = Mid(AccChars, i, 1) b = Mid(RegChars, i, 1) thestring = Replace(thestring, A, b) Next stripAccent = thestring End Function
Vous pouvez maintenant utiliser la fonction stripAccent() dans votre feuille excel.
Supprimer les caractères spéciaux en VBA
De même, cette fonction n’est pas présente en natif sur Excel. Je vais donc devoir écrire cette nouvelle fonction, à la suite de la précédente.
Voici ma fonction en VBA pour supprimer les caractères spéciaux (excepté les espaces) :
Function textEpure(Texte As String) As String ' garde uniquement les lettres et les chiffres Dim tempmot As String, TempCar As String For i = 1 To Len(Texte) TempCar = Mid(Texte, i, 1) Select Case Asc(TempCar) Case 48 To 57 'chiffre Case 65 To 90 'caractères A à Z Case 97 To 122 'caractères a à z Case Else TempCar = " " End Select tempmot = tempmot + TempCar Next i textEpure = tempmot End Function
Vous pouvez maintenant utiliser la fonction textEpure() dans votre feuille excel.
Retirer les majuscules avec MINUSCULE() ou LOWER()
Ici aussi, nous allons pouvoir utiliser une fonction native sur excel : MINUSCULE(). Attention, dans la version anglaise d’excel, cette fonction s’appelle LOWER().
Supprimer les espaces en trop avec SUPPRESPACE() ou TRIM()
Excel propose une fonction en natif qui permet de supprimer les espaces en trop. Cela est très pratique pour enlever les espaces en début ou en fin de texte, mais également les espaces qui se suivraient.
ATTENTION, l’équivalent de cette fonction en anglais est TRIM(). Or, il existe une autre fonction en français du même nom mais qui n’a pas du tout la même fonction. Vérifiez donc dans quelle langue vous utilisez excel.
Enfin, lorsque j’ai accompli l’ensemble de ces opérations, il me suffit de transformer les derniers espaces en « – » avec SUBSTITUE(A2;" ";"-")
.
Voici ma fonction finale :
=SUBSTITUE(SUPPRESPACE(MINUSCULE(textEpure(stripAccent(A2))));" ";"-")
Si vous utilisez excel en anglais, utilisez plutôt :
=SUBSTITUTE(TRIM(LOWER(textEpure(stripAccent(A2))));" ";"-")