Vishwajeet a une série de numéros de pièces dans une colonne. Ces références doivent suivre un modèle spécifique (2 chiffres, 5 lettres, 4 chiffres, 1 lettre, 1 chiffre, 1 lettre et 1 chiffre). Il se demande s’il existe un moyen d’identifier facilement les cellules de la colonne qui diffèrent de ce modèle.

Il existe plusieurs façons d’aborder cette tâche, en fonction de la vraie nature de vos données. Par exemple, vous pouvez utiliser une formule comme celle-ci dans une colonne d’aide:

=AND(LEN(A1)=15,ISNUMBER(--LEFT(A1,2)),ISTEXT(MID(A1,3,5)), ISNUMBER(--MID(A1,8,4)),ISTEXT(MID(A1,12,1)),ISNUMBER(-- MID(A1,13,1)),ISTEXT(MID(A1,14,1)),ISNUMBER(--RIGHT(A1,1)))

La formule (qui est assez longue) renvoie True ou False, selon que le modèle est correct ou non. Il y a cependant un problème avec la formule. Il n’attrapera pas les symboles utilisés à la place des lettres (comme un signe dollar ou un astérisque) et il n’attrapera pas certains symboles utilisés à la place des nombres (comme un point ou un signe de pourcentage). La raison en est que la fonction ISTEXT considère les symboles comme du texte et la fonction ISNUMBER analyse quelque chose comme « 1.23 » comme un nombre.

Si vous voulez attraper cette mauvaise utilisation des symboles, la formule suivante peut être utilisée:

=AND(LEN(A1)=15,ISNUMBER(SUM(SEARCH(MID(A1,{1,2,8,9,10,11, 13,15},1),"0123456789"),SEARCH(MID(A1,{3,4,5,6,7,12,14},1), "ABCDEFGHIJKLMNOPQRSTUVWXYZ"))))

Celui-ci fonctionne car il utilise la fonction RECHERCHE pour vérifier efficacement chaque caractère du numéro de pièce. On pourrait penser que vous devrez peut-être entrer la formule sous forme de formule matricielle (en la terminant par Ctrl + Maj + Entrée), mais il est intéressant de noter que je n’obtiens aucune différence dans les résultats lorsque je l’utilise comme formule régulière par rapport à une formule matricielle.

Si vous avez besoin de vérifier un peu les modèles de numéro de pièce, vous pouvez envisager d’utiliser une macro pour effectuer la vérification. Voici une courte fonction définie par l’utilisateur qui utilise l’opérateur Like pour voir si le modèle est suivi.

Function CheckPattern(rCell As Range) As Boolean     Dim sPattern As String

sPattern = "##[A-Z][A-Z][A-Z][A-Z][A-Z]####[A-Z]#[A-Z]#"



CheckPattern = rCell.Value Like sPattern End Function

Notez l’utilisation de la variable sPattern. C’est le modèle à suivre lorsque l’opérateur Like effectue sa comparaison. Chaque occurrence du symbole # signifie que n’importe quel chiffre peut être dans cette position. Chaque occurrence de [A-Z] signifie que la position peut être une lettre dans la plage de A à Z.

Vous pouvez en savoir plus sur la signification des caractères que vous pouvez inclure dans le modèle en visitant cette page sur l’un des sites de Microsoft:

https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/operators/like-operator

Ce site est en fait pour Visual Basic, pas pour VBA, mais cette page d’informations particulière fonctionnera très bien dans VBA.

Pour utiliser la fonction définie par l’utilisateur CheckPattern, vous pouvez placer ce qui suit dans n’importe quelle cellule de votre feuille de calcul:

=CheckPattern(A1)

Cela suppose que le numéro de pièce se trouve dans la cellule A1, comme toutes les autres formules présentées dans cette astuce.

ExcelTips est votre source pour une formation Microsoft Excel rentable.

Cette astuce (3391) s’applique à Microsoft Excel 2007, 2010, 2013 et 2016.