Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2021 VBA format d'un Like

  • Initiateur de la discussion Initiateur de la discussion Dudu2
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Dudu2

XLDnaute Barbatruc
Bonjour,
Je m'y perds avec ces foutus Like...
Je dois vérifier qu'une chaine saisie est une suite de chiffres [0-9] de longueur quelconque/une suite de chiffres [0-9] de longueur quelconque.
VB:
If Chaine like "*#/*#" then MsgBox "OK" '??????????????????????????????????
 
on a Regex, https://software-solutions-online.com/vba-regex-guide/
mais autrement ...
problèmes avec le "-" ?, ajoutez une condition supplémentaire
et je suppose que le longueur max d'une partie de la chaine est 15 chiffres
VB:
Sub test()
     Dim s, sp, i
     s = "123456789/987654321/-1234/123.45/123a45"
     sp = Split(s, "/")
     For i = 0 To UBound(sp)
          b = (CStr(Val(sp(i))) = sp(i))
          If Not b Then MsgBox "erreur : " & sp(i): Exit For
     Next
     MsgBox IIf(b, "", "not ") & "okay"
End Sub
 
Dernière édition:
Bonjour à tous,
Avec une function :
VB:
Function EstCommeJeVeux(x As String) As Boolean
Dim i&, j&
   If Not x Like "*#/#*" Then Exit Function
   i = InStr(x, "/")
   For j = 1 To i - 2
      If Not Mid(x, j, 1) Like "#" Then Exit Function
   Next j
   For j = i + 2 To Len(x)
      If Not Mid(x, j, 1) Like "#" Then Exit Function
   Next j
   EstCommeJeVeux = True
End Function
 
@mapomme, et si tu remplace (supprime) les "/" par "", alors ce seront tous des chiffres ...
et sans ce boucle jusqu'à 15 chiffres
VB:
Sub test()
     Dim s, sp, i
     s = Replace("1234/56789/0123/45", "/", "")
     b = (CStr(Val(s)) = s)
     MsgBox IIf(b, "", "not ") & "okay"
End Sub
 
Dernière édition:
Bonjour @bsalv😉,
@mapomme, et si tu remplace (supprime) les "/" par "", alors ce seront tous des chiffres ...
Je ne comprends pas ta remarque 😳 (je comprends vite mais il faut m'expliquer longtemps 🙂)



Sinon la v1 en plus court :
VB:
Function EstCommeJeVeux2(ByVal x As String) As Boolean
Dim i&, j&
   If Not x Like "*#/#*" Then Exit Function Else x = Replace(x, "/", "", , 1)
   For j = 1 To Len(x)
      If Not Mid(x, j, 1) Like "#" Then Exit Function
   Next j
   EstCommeJeVeux2 = True
End Function
 
Bonjour Dudu, Bsalv, MaPomme,
Pourquoi pas cette simple fonction :
VB:
Function Nombre(N)
If IsNumeric(Replace(N, "/", "")) Then Nombre = True Else Nombre = False
End Function
Le code est alors :
VB:
If Nombre(Chaine) Then MsgBox "OK" Else MsgBox "KO"
 

Pièces jointes

Salut,
Voici une fonction avec du Regex :
VB:
Function EstNombreSlashNombre(texte) As Boolean
    Dim reg As Object
    Set reg = CreateObject("VBScript.RegExp")
    With reg
        .pattern = "^\d+/\d+$"
        .IgnoreCase = True
        .Global = False
    End With
    EstNombreSlashNombre = reg.test(texte)
End Function
Sub Test_EstNombreSlashNombre()
    Dim tests As Variant, t As Variant, resultat As Boolean
    ' Tableau de cas de test
    tests = Array("12/5", "3/14", "0/1", "123456/7890", "12 / 5", " 12/5", _
                  "12/5 ", "abc/12", "12/abc", "12/", "/12", "12-5", "12//5", _
                  "12/5/7", "12.5/7", "12/7.5", "", " ", "12/ 5", " 12 / 5 ", "0012/0005")
    Debug.Print "=== TEST DE LA FONCTION EstNombreSlashNombre ==="
    For Each t In tests
        resultat = EstNombreSlashNombre(t)
        Debug.Print """" & t & """ => " & IIf(resultat, "OK", "NON")
    Next t
End Sub
Nullosse
 
Bonjour jp
l'étoile avant le # est de trop les etoiles vont au debut ou la fin ou la deux
tu va peut être comprendre avec ceci
chaine2 et 3 sont les mêmes
VB:
Sub test()
    Chaine = "125635/45236/45896"
    If Chaine Like "*#/#*" Then MsgBox "OK" Else MsgBox "pas ok '??????????????????????????????????"

    Chaine2 = "125635/ert45236/edfr45896"
    If Chaine2 Like "*#/#*" Then MsgBox "OK" Else MsgBox "pas ok" '??????????????????????????????????

    Chaine3 = "125635/ert45236/edfr45896"
    If Chaine3 Like "*#/*#*" Then MsgBox "OK" Else MsgBox "pas ok '??????????????????????????????????"

End Sub
 
Bonjour,

Pourquoi pas cette simple fonction :
Code:
Function Nombre(N)
    If IsNumeric(Replace(N, "/", "")) Then
        Nombre = True
    Else
        Nombre = False
End Function
Ca doit pouvoir logiquement se simplifier (à vérifier tout de même...) en :
Code:
Nombre = IsNumeric(Replace(N, "/", ""))

Si je ne me trompe, le problème de faire ce genre de Replace, c'est que si tu as 123//45///67/89//0, ça devient 1234567890 et donc la Function retourne True alors que ça ne correspond pas au format désiré par notre ami Dudu2.
 
Dernière édition:
Y a pas de pattern pour représenter une suite de chiffres de longueur quelconque.
Alors faut faire des essais jusqu'à trouver en limitant à par exemple 10 chiffres.
VB:
Private Function IntegerSlashInteger(ByVal S As String) As Boolean
    Dim i1 As Integer
    Dim i2 As Integer
  
    S = Replace(S, " ", "")
  
    For i1 = 1 To 10
        If S Like String(i1, "#") & "/*" Then Exit For
    Next i1
    If i1 > 10 Then Exit Function
  
    For i2 = 1 To 10
        If S Like String(i1, "#") & "/" & String(i2, "#") Then Exit For
    Next i2
    If i2 > 10 Then Exit Function
  
    IntegerSlashInteger = True
End Function
 
Dernière édition:
re
allons allons @Dudu2 en fin
il suffit d'en tester 2
on test donc un chiffre + un chiffre + / + un chiffre + un chiffre
si tu peux capter les deux tu peux capter le reste
VB:
Sub test()
chaine = "dfrgfr8/5frferf"

MsgBox chaine & vbCrLf & CStr(chaine Like "*[0-9][0-9]/[0-9][0-9]*")

chaine2 = "dfrgfr68/52frferf"

MsgBox chaine2 & vbCrLf & CStr(chaine2 Like "*[0-9][0-9]/[0-9][0-9]*")

End Sub
si il te faut minimum un chiffre+/+un chiffre, dis le mois on ajoute quelque chose
 
J'ai mis:
une suite de chiffres [0-9] de longueur quelconque/une suite de chiffres [0-9] de longueur quelconque
Par exemple:
123/456789 ou 1/789 ou 123/5 ou 123/4156
C'est ptet les autres propositions qui t'ont perturbé ou le fait que j'avais essayé "*#/*#" en pensant que "*#" représenterait un nombre quelconque de chiffres, mais ce n'est pas le cas. Il n'y a rien pour représenter un nombre quelconque de chiffres.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
15
Affichages
808
Réponses
4
Affichages
284
Réponses
16
Affichages
513
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…