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

BleyBley -  
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   -
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   Statut Membre Dernière intervention   526
 
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
BleyBley
 
Merci, j'ai fait une petite adaptation mais ça marche parfaitement
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
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