[VBA] écart moyen entre deux caractères ....

Fermé
BleyBley - Modifié par BleyBley le 5/05/2015 à 15:12
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 19 mai 2015 à 14:31
Bonjour à tous,

Pour mon projet je souhaiterais vérifier la "structure" des informations renseignées par l'utilisateur, mais mon problème : ma string de sortie à une structure précise mais elle n'a pas de longueur fixe. Je ne peux donc pas utiliser "like".

La string est une liste de codes de 7 (lettres et chiffres) séparés par ";" ce qui donne : ???????;???????;???????;etc.

Auriez-vous une solution permettant de calculer l'écart moyen entre deux caractères particuliers ? ( Car si l'écart entre les ";" ne vaut pas 7 alors la structure n'est pas respectée )

Ou une autre solution ?

Merci d'avance =)
A voir également:

2 réponses

Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
5 mai 2015 à 15:52
Bonjour,

Tu peux utiliser une fonction personnelle
(code à copier dans un module standard)
Function Verifier(Cel As Range) As String
Dim Tablo
Dim i As Integer
If Cel <> "" Then
Verifier = "CORRECT"
Else
Verifier = ""
End If
Tablo = Split(Cel, ";")
For i = 0 To UBound(Tablo)
If Len(Tablo(i)) <> 7 Then
Verifier = "INCORRECT"
Exit For
End If
Next i
End Function


https://www.cjoint.com/c/EEfqgU1aurq

A+
0
Merci, j'ai fait une petite adaptation mais ça marche parfaitement
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
19 mai 2015 à 14:31
Bonjour,

Salutations à Gyrus.

Une variante en utilisant les expressions régulières (pensez à activer la référence Microsoft vbscript regular expression 5.5) :
Prend en compte les deux situations : si la chaine termine par un ";" ou non...
Function Verifie(Chaine As String) As Boolean
'Menus Outils>Références :cochez : "Microsoft vbscript regular expression 5.5"
Dim reg As Object, Nb As Long
   Nb = UBound(Split(Chaine, ";"))
   Set reg = CreateObject("vbscript.regexp")
   Select Case Right(Chaine, 1)
      Case ";": reg.Pattern = "(.{7};){" & Nb & "}"
      Case Else: reg.Pattern = "(.{7};){" & Nb & "}(.{7})"
   End Select
   Verifie = reg.test(Chaine)
End Function

0