FOnction de recherche dans une colonne avec copie

ptitdal -  
 ptitdal -
Bonjour,

Je suis face à un nouveau problème sur VBA, après pas mal de recherche j'ai décidé de créer cette discussion.

Je souhaiterais faire une recherche via un userform, l'idée est qu'une combobox me donne la feuille où chercher, la textbox me donne la valeur que je veux chercher et le reste c'est du code pour trouver les ligne correspondante à ma valeur. Pour se faire j'ai utilisé la fonction .find (xlpart) pour trouver toutes les lignes qui correspondraient à ce que j'écrit en partie. (j'espère que c'est clair :) )

Mon problème est que quand j'ai un équipement qui porte uniquement 2 lettres, la copie ne se fait pas dans le tableau sur la feuille recherche, pour que ca fonctionne je dois activer le Matchcase, mais je ne veux pas le faire sinon la recherche deviendra trop compliqué (entre autre, certains équipement sont rentrés en acronyme et d'autre en toutes lettres)

Je dois donc pouvoir rechercher n'importe quoi dans ma feuille active, dans la colonne A, et renvoyer une erreur quand aucune occurrence n'est trouvée.

Ma recherche ne fonctionne pas quand il y a moins de 3 lettres et l'erreur m'est renvoyée systématiquement même si je trouve une occurrence.

Merci d'avance pour votre aide.

Voici mon code :

Private Sub CommandButton2_Click()

Sheets("Recherche").Cells.Clear 'supression de ce qui se trouve sur la feuille recherche

If ComboBox1.Value = "" Then MsgBox "Veuillez indiquer le domaine d'application de votre recherche.", 64, "Erreur"

If TextBox1.Value = "" Then MsgBox "Veuillez indiquer un nom d'équipement pour effectuer une recherche.", 64, "Erreur"

Dim valcherche As String
Dim i As Long
Dim domaine As String
Dim trouve As Variant
Dim adressetrouvee As String
Dim plage As String

domaine = ComboBox1.Value
valcherche = TextBox1.Value

trouve = Sheets(domaine).Cells.Find(what:=valcherche, SearchOrder:=xlByRows, MatchCase:=False, LookAt:=xlPart)

For i = 1 To Sheets(domaine).Range("A65536").End(xlUp).Row
If Sheets(domaine).Cells(i, 1) = trouve Then

Sheets(domaine).Rows(i).Copy Worksheets("Recherche").Rows(Worksheets("Recherche").Range("A65536").End(xlUp).Row + 1)

With Selection ' mise en page de la copie
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With

If trouve = "" Then
MsgBox "Aucune occurance trouvée ! Essayez de changer le nom de l'équipement ou le domaine d'application.", 64, "Erreur"
End If
End If

Next i

Sheets("recherche").Activate 'pour visualiser notre recherche dans la feuille en question

End Sub

1 réponse

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    Je dois donc pouvoir rechercher n'importe quoi
    Donc vous voulez trouver toutes cellules qui contiennent au moins ce que vous avez choisi !

    une facon de faire

    Private Sub CommandButton2_Click()
        Dim valcherche As String
        Dim domaine As String
        Dim Nb As Long
        
        domaine = ComboBox1.Value
        valcherche = Textbox1.Value
        Worksheets("Recherche").Cells.Clear 'supression de ce qui se trouve sur la feuille recherche
    
        With Worksheets(domaine)
            valcherche = "*" & valcherche & "*"     'equivalent Like
            Nb = Application.CountIf(.Columns(1), valcherche)       'nombre de fois la valeur cherchee
            If Nb > 0 Then      'Ok au moins 1
                .Rows(i).Copy Worksheets("Recherche").Rows(Worksheets("Recherche").Range("A65536").End(xlUp).Row + 1)
            Else
                MsgBox "Aucune occurance trouvée ! Essayez de changer le nom de l'équipement ou le domaine d'application.", 64, "Erreur"
            End If
            '?????????????????????????????????
            'With Selection ' mise en page de la copie
            '    .HorizontalAlignment = xlCenter
            '     .VerticalAlignment = xlCenter
            '    .WrapText = True
            '    .Orientation = 0
            '    .AddIndent = False
            '    .IndentLevel = 0
            '    .ShrinkToFit = False
            '    .ReadingOrder = xlContext
            '    .MergeCells = False
            'End With
        End With
        Worksheets("Recherche").Activate 'pour visualiser notre recherche dans la feuille en question
    End Sub
    0
    1. ptitdal
       
      Bonjour,

      Merci pour votre réponse.
      Oui je veux faire une recherche dans la colonne A de tout ce que je rentre dans un textbox. il faut que la recherche soit aussi efficace avec ou sans majuscules et avec une partie du mot ou de ce qui se trouve dans la cellule.


      Le code que vous m'avez fait me ressort une erreur définie par l'objet sur la ligne

      .Rows(i).Copy Worksheets("Recherche").Rows(Worksheets("Recherche").Range("A65536").End(xlUp).Row + 1)


      j'ai remplacé par ceci pour remettre la variable Nb

      .Rows(Nb).Copy Worksheets("Recherche").Rows(Worksheets("Recherche").Range("A65536").End(xlUp).Row + 1)


      Mais quand j'exécute la recherche je me retrouve uniquement avec la première ligne de mon tableau qui est copié(c'est le titre de chaque colonne, donc inutile), et en plus cela ne correspond pas à ma recherche Lol
      0
    2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,

      Regardez le post 1, j'y ai mis un code
      0
    3. ptitdal
       
      Oui c'est votre code que j'ai réutiliser :) mais il ne me donne pas le résultat attendu
      0
    4. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,

      Normal, j'ai oublie de mettre le code de recherche
      Je rectifie
      0
    5. ptitdal
       
      D'acc haha
      Merci !
      0