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

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2013
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 14
    Points : 9
    Points
    9
    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 averti
    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
    Points : 437
    Points
    437
    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
    12 952
    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 : 12 952
    Points : 28 960
    Points
    28 960
    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

  4. #4
    Futur Membre du Club
    Inscrit en
    Avril 2013
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 14
    Points : 9
    Points
    9
    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
    12 952
    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 : 12 952
    Points : 28 960
    Points
    28 960
    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

  6. #6
    Futur Membre du Club
    Inscrit en
    Avril 2013
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 14
    Points : 9
    Points
    9
    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, 69 affichages)

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 952
    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 : 12 952
    Points : 28 960
    Points
    28 960
    Billets dans le blog
    53
    Par défaut
    Bonjour,

    Pour ma part, je préfère visualiser ton code avant d'ouvrir le classeur que je ne télécharge que si vraiment il y a une incompréhension par rapport au code et à son résultat normalement attendu.

  8. #8
    Futur Membre du Club
    Inscrit en
    Avril 2013
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    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
    Sub TestSearch_()
     Dim myTable(), rng As Range, Txt As String
     Set rng = ThisWorkbook.Worksheets("feuil1").Range("A1:F12")
     Txt = "Tortue"
     myTable = SimpleSearch(rng, Txt)
     If myTable(0) Then
        Set rng = Union(myTable())
       Else
        MsgBox "Pas trouvé " & Txt
     End If
     rng.Select
     'rng.Copy
    End Sub
     
    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
    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
    Voila mon code

  9. #9
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    comment ce manifeste cette erreur ?

  10. #10
    Futur Membre du Club
    Inscrit en
    Avril 2013
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    J'ai une erreur de type "1004"

  11. #11
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    sur qu'elle ligne ...

  12. #12
    Futur Membre du Club
    Inscrit en
    Avril 2013
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    La 12, quand j'active rng.Copy

  13. #13
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Excel ne permet pas de faire une copie d'une sélection multiple...

    Je comprends pas ce que tu veux faire en copiant toutes ces cellules qui contiennent "Tortue" et surtout comment veux tu les coller ?

  14. #14
    Futur Membre du Club
    Inscrit en
    Avril 2013
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    Pour faire simple, j'ai un planning annuel avec different valeur, une pour chaque jour.
    M=Matin
    AP=...
    N=Nuit
    WK=Weekend
    CP=Congé Payé

    Mon but est de n'avoir au final que un planning avec les CP affichés

  15. #15
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 952
    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 : 12 952
    Points : 28 960
    Points
    28 960
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Le problème vient du fait que l'objet Range (la variable rng) contient sans aucun doute des cellules se trouvant sur plusieurs colonnes et sur des lignes différentes.
    Il est impossible de faire une copie ainsi.
    Tu peux faire une copie sur des cellules se trouvant sur des lignes différentes mais alors sur la même colonne.

    Ta question initiale était : Comment faire une sélection ?
    Je souhaiterai pouvoir rechercher un ou plusieurs mots dans ma feuille et selectionner les cellules les contenant,comment faire?
    et ma réponse était faite dans ce sens.

  16. #16
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Peut-être changer de procédure :

    Tout copier puis effacer tout ce qui n'est pas "CP"


    Ou bien jouer avec la mise en forme conditionnelle , ce qui pourrais te permettre de masquer ce qui n'est pas égal à CP ....

  17. #17
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 952
    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 : 12 952
    Points : 28 960
    Points
    28 960
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si tu souhaites copier toutes les lignes contenant le mot cherché, voici une variante au code
    Recherche sur la plage complète (A2:L102) du mot par exemple Tortue et ensuite copie des lignes contenant ce mot vers la feuille3 (CodeName) à partir de la cellule A1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     With rng
     .EntireRow.Copy Feuil3.Range("A1")
     End With

  18. #18
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Pour faire cela avec une mise en forme conditionnelle


    sélectionne ta zone A1:F12 puis ajoute une règle : Mise en forme conditionnelle/Utiliser une formule ...

    avec comme formule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NON(OU(A1=$A$21;$A$21="*"))
    choisi une écriture blanche sur fond blanc ( pour "masquer" tes caratères)


    et voilà l'affichage dépend du contenu de la cellule A21

    s'il y as une étoile: tous tes codes sont affichés CP, WK, ....

    si tu met CP en A21 , seul les CP sont visibles ...

    et cela sans code VBA...

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, 14h53
  2. rechercher un mot dans un tableau de string
    Par sihammaster dans le forum VB.NET
    Réponses: 8
    Dernier message: 02/04/2010, 11h45
  3. Recherche des mots dans un texte
    Par psyrio dans le forum Langage
    Réponses: 1
    Dernier message: 27/02/2009, 12h15
  4. Réponses: 6
    Dernier message: 17/07/2006, 15h07

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