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 :

Rechercher des mots dans un tableau et selection


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2013
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 14
    Par défaut Rechercher des mots dans un tableau et selection
    Bonjour,

    Je souhaiterai pouvoir rechercher un ou plusieurs mots dans ma feuille et selectionner les cellules les contenant,comment faire?

    Merci

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    389
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 389
    Par défaut
    Bonjour,

    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
    Sub chercheMot()
    Dim cellule1 As String
    Dim cellule As Range
    Dim reponse As String
     
    reponse = InputBox("Taper le mot à chercher", , "mardi")
        If reponse = "" Then Exit Sub
     
        Set cellule = Cells.Find(reponse)
        If Not cellule Is Nothing Then
        cellule1 = cellule.Address
            Do
                MsgBox reponse & " trouvé dans la cellule " & cellule.Address
                Set cellule = Cells.FindNext(cellule)
            Loop Until cellule.Address = cellule1
        End If
    End Sub
    JP

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 184
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Recherche de la chaîne de caractères Marie dans la plage C2:C106 de la feuille nommée db du classeur où se trouve le code VBA
    Procédure qui lance la recherche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub TestSearch_()
     Dim myTable(), rng As Range, Txt As String
     Set rng = ThisWorkbook.Worksheets("db").Range("C2:C106")
     Txt = "Marie"
     myTable = SimpleSearch(rng, Txt)
     If myTable(0) Then Union(myTable()).Select Else MsgBox "Pas trouvé " & Txt
    End Sub
    Fonction d'union (renvoie un range avec des cellules non contiguës)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Function Union(Ranges() As Variant) As Range
     Dim Elem As Long, rng As Range
     For Elem = LBound(Ranges) To UBound(Ranges)
      If TypeOf Ranges(Elem) Is Range Then
       If Not rng Is Nothing Then Set rng = Application.Union(rng, Ranges(Elem)) Else Set rng = Ranges(Elem)
      End If
     Next Elem
     Set Union = rng
    End Function
    Fonction de recherche (Utilise la méthode Find)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Function SimpleSearch(rng As Range, What As String, Optional CaseSensitive As Boolean) As Variant
     Dim Table(), LookIn As Integer, count As Long, C As Range, ResAdr As String
     LookIn = xlValues
     Table = Array(False)
     Set C = rng.Cells(rng.Rows.count, rng.Columns.count) ' LastCell
     Set C = rng.Find(What, LookIn:=LookIn, After:=C, SearchFormat:=False, LookAt:=xlWhole, MatchCase:=CaseSensitive)
     If C Is Nothing Then SimpleSearch = Table: Exit Function
      Table = Array(True): ResAdr = C.Address
      Do
       count = count + 1: ReDim Preserve Table(count): Set Table(count) = C
       Set C = rng.FindNext(C)
      Loop Until C.Address = ResAdr
     SimpleSearch = Table
    End Function
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Membre averti
    Inscrit en
    Avril 2013
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 14
    Par défaut
    Merci pour vos reponses

    Philippe, une fois la recherche faites,comment puis je selectionner mes cellules pour les coller ou bon me semble?

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 184
    Billets dans le blog
    53
    Par défaut
    Bonjour,

    Alors une légère adaptation du code s'impose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub TestSearch_()
     Dim myTable(), rng As Range, Txt As String
     Set rng = ThisWorkbook.Worksheets("db").Range("C2:C106")
     Txt = "Toto"
     myTable = SimpleSearch(rng, Txt)
     If myTable(0) Then
        Set rng = Union(myTable())
       Else
        MsgBox "Pas trouvé " & Txt
     End If
     rng.Select
    End Sub
    rng est la variable objet représentant les cellules qui contiennent les valeurs trouvées.
    Donc dans l'exemple rng.Select peut devenir rng.Copy etc ...
    Cette variable hérite des méthodes et propriétés de l'objet Range
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Membre averti
    Inscrit en
    Avril 2013
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 14
    Par défaut
    Je me permets de te lier un exemple de test pour cette fonction,je ne comprends pas d'ou vient l'erreur sur le copy...
    Fichiers attachés Fichiers attachés
    • Type de fichier : 7z sdg.7z (18,6 Ko, 85 affichages)

Discussions similaires

  1. [XL-97] Rechercher des valeurs dans un tableau
    Par PIEPLU dans le forum Excel
    Réponses: 2
    Dernier message: 25/04/2012, 15h53
  2. rechercher un mot dans un tableau de string
    Par sihammaster dans le forum VB.NET
    Réponses: 8
    Dernier message: 02/04/2010, 12h45
  3. Recherche des mots dans un texte
    Par psyrio dans le forum Langage
    Réponses: 1
    Dernier message: 27/02/2009, 13h15
  4. Réponses: 6
    Dernier message: 17/07/2006, 16h07

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