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

  • Initiateur de la discussion Initiateur de la discussion dubarre
  • 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 !

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...
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
 
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
 
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
 
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

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:
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.
 
- 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

  • Question Question
XL 2019 date
Réponses
3
Affichages
940
Réponses
6
Affichages
1 K
Retour