Suppression de dates dans des chaînes de texte (Microsoft Excel)
Karan a beaucoup de données textuelles dans un classeur. Certaines de ces données textuelles contiennent des dates. Elle a besoin d’un moyen de supprimer toutes les dates, mais de laisser tout autre texte qui peut être dans une cellule. Par exemple, ce qui commence par « Le test du 15/04/16 s’est exécuté avec succès » ou « Le test a été exécuté le 15/04/16 » serait, après la suppression, «
Le test s’est exécuté avec succès » et « le test s’est exécuté sur ».
Si vos dates suivent toujours un modèle simple, vous pouvez utiliser la fonction SUBSTITUTE pour les supprimer. Par exemple, si la date se compose toujours d’un mois à un chiffre et d’un jour à deux chiffres, vous pouvez utiliser ce qui suit pour la supprimer:
=SUBSTITUTE(A1,MID(A1,SEARCH("?/??/??",A1),7),)
Une telle formule pose de nombreux problèmes. Tout d’abord, il renvoie une valeur d’erreur s’il n’y a pas de date dans la cellule A1 ou si la date dans la cellule A1 n’a qu’un jour à un chiffre. En outre, si la date a un mois à deux chiffres, elle laisse ce premier chiffre intact (à condition que la date utilise un jour à deux chiffres) ou renvoie une valeur d’erreur (si la date utilise un jour à un chiffre).
Si votre date apparaît au début ou à la fin du texte dans une cellule, vous pouvez utiliser un autre type de formule:
=IFERROR( IF( VALUE( LEFT( A1, 1)) > 0, RIGHT( A1, LEN(A1) - 7), ""), LEFT( A1, FIND( "/", A1) - 2))
Le problème avec cette approche est qu’elle nécessite également un modèle exact M / JJ / AA ou MM / J / AA. Elle présente donc les mêmes problèmes que la formule précédente.
Une approche plus polyvalente consiste à utiliser une macro pour rechercher une date, puis à la supprimer de la chaîne. L’exemple de macro suivant examine le contenu d’une cellule et le divise en «mots» à l’aide de la fonction Split. Il commence alors à rassembler les mots, tant que le mot n’est pas une date.
Function RemoveDates(ByVal vC As String) Dim arr As Variant Dim s As String Dim i As Integer RemoveDates = "" If vC > "" Then arr = Split(vC, " ") For i = LBound(arr) To UBound(arr) If Not IsDate(arr(i)) Then s = s & arr(i) & " " End If Next i RemoveDates = Left(s, Len(s) - 1) End If End Function
Vous utilisez la macro comme fonction définie par l’utilisateur dans votre feuille de calcul, comme suit:
=RemoveDates(A1)
Le seul inconvénient de cette macro est que si vous avez plusieurs espaces entre les mots, ces espaces sont supprimés dans le processus de remplacement. Si c’est un gros problème pour vous, vous pourriez envisager de vous fier à une expression régulière dans votre macro, comme ceci:
Function RemoveDates(MyRange As Range) As String Dim sRaw As String Dim sPattern As String Dim regEx As New RegExp sRaw = MyRange.Value sPattern = "[0-9]{1,2}[-.\\/][0-9]{1,2}[-.\\/][0-9]{2}" With regEx .Global = True .MultiLine = True .IgnoreCase = False .pattern = sPattern End With If regEx.Test(sRaw) Then RemoveDates = regEx.Replace(sRaw, "") Else RemoveDates = "Not matched" End If Set regEx = Nothing End Function
Cette fonction est utilisée dans votre feuille de calcul de la même manière que la fonction définie par l’utilisateur précédente:
=RemoveDates(A1)
L’utilisation d’expressions régulières peut sembler un art noir à certains, mais cet usage particulier est plutôt simple. Le modèle (stocké dans la variable sPattern) indique qu’un ou deux chiffres suivis d’un caractère diviseur (tiret, point, barre oblique inverse ou barre oblique) suivi d’un ou deux chiffres supplémentaires suivis d’un autre caractère diviseur suivi de deux chiffres est considéré comme un Date. Si une telle correspondance est trouvée dans la cellule, elle est supprimée.
Afin d’utiliser l’approche des expressions régulières, vous devez vous assurer que vous incluez un référent à la bibliothèque suivante dans Visual Basic Editor (choisissez Références dans le menu Outils):
Microsoft VBScript Regular Expressions 5.5
Notez également que la fonction renvoie «Non apparié» si une date ne se trouvait pas dans la cellule que vous référencez.
_Note: _
Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.
lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur]
.
ExcelTips est votre source pour une formation Microsoft Excel rentable.
Cette astuce (7768) s’applique à Microsoft Excel 2007, 2010, 2013 et 2016.