Bill doit souvent importer des informations dans une feuille de calcul afin de pouvoir les traiter pour son entreprise. Dans la situation de Bill, l’une des premières étapes qu’il doit faire est de supprimer tous les caractères ASCII 8 bits qui peuvent se trouver dans les données importées. Ces caractères n’ont pas besoin d’être remplacés par quoi que ce soit; ils doivent simplement être supprimés pour ne conserver que les caractères ASCII 7 bits. Bill se demande s’il existe un moyen simple de le faire, peut-être avec une macro d’un certain type.

Il existe plusieurs façons d’aborder ce problème, en fonction des caractéristiques des données avec lesquelles vous commencez. En supposant que votre feuille de calcul ne contient que des caractères 8 bits, les seuls codes de caractères pouvant être utilisés pour les caractères sont compris entre 0 et 255. Si vous souhaitez limiter vos données à des caractères 7 bits uniquement, cela signifie que vous ne voulez que des éléments dans la plage de codes de caractères de 0 à 127. Ainsi, vous pouvez utiliser une macro pour rechercher facilement des caractères compris entre 128 et 255 et les supprimer simplement. Cette macro adopte cette approche:

Sub Remove8Bit1()

Cells.Select     For i = 128 To 255         X = Chr(i)

Selection.Replace What:=X, Replacement:="", _           LookAt:=xlPart, SearchOrder:=xlByRows, _           MatchCase:=False, SearchFormat:=False, _           ReplaceFormat:=False     Next End Sub

L’approche trouve uniquement les valeurs de votre feuille de calcul qui sont dans la plage 8 bits. Il ne touchera à rien qui est dans la plage de 8 bits qui est réellement créé par une formule. (Dans la plupart des cas, cela ne devrait pas être un problème. S’il s’agit d’un problème, la solution appropriée consiste à modifier les formules créant les résultats incriminés.)

Si vos données contiennent des caractères Unicode, vous souhaiterez utiliser une approche différente. Techniquement, les caractères Unicode ne sont pas des caractères 8 bits; ce sont des caractères 16 bits et peuvent avoir des valeurs de code de caractère comprises entre 0 et 65 535. Parce que vous voulez ignorer tout ce qui a une valeur supérieure à 127, l’utilisation de l’approche basée sur la recherche discutée plus tôt devient compliquée – vous finiriez par faire plus de 65 000 recherches au lieu de seulement 128.

Une meilleure approche consiste simplement à regarder tous les caractères dans toutes les cellules sélectionnées et s’ils ont un code de caractère supérieur à 127, ignorez-les.

Telle est l’approche adoptée dans la macro suivante:

Sub Remove8Bit2()

Dim rngCell As Range     Dim intChar As Integer     Dim strCheckString As String     Dim strCheckChar As String     Dim intCheckChar As Integer     Dim strClean As String

For Each rngCell In Selection         strCheckString = rngCell.Value         strClean = ""

For intChar = 1 To Len(strCheckString)

strCheckChar = Mid(strCheckString, intChar, 1)

intCheckChar = Ascw(strCheckChar)

If intCheckChar < 128 Then                 strClean = strClean & strCheckChar             End If         Next intChar         rngCell.Value = strClean     Next rngCell End Sub

Notez que la macro utilise la fonction Ascw au lieu de la fonction Asc traditionnelle afin qu’elle examine les valeurs Unicode.

_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 (3142) s’applique à Microsoft Excel 97, 2000, 2002 et 2003. Vous pouvez trouver une version de cette astuce pour l’interface ruban d’Excel (Excel 2007 et versions ultérieures) ici:

link: / excelribbon-Getting_Rid_of_8-Bit_ASCII_Characters [Suppression des caractères ASCII 8 bits].