Luis reçoit des informations dans lesquelles les dates sont codées de telle sorte que les années, les mois et les jours sont remplacés par un seul caractère chacun. Pour chaque champ, les nombres 1 à 9 sont utilisés et après cela les lettres, de a = 10, b = 11, …​ v = 31. Par exemple, le code de date «bc2» signifie b = 11 (l’année 2011), c = 12 (le mois) et jour = 2. Luis se demande si une fonction peut être conçue pour remplacer la date codée par un format de date courant, tel que jj / mm / aaaa.

Il existe en fait plusieurs façons de résoudre ce problème.

Une façon consiste à configurer des «tables d’équivalence» dans une feuille de calcul, où la colonne de gauche comprend un caractère de code et la droite indique la valeur numérique associée à ce caractère. Vous pouvez ensuite créer une formule qui utilise RECHERCHEV pour trouver les valeurs et convertir les résultats en une date.

À titre d’exemple, créez votre table d’équivalence dans certaines cellules inutilisées à droite de vos données. Dans mon cas, je place le tableau dans les colonnes P et Q. Dans la colonne P, je mets les caractères de code, de 1 à 9 et de a à z. (Assurez-vous de faire précéder les chiffres de 1 à 9 d’une apostrophe afin qu’ils soient stockés sous forme de texte plutôt que sous forme de nombres.) Dans la colonne Q, je mets les nombres de 1 à 35. Cette plage entière (P1: Q35) J’ai alors donné un nom de DateTable .

Voici donc la formule qui renverra une date décodée pour une date codée stockée dans la cellule A1:

=DATE(2000+VLOOKUP(LEFT(A1,1),DateTable,2,0), VLOOKUP(MID(A1,2,1),DateTable,2,0),VLOOKUP(RIGHT(A1,1), DateTable,2,0))

N’oubliez pas qu’il s’agit d’une formule unique et continue. Une autre technique consiste à contourner complètement les tables d’équivalence et à utiliser à la place une formule pour effectuer la conversion. Voici un exemple qui décodera une date dans la cellule A1:

=DATE(2000+FIND(LEFT(A1,1),"123456789abcdefghijklmnopqrstuvwxyz"), FIND(MID(A1,2,1),"123456789abc"),FIND(MID(A1,3,1), "123456789abcdefghijklmnopqrstuv"))

Cette formule utilise la fonction FIND pour traduire du caractère de code en une valeur, puis ces valeurs sont utilisées dans la fonction DATE pour renvoyer la date souhaitée. Une autre formule possible repose, à la place, sur des valeurs de code de caractère pour créer la date:

=DATE(2000+CODE(MID(A1,1,1))-87+(CODE(MID(A1,1,1))<58)39,CODE(MID(A1,2,1))-87+(CODE(MID(A1,2,1))<58)39,CODE(MID(A1,3,1))-87+(CODE(MID(A1,3,1))<58)*39)

Enfin, vous pouvez créer une fonction définie par l’utilisateur pour renvoyer la date décodée. Ce qui suit n’est qu’un simple exemple; il examine chaque caractère et le convertit en une valeur numérique qui est ensuite utilisée avec la fonction DateSerial pour créer un numéro de série de date Excel:

Function DecodeDate(datecode As String)

Const X = "123456789abcdefghijklmnopqrstuvwxyz"

Dim D As Integer     Dim M As Integer     Dim Y As Integer

Application.Volatile     D = InStr(X, Right(datecode, 1))

M = InStr(X, Mid(datecode, 2, 1))

Y = 2000 + InStr(X, Left(datecode, 1))

DecodeDate = DateSerial(Y, M, D)

End Function

Il convient également de souligner que quelle que soit l’approche que vous utilisez, il existe un défaut inhérent à vos codes de date. L’année utilise les valeurs de code 1 à 9 et de a à z. Cela signifie que le code de date peut être l’une des 35 valeurs possibles. Lorsqu’elle est ajoutée à l’année 2000 (l’année de base pour laquelle vous avez décrit le code), cela signifie que la valeur maximale de l’année qui peut être codée est 2035. Toute date postérieure à cette année ne fonctionnera pas avec ce codage.

_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 (12422) 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-Deciphering_a_Coded_Date [Déchiffrer une date codée].