FOnction de recherche dans une colonne avec copie

Fermé
ptitdal - 4 juil. 2018 à 07:25
 ptitdal - 6 juil. 2018 à 10:58
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
A voir également:

1 réponse

f894009 Messages postés 17188 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 6 mai 2024 1 704
Modifié le 4 juil. 2018 à 08:11
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
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
f894009 Messages postés 17188 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 6 mai 2024 1 704
4 juil. 2018 à 09:50
Re,

Regardez le post 1, j'y ai mis un code
0
Oui c'est votre code que j'ai réutiliser :) mais il ne me donne pas le résultat attendu
0
f894009 Messages postés 17188 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 6 mai 2024 1 704
4 juil. 2018 à 11:14
Re,

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