IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Fonction recherche avec copie de lignes


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2018
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juin 2018
    Messages : 21
    Par défaut Fonction recherche avec copie de lignes
    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 débute sur VBA (je connais depuis à peine une semaine)

    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 lignes correspondantes à 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 équipements sont rentrés en acronymes et d'autre en toutes lettres, la recherche dois pouvoir se faire avec et sans majuscules donc)

    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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    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

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    bonjour
    regarde ce que tu fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    trouve = Sheets(domaine).Cells.Find(what:=valcherche, SearchOrder:=xlByRows, MatchCase:=False, LookAt:=xlPart)
     
     trouve est donc un object cellule(range)
     
    For i = 1 To Sheets(domaine).Range("A65536").End(xlUp).Row
     
     
     
    If Sheets(domaine).Cells(i, 1) = trouve Then
    ' ici sans précisé la propriété de cells(i,1) tu test sa valeur
    'don ton test fait 
    'si la valeurde la cellule(i,1)=l'object cellule then 
    'donc la formule devrait etre 
    
    
    'If Sheets(domaine).Cells(i, 1) .value= trouve.value Then
    cependant je ne pige pas le find et le for next pour la meme recherche dans un tableau c'est soit for soit find et findnext


    CECI DIT:
    si ta recherche doit se faire sur une seule colonne un simple auto filter sera tres bien et te trouvera toutes le lignes concernées en un coup!!
    l'enregistreur de macro te donnera un code presque pret il te restera a variabiliser les variable range et valeur recherchée
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2018
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juin 2018
    Messages : 21
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    re
    bonjour
    regarde ce que tu fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    trouve = Sheets(domaine).Cells.Find(what:=valcherche, SearchOrder:=xlByRows, MatchCase:=False, LookAt:=xlPart)
     
     trouve est donc un object cellule(range)
     
    For i = 1 To Sheets(domaine).Range("A65536").End(xlUp).Row
     
     
     
    If Sheets(domaine).Cells(i, 1) = trouve Then
    ' ici sans précisé la propriété de cells(i,1) tu test sa valeur
    'don ton test fait 
    'si la valeurde la cellule(i,1)=l'object cellule then 
    'donc la formule devrait etre 
    
    
    'If Sheets(domaine).Cells(i, 1) .value= trouve.value Then
    cependant je ne pige pas le find et le for next pour la meme recherche dans un tableau c'est soit for soit find et findnext


    CECI DIT:
    si ta recherche doit se faire sur une seule colonne un simple auto filter sera tres bien et te trouvera toutes le lignes concernées en un coup!!
    l'enregistreur de macro te donnera un code presque pret il te restera a variabiliser les variable range et valeur recherchée
    J'avais déjà essayer avec l'enregistreur de macro, mais je vais checker ca aujourd'hui, je reviens plus tard pour voir si j'ai réussi
    Merci

    par contre, est ce que l'on peut faire une recherche avec une partie du mot que l'on veut ou sans les majuscules comme dans mon code avec la fonction autofilter ?

    EDIT :

    Je n'arrive pas à faire une copie de ce que je retrouve avec la fonction autofilter et je n'arrive pas à faire une recherche avec un mot partiellement écrit (comme pour la fonction .find avec xlpart)
    Désolé je suis pas très bon, je ne fais que reprendre des bout de code que je trouve et j'adapte comme je peux.

  4. #4
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2018
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juin 2018
    Messages : 21
    Par défaut
    Désolé du doublon
    j'ai trouvé mon bonheur sur un autre forum. Franchement j'aurais pas trouvé tout seul, faisant du VBA depuis une semaine ...

    Je post le code ici si quelqu'un tombe un jour sur ce problème.

    Voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    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
                lig = 2
                For n = 1 To Nb
                    lig = .Columns(1).Find(valcherche, .Cells(lig, 1), , xlPart).Row
                    .Rows(lig).Copy Worksheets("Recherche").Rows(Worksheets("Recherche").Range("A65536").End(xlUp).Row + 1)
                Next n
            Else
                MsgBox "Aucune occurance trouvée ! Essayez de changer le nom de l'équipement ou le domaine d'application.", 64, "Erreur"
            End If
     
        End With
        Worksheets("Recherche").Activate 'pour visualiser notre recherche dans la feuille en question
    End Sub

Discussions similaires

  1. [XL-2010] Planning Intervenant - FONCTION RECHERCHE AVEC VARIABLE
    Par cess2308 dans le forum Excel
    Réponses: 8
    Dernier message: 27/12/2012, 20h20
  2. [XL-2003] Fonction recherche avec résultat = n° lignene
    Par Toto_le_héros38 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/05/2011, 19h10
  3. [XL-2007] Fonction recherche et gel de ligne et colonne
    Par bedoch dans le forum Excel
    Réponses: 3
    Dernier message: 22/07/2010, 11h05
  4. [XL-2007] Fonction Recherche et suppression de lignes
    Par gabi75 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/06/2010, 16h32
  5. [XL-2007] recherche avec renvoie numero ligne
    Par MustOne dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 03/08/2009, 17h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo