Microsoft 365 Comment signaler un numéro qui n'existe pas

dubarre

XLDnaute Occasionnel
Bonjour à tous je viens vers vous car j'ai une petite question à vous poser j'ai un petit souci avec ce code que l'on m'a proposé j'essaie de le mettre façon parler à l'envers c'est-à-dire que si le numéro dans la colonne n'existe pas il me met un message pouvez-vous m'aider s'il vous plaît.

VB:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Len(TextBox1) = 4 Then 'que si 4 chiffres
Lig = Application.Match(Val(TextBox1), Feuil2.[B:B], 1)
If IsNumeric(Lig) Then MsgBox "CE NUMERO N'EXISTE PAS", vbExclamation, "A CHANGER": TextBox1 = ""
End If
 
Solution
re
bonjour
attention avec le keypress le value ne contient pas la dernière touche tapée il faut intercepter l'events

exemple
ce textbox ne peut contenir qu'un nombre de 4 chiffres
l'erreur de match est gérée en amont
un message te dit qu'il n'existe pas ou la ligne du match
cette méthode nous permet de nous passer de l'events change ;)
VB:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Dim t$, Lig&
    With TextBox1
        If Len(.Value) = 4 Then KeyAscii = 0: Exit Sub
        t = Mid(.Value & Chr(KeyAscii), 1, 4)
        If Len(t) = 4 Then
            With Application: Lig = .IfError(.Match(Val(t), Feuil2.[B:B], 0), 0): End With
            If Lig = 0 Then
                MsgBox "CE NUMERO N'EXISTE...

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Pas sûr d'avoir tout compris, d'autant que votre exemple semble dire le contraire.

Essayez de remplacer IsNumeric par IsError

VB:
If IsError(Lig) Then

  ' Pas trouvé

Else

' Trouvé

End if

Lig doit être un variant s'il est déclaré : Application.Match renvoie soit une valeur d'erreur de l'énumération XlCVError soit un résultat

Etes-vous certain de 1 (valeur inférieure trouvée) comme troisième argument de Match ?




Cordialement
 

dubarre

XLDnaute Occasionnel
Merci pour votre aide mais je crois que je bloque par rapport à ce que vous m'expliquez pouvez-vous me faire un exemple pour que je puisse comprendre s'il vous plaît plus concrètement je suis désolé mais je débute dans VBA je n'ai pas encore tous les rouages s'il vous plaît

VB:
If Len(TextBox1) = 4 Then 'que si 4 chiffres
Lig = Application.Match(Val(TextBox1), Feuil2.[B:B], 0)
If Lig = "" Then
IsError(Lig) = True
MsgBox "CE NUMERO EXISTE DEJA", vbExclamation, "A CHANGER": TextBox1 = ""
End If
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

C'est pas vraiment la structure If ... then ... else que je vous ai communiqué !

Vous êtes inscrit depuis 2 ans. Vous devez savoir que c'est au demandeur de fournir un exemple et des explications claires sur son problème.

Cordialement
 

JM27

XLDnaute Barbatruc
Bonjour
Il faut plutôt utiliser l’événement change.
De plus dans le match l’argument doit être 0 ( valeur exacte)
et pour finir limiter la saisie à 4 caractères
Voir propriété maxlenght de la text box
ou la gérer dans dans l’événement
 

Pièces jointes

  • exemple.xlsm
    16.5 KB · Affichages: 11

patricktoulon

XLDnaute Barbatruc
re
bonjour
attention avec le keypress le value ne contient pas la dernière touche tapée il faut intercepter l'events

exemple
ce textbox ne peut contenir qu'un nombre de 4 chiffres
l'erreur de match est gérée en amont
un message te dit qu'il n'existe pas ou la ligne du match
cette méthode nous permet de nous passer de l'events change ;)
VB:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Dim t$, Lig&
    With TextBox1
        If Len(.Value) = 4 Then KeyAscii = 0: Exit Sub
        t = Mid(.Value & Chr(KeyAscii), 1, 4)
        If Len(t) = 4 Then
            With Application: Lig = .IfError(.Match(Val(t), Feuil2.[B:B], 0), 0): End With
            If Lig = 0 Then
                MsgBox "CE NUMERO N'EXISTE PAS", vbExclamation, "A CHANGER": t = ""
            Else
                MsgBox "ligne " & Lig
            End If
        End If
        .Value = t
        KeyAscii = 0
    End With
End Sub

oserais je dire aussi puisqu'il s"agit de nombres on peut contraindre le textbox a n'accepter uniquement les numériques en ajoutant simplement la condition avec le len
par la même occasion pour démontrer l'interception le value = la totalité de ce qui a été tapé
VB:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Dim t$, Lig&
    With TextBox1
        If Len(.Value) = 4 Or Not IsNumeric(Chr(KeyAscii)) Then KeyAscii = 0: Exit Sub
        t = Mid(.Value & Chr(KeyAscii), 1, 4): .Value = t
        If Len(t) = 4 Then
            With Application: Lig = .IfError(.Match(Val(t), Feuil2.[B:B], 0), 0): End With
            If Lig = 0 Then
                MsgBox "CE NUMERO N'EXISTE PAS", vbExclamation, "A CHANGER": t = ""
            Else
                MsgBox "ligne " & Lig
            End If
        End If
        .Value = t
        KeyAscii = 0
    End With
End Sub
 
Dernière édition:

dubarre

XLDnaute Occasionnel
Merci à tous pour votre aide cela correspond à ce que j'ai besoin je vais essayer de le décrypter pour comprendre

Je tenais à répondre à roblochon certes cela fait plus de deux ans que je suis inscrit sur le forum cela ne veut pas dire que je passe mes journées derrière Excel je découvre à mon rythme et si pour vous c'est votre passion première pour moi c'est quelque chose d'utile qui va permettre d'avancer plus vite dans mon travail personnel

En tout cas je tenais vraiment à dire que ce forum permet de pouvoir échanger et d'apprendre donc encore une fois merci à tous.
 

Discussions similaires

Réponses
3
Affichages
716

Statistiques des forums

Discussions
312 165
Messages
2 085 881
Membres
103 009
dernier inscrit
dede972