Autres Rechercher dans la zone de texte.

francescofrancesco

XLDnaute Junior
Bonsoir à tout le Forum et meilleurs voeux.
À partir d'une zone de texte, je dois trouver des données et s'il y a une correspondance, remplissez certaines zones de texte placées sur un autre formulaire utilisateur.
Le problème se pose lorsque les données à rechercher sont numériques et composées de deux chiffres.
Évidemment, en utilisant l'événement de modification de la zone de texte, je ne peux pas taper le deuxième chiffre.
 

Pièces jointes

  • ricercadati.xls
    103 KB · Affichages: 21

mapomme

XLDnaute Barbatruc
Supporter XLD
Mais utilisez donc AfterUpdate bon sang.
La touche Entrée termine la saisie. C'est classique (et c'est comme dans Excel).
Tous les répondeurs vous ont dit que Change ne peut pas lire dans les pensées de l'utilisateur pour deviner la taille souhaitée de l'entrée (Excel 2199 peut-être ?).
Ne vous compliquez pas inutilement la vie.
 

francescofrancesco

XLDnaute Junior
Déjà,
pourquoi compliquer la vie, peut-être parce qu'elle est trop statique.
Je peux demander à mapomme s'il adapte son code avec une recherche sur la colonne A pour les nombres et la colonne B pour le texte.
J'ai fait ces changements, cela semble fonctionner.
Merci à vous tous pour votre aide.
VB:
'Sub Traitement()
Private Sub TextBox1_AfterUpdate()

Dim sb2 As Worksheet, Ligne, ligne2, i As Long

   Set sb2 = ThisWorkbook.Sheets("nominativo")     ' feuille des codes
   With sb2
             On Error Resume Next       ' au cas où le code est absent, Match renvoie une erreur
             If IsNumeric(TextBox1) Then
            
                         Ligne = Application.Match(Val(TextBox1), sb2.Range("a:a"), 0)     'recherche du code en nombre
                       '  ligne2 = Application.Match(CStr(TextBox1), sb2.Range("a:a"), 0)   'recherche du code en texte
                         On Error GoTo 0            ' on rétablit la détection d'erreur
                       '  If IsError(Ligne) And IsError(ligne2) Then    'modificato
                         If IsError(Ligne) Then
                            ' les deux recherches n'ont pas trouvé le code
                            MsgBox "<" & TextBox1 & "> : ce code est absent de la liste des codes de la feuille " & sb2.Name, vbCritical
                            TextBox1 = "": TextBox2 = "": Exit Sub
                         End If
                         ' Au moins une recherche a trouvé le code
                         ' Si Ligne est une erreur, c'est le code se trouve en Ligne1
                         ' c'est Ligne qui contiendra la ligne du code
                        ' If IsError(Ligne) Then Ligne = ligne2
                         TextBox2 = .Cells(Ligne, 2)         'affichage du nom correspondnat au code
                         If MsgBox("confermi nominativo", vbYesNo) = vbYes Then
                            UserForm1.TextBox32 = .Cells(Ligne, 1)    'Affichage du code dans Userform1
                            ' Comme vous avez très bien numéroté à la suite et dans l'ordre des colonnes
                            ' les TextBox de la feuille ""nomonativo",
                            ' on peut utiliser une boucle pour remplir les TextBox de Userform1
                            For i = 1 To 12: UserForm1.Controls("TextBox" & i) = .Cells(Ligne, i + 1): Next
                            TextBox1 = "": TextBox2 = ""
                            UserForm1.Show
                         Else
                           TextBox1 = "": TextBox2 = ""
                           TextBox1.SetFocus
                         End If
         Else
                        UserForm4.Show
            
        End If
End With
End Sub
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 846
dernier inscrit
Silhabib