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

BleyBley -  
pijaku Messages postés 13513 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 =)

2 réponses

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