Probleme avec macro recherche excel

lindette Messages postés 38 Statut Membre -  
Polux31 Messages postés 7219 Statut Membre -
Bonjour,
J'ai créer une macro déclenche par crtl + h qui ouvre une boite de dialogue dans laquelle on rentre le nom à rechercher dans la colonne A (nom et prénom client)

mais j'ai un probleme si je fais une recherche sur le nom SIMON et bien il me place sur AMEDEE SIMON alors que Simon est les prénom et j'ai un autre client qui lui a pour nom SIMON (je n'ai pas de prénom) . Et moi j'aimerais vraiment qu'il fasse la rechercher par le nom et si nécessaire aprés par le prénom. Quelqu'un aurait il une petite idée?
voici ma macro

Sub recherche()
Dim rngTrouve As Range
Dim strChaine As String

strChaine = InputBox("Nom à rechercher :")
Set rngTrouve = ActiveSheet.Columns(1).Cells.Find(what:=strChaine)

If rngTrouve Is Nothing Then
MsgBox "Pas trouvé"
Else
Cells.Find(what:=strChaine).Activate
End If

Set rngTrouve = Nothing
End Sub

Merci d'avance
Linda
Configuration: Windows XP
Internet Explorer 6.0

6 réponses

  1. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Bonjour,

    C'est normal que ta recherche se place sur le premier élément trouvé. Tu fais une recherche sur une chaine de caractère contenu dans une cellule. Ce que tu demandes est un plus complexe et le fait d'avoir le nom et le prénom dans la même colonne complique encore plus la recherche. Il faudrait une fonction qui te retourne la première chaîne de caractère d'une cellule(avant le premier espace) et que tu compare ensuite au nom entré par l'utilisateur, mais les noms composés passeront au travers.

    Voilà un exemple de fonction qui retourne la première chaîne de caractère, celle juste avant un espace:

    Public Function returnPremChaine(Byval str As String) As String
    Dim i As Integer
    Dim lg As Integer
    
         lg = Len(str)
         For i = 1 To lg
              If Mid(str,i,1) = " " Then
                   returnPremChaine = Mid(str,1, i - 1)
              End If
         Next i
    End Function


    Bon courage

    ;o)

    Polux
    0
  2. lindette
     
    Bonjour
    merci pour ta réponse mais je n'arrive pas à l'appliquer.Je continues néanmoins à essayer...
    merci encore
    Lindette
    0
  3. Polux31 Messages postés 7219 Statut Membre 1 204
     
    bonsoir,

    Voilà un exemple pour utiliser la fonction:

    Public Sub searchName()
    Dim strChaine As String 
    Dim i As Integer
    
    i = 1
    
    strChaine = InputBox("Nom à rechercher :")
    
    With Worksheets("Feuil1")
         While .Range("A" & i).Value <> " "
               If  strChaine = returnPremChaine(.Range("A" & i).Value) Then
                    .Range("A" & i).Activate
               End If
               i = i + 1
         Wend
    
    End Sub
    


    Bon courage

    ;o)

    Polux
    0
  4. lindette Messages postés 38 Statut Membre
     
    Bonjour Polux

    J ai eu quelques problemes de connexion internet mais c'est maintenant résolu. Je vais donc travaillé sur les codes que tu as eu la gentillesse de m'envoyer.
    Je te tiens au courant
    merci
    Lindette
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lindette Messages postés 38 Statut Membre
     
    Rebonsoir
    bon j'ai essayer de mettre en application le code mais message d'erreur "dépassement de capacité" et c'est par rapport à i = i + 1
    et je séche complétement. As-tu une idée?
    Merci
    Linda
    0
  7. Polux31 Messages postés 7219 Statut Membre 1 204
     
    bonjour,

    Ca vient peut être de là :
    While .Range("A" & i).Value <> " "

    met ça : While .Range("A" & i).Value <> ""

    remplace : Dim i As Integer par Dim i As Long

    Tiens moi au courant stp

    Polux
    0