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 :

Macro recherche par inputbox [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2011
    Messages : 16
    Points : 6
    Points
    6
    Par défaut Macro recherche par inputbox
    Bonjour,

    Je suis débutant en vba et je souhaiterais réaliser la recherche d'un mot dans un fichier excel grâce à l'inputbox. J'ai lu les tutos présents sur les forums, mais malgré tout je n'arrive pas à créer cette macro - j'arrive juste à me servir de l'inputbox pour remplir une cellule du texte que l'on inscrit dans la boite.

    J'ai pensé au principe suivant :
    1) Créer l'inputbox

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Valeur = inputbox("Texte recherché ?")
    Ceci permettrait donc de récupérer le mot recherché ... (Valeur)?

    2) Rechercher ce mot (Valeur)
    C'est la que ca se complique pour ma part ...
    Comment je peux faire pour effectuer la recherche dans tout le classeur?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Range("A1").Select 
    For I = 1 To 65536 
    If ActiveCell.Value = Valeur Then ActiveCell.Select
    If ActiveCell.Value = "" Then GoTo Fin 
    Next 
    Fin :
    End Sub
    Forcement tout ça ne fonctionne pas ... et n'était prévu que pour recherché dans la colonne A1
    Si quelqu'un pourrait m'expliquer comment associer la fonction recherche à l'inputbox et comment effectuer la recherche sur tout le classeur, je le remercie d'avance!

  2. #2
    Membre habitué Avatar de Orhleil
    Homme Profil pro
    Intégrateur fonctionnel
    Inscrit en
    Mai 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Intégrateur fonctionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 81
    Points : 152
    Points
    152
    Par défaut
    Salut à toi !
    Citation Envoyé par ptitgoud Voir le message
    1) Créer l'inputbox

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Valeur = inputbox("Texte recherché ?")
    Ceci permettrait donc de récupérer le mot recherché ... (Valeur)?
    Tout à fait.
    Citation Envoyé par ptitgoud Voir le message
    2) Rechercher ce mot (Valeur)
    C'est la que ca se complique pour ma part ...
    Comment je peux faire pour effectuer la recherche dans tout le classeur?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Range("A1").Select 
    For I = 1 To 65536 
    If ActiveCell.Value = Valeur Then ActiveCell.Select
    If ActiveCell.Value = "" Then GoTo Fin 
    Next 
    Fin :
    End Sub
    Moi j'utilise la méthode match. En général je ne recherche que dans une seule colonne mais ça doit fonctionner aussi pour un espace de recherche plus grand.

    Voilà comment je verrais les choses (non testé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Sub Rechercher()
       Dim Valeur 'Volontairement non explicite, la méthode match fonctionne avec différents types de données
       Valeur = InputBox("Que voulez-vous rechercher ?")
       Dim Trouve As Double
       On Error Resume Next
       For Each Sheet In Worksheets
          Trouve = Application.WorksheetFunction.Match(Valeur, Sheet.UsedRange, 0)
          If Trouve > 0 Then Sheet.Cells(Trouve).Select: Exit Sub
       Next Sheet
    End Sub
    EDIT : par contre du coup ça te renvoie uniquement à la première valeur trouvée

    EDIT 2 : bon j'ai fait un test, il y a un souci avec la fonction Match, j'essaie de trouver le problème et je te dis

    EDIT 3 : voilà ça fonctionne, en fait je suis bien obligé de circuler ligne par ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Sub Rechercher()
        Dim Valeur 'Volontairement non explicite, la méthode match fonctionne avec différents types de données
        Valeur = InputBox("Que voulez-vous rechercher ?")
        Dim Trouve As Double
        On Error Resume Next
        For Each Sheet In Worksheets
            For Each Ligne In Sheet.UsedRange.Rows
                Trouve = Application.WorksheetFunction.Match(Valeur, Intersect(Ligne, Sheet.UsedRange), 0)
                If Trouve > 0 Then Sheet.Cells(Trouve).Select: Exit Sub
            Next Ligne
        Next Sheet
    End Sub

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2011
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    EDIT : par contre du coup ça te renvoie uniquement à la première valeur trouvée
    Ce n'est pas un soucis ça, il s'agit en fait de recherches de codes présents chacun en un seul exemplaire ^^

    Merci de t'intéresser à mon problème, je vais également chercher de ce côté!

    Au passage, j'ai également vu la fonction .find ... serait-ce viable pour essayer d'obtenir un résultat?

  4. #4
    Membre habitué Avatar de Orhleil
    Homme Profil pro
    Intégrateur fonctionnel
    Inscrit en
    Mai 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Intégrateur fonctionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 81
    Points : 152
    Points
    152
    Par défaut
    Citation Envoyé par ptitgoud Voir le message
    Ce n'est pas un soucis ça, il s'agit en fait de recherches de codes présents chacun en un seul exemplaire ^^

    Merci de t'intéresser à mon problème, je vais également chercher de ce côté!

    Au passage, j'ai également vu la fonction .find ... serait-ce viable pour essayer d'obtenir un résultat?
    J'ai trouvé entre temps, ça fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Public Sub Rechercher()
        Valeur = InputBox("Que voulez-vous rechercher ?")
        Dim Trouve As Double
        On Error Resume Next
        Dim IterLigne As Integer
        For Each Sheet In Worksheets
            IterLigne = 0
            For Each Ligne In Sheet.UsedRange.Rows
                Trouve = Application.WorksheetFunction.Match(Valeur, Intersect(Ligne, Sheet.UsedRange), 0)
                IterLigne = IterLigne + 1
                If Trouve > 0 Then: Sheet.Cells(IterLigne, Trouve).Select: Exit Sub
            Next Ligne
        Next Sheet
    End Sub


    EDIT : voilà ça marche ^^

  5. #5
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut Recherche
    Bonjour,

    La fonction VBA est la traduction de la fonction Excel "Equiv". Elle renvoie donc la position de la cellule trouvée.

    Comme mentionné, je préconiserais plutôt la méthode .

    Celle-ci renvoie un objet Range, dont la sélection reste par conséquent possible.

    Par exemple (à adapter)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Sub ESSAI()
    valeur = InputBox("Donner la valeur à chercher", "Recherche")
    Range("A4:A20").Find(valeur, LookIn:=xlValues).Select
    End Sub
    Voir l'aide en ligne qui indique un code intéressant en exemple.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2011
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Je l'ai essayée (la macro avec Match) mais elle ne fonctionne pas chez moi
    Sur la feuille ou je lance la macro, lorsque le mot est présent la case sélectionnée est celle située sur la ligne 1
    Lorsque le mot est présent sur une autre feuille, la recherche ne s'effectue pas non plus


    Concernant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A4:A20").Find(Valeur, LookIn:=xlValues).Select
    Comment élargir la recherche à tout le classeur et non pas sur la plage A4:A20 ?

  7. #7
    Membre habitué Avatar de Orhleil
    Homme Profil pro
    Intégrateur fonctionnel
    Inscrit en
    Mai 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Intégrateur fonctionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 81
    Points : 152
    Points
    152
    Par défaut
    Citation Envoyé par ptitgoud Voir le message
    Je l'ai essayée (la macro avec Match) mais elle ne fonctionne pas chez moi
    Sur la feuille ou je lance la macro, lorsque le mot est présent la case sélectionnée est celle située sur la ligne 1
    Lorsque le mot est présent sur une autre feuille, la recherche ne s'effectue pas non plus
    Je sais je m'étais trompé, c'est corrigé et ça fonctionne (le premier test que j'avais fait mon texte était sur la première ligne alaors j'avais rien vu), c'est corrigé maintenant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Public Sub Rechercher()
        Valeur = InputBox("Que voulez-vous rechercher ?")
        Dim Trouve As Double
        On Error Resume Next
        Dim IterLigne As Integer
        For Each Sheet In Worksheets
            IterLigne = 0
            For Each Ligne In Sheet.UsedRange.Rows
                Trouve = Application.WorksheetFunction.Match(Valeur, Intersect(Ligne, Sheet.UsedRange), 0)
                IterLigne = IterLigne + 1
                If Trouve > 0 Then: Sheet.Cells(IterLigne, Trouve).Select: Exit Sub
            Next Ligne
        Next Sheet
    End Sub
    @MarcelG : j'ai jamais réussi à faire fonctionner correctement Find perso... Du coup je me débrouille à ma façon, ça marche bien ^^

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2011
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    @Orhleil
    C'est bizarre ta macro me sélectionne les cellules avec un décalage
    Par exemple je cherche le mot "blabla" en A6, il me selectionne la cellule A1.
    Je cherche le mot "bloblo" en A8, il me selectionne la cellule A3

  9. #9
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Points : 2 956
    Points
    2 956
    Billets dans le blog
    10
    Par défaut
    Bonjour à tous,
    Je rejoinds MarcelG pour l'utilisation de la méthode find.
    En voici un exemple, à adapter :
    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
    Sub cherche()
    Dim Trouve As Range
    Dim Valeur_cherchee As String 'String = chaine de caractère, à adapter si vous cherchez un nombre par ex...
    Valeur_cherchee = InputBox("Valeur recherchée?")
        'ADAPTER : le nom de la feuille, ici : "Feuil1"
        'ADAPTER : le numéro de la colonne dans laquelle on cherche, ici Columns(1)
        Set Trouve = Sheets("Feuil1").Columns(1).Cells.Find(what:=Valeur_cherchee)
            If Trouve Is Nothing Then
                MsgBox "Pas trouvé"
            Else
                Trouve.Select
                MsgBox "Trouvé à l'adresse : " & Trouve.Address
            End If
    Set Trouve = Nothing
    End Sub
    N'hésitez pas si vous souhaitez des commentaires supplémentaires...

  10. #10
    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
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    bonjour

    il y a aussi la fonction "findnext " a cas ou il y aurais plusieur occurences dans la used range

    tient voila un exemple ultra rapide qui cherchetoute les occurence de ta valeur dans toute la feuille, si il y en a q'une il y en a q'une



    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
     
    Sub recherche_dans_la_feuille()
        Dim valeur As Variant
        Dim premiere As Variant
        Dim liste As String
     
        valeur = InputBox("Donner la valeur à chercher", "Recherche")
        If valeur <> "" Then
            With Sheets(1).Cells    'on va chercher dans toute la feuille 1' a adapter a ton cas
                Set celulle = .Find(valeur, LookIn:=xlValues)
                If Not celulle Is Nothing Then
                    premiere = celulle.Address
                    Do
                        liste = liste & vbCrLf & celulle.Address    'ici je vais enregistrer dans la variable liste toute les adresses ou ce trouve la valeur
                        'action a faire dès que la ligne est trouvée
                        Set celulle = .FindNext(celulle)
                    Loop While Not celulle Is Nothing And celulle.Address <> premiere
                End If
            End With
        End If
        MsgBox liste
    End Sub


    au plaisir

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2011
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Merci tout le monde pour vos réponses!
    Je vais essayer de me débrouiller avec tout ça et voir ce que ça donne!

    EDIT: Est-ce possible d'élargir la recherche à tout le classeur et non pas à une feuille donnée?
    De plus si la valeur recherchée est une chaîne de caractères avec des chiffres que doit-on mettre à la place de "As String" ?

  12. #12
    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 025
    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 025
    Points : 29 111
    Points
    29 111
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    EDIT:Est-ce possible d'élargir la recherche à tout le classeur et non pas à une feuille donnée?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim wkb As Workbook: Set wkb = ThisWorkbook
      Dim sht As Worksheet
      For Each sht In wkb.Worksheets
        Debug.Print sht.Name
      Next

  13. #13
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Points : 2 956
    Points
    2 956
    Billets dans le blog
    10
    Par défaut
    Bonjour,
    1- pour rechercher n'importe quel type de valeur, utilise le code de PatrickToulon (salut au passage), qui déclare la variable Valeur As Variant.
    En prime un lien sur les variables...

    2- Pour rechercher sur toutes les feuilles de ton classeur, il te faut faire une boucle sur chaque feuille. Pour cela, dans l'exemple, je vais adapter le code de Patrick :
    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
    Sub recherche_dans_la_feuille()
        Dim valeur As Variant
        Dim premiere As Variant
        Dim liste As String
        Dim Wsh As Worksheet
        Dim cellule As Range
     
        valeur = InputBox("Donner la valeur à chercher", "Recherche")
        If valeur <> "" Then
            For Each Wsh In ThisWorkbook.Worksheets
            With Sheets(Wsh.Name).Cells    'on va chercher dans toute la feuille 1' a adapter a ton cas
                Set cellule = .Find(valeur, LookIn:=xlValues)
                If Not cellule Is Nothing Then
                    premiere = cellule.Address
                    Do
                        liste = liste & vbCrLf & Wsh.Name & " " & cellule.Address    'ici je vais enregistrer dans la variable liste toute les adresses ou ce trouve la valeur
                        'action a faire dès que la ligne est trouvée
                        Set cellule = .FindNext(cellule)
                    Loop While Not cellule Is Nothing And cellule.Address <> premiere
                End If
            End With
            Next
        End If
        MsgBox liste
    End Sub
    La méthode .find admet également le paramètre Lookat, qui te permet de rechercher soit la valeur exacte, soit une valeur contenue dans.
    Exemples :
    Lookat:=xlPart va trouver "ans" dans la phrase : "dans la jungle"
    Lookat:=xlWhole va chercher la valeur exacte, elle ne trouvera pas "ans" dans "dans la jungle". Elle ne trouvera la bonne cellule que si tu lui demandes de chercher "dans la jungle".
    Syntaxe adaptée du code de Patrick Toulon (Encore!!!!!)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set cellule = .Find(valeur, LookIn:=xlValues, lookat:=xlWhole)
    Une bonne journée à toutes et tous.

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2011
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par corona
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim wkb As Workbook: Set wkb = ThisWorkbook
      Dim sht As Worksheet
      For Each sht In wkb.Worksheets
        Debug.Print sht.Name
      Next
    Je ne comprends pas trop où le mettre ça


    Citation Envoyé par pijaku
    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
    Sub recherche_dans_la_feuille()
        Dim valeur As Variant
        Dim premiere As Variant
        Dim liste As String
        Dim Wsh As Worksheet
        Dim cellule As Range
     
        valeur = InputBox("Donner la valeur à chercher", "Recherche")
        If valeur <> "" Then
            For Each Wsh In ThisWorkbook.Worksheets
            With Sheets(Wsh.Name).Cells    'on va chercher dans toute la feuille 1' a adapter a ton cas
                Set cellule = .Find(valeur, LookIn:=xlValues)
                If Not cellule Is Nothing Then
                    premiere = cellule.Address
                    Do
                        liste = liste & vbCrLf & Wsh.Name & " " & cellule.Address    'ici je vais enregistrer dans la variable liste toute les adresses ou ce trouve la valeur
                        'action a faire dès que la ligne est trouvée
                        Set cellule = .FindNext(cellule)
                    Loop While Not cellule Is Nothing And cellule.Address <> premiere
                End If
            End With
            Next
        End If
        MsgBox liste
    End Sub
    Ahh merci ca fonctionne niquel !! Je vais juste essayer de modifier pour que la cellule trouvée soit sélectionnée et affichée si sur une feuille différente (à la place des msgbox)

    Merci encore tout le monde!!

  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
    13 025
    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 025
    Points : 29 111
    Points
    29 111
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each Wsh In ThisWorkbook.Worksheets
    With Sheets(Wsh.Name).Cells    'on va chercher dans toute la feuille 1' a adapter a ton cas
      Set cellule = .Find(valeur, LookIn:=xlValues)
    Tu peux aussi utiliser la variable objet ainsi With Wsh.Cells

  16. #16
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2011
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    @corona : J'ai fait la modif!

    Je ne comprends pas ce passage ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If not cellule Is Nothing Then
       premiere = cellule.Address
       Do
          liste = liste&vbCrLf&Wsh.Name&""&cellule.Address
    Je ne cherche pas à faire une liste des emplacements ou se trouve le mot recherché, je cherche juste à l'afficher s'il est présent, et s'il n'est pas présent le signaler (msgbox par exemple).
    C'est ce passage que je dois donc modifier pour apporter ça?

  17. #17
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Octobre 2008
    Messages : 273
    Points : 323
    Points
    323
    Par défaut
    Bonjour,
    si tu ne veux que la première occurrence trouvée, c'est bien là qu'il faut faire la modif.
    Tu dois enlever la boucle Do/Loop et le Set cellule = .FindNext(cellule) qui permettent de boucler sur toute la plage pour rechercher toutes les occurrences, puis remplacer le
    liste = liste&vbCrLf&Wsh.Name&""&cellule.Address
    par cellule.select pour activer la cellule contenant la recherche.

  18. #18
    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 025
    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 025
    Points : 29 111
    Points
    29 111
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste = liste & vbCrLf & Wsh.Name & "" & cellule.Address
    La variable liste est un string qui contient la liste des endroits trouvés nom de la feuille (Wsh.Name) & l'adresse de la cellule (cellule.Address), précédé de la constante Visual Basic vbCrLf qui est un Carriage Return Line Feed cad une retour à la ligne.
    Si tu souhaites n'avoir que le contenu de la cellule, tu utilises la propriété value de la variable objet cellule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste = liste & vbCrLf & Wsh.Name & "" & cellule.Value
    Maintenant, si tu ne souhaites pas de liste et afficher directement par un msgbox la valeur de la cellule, tu remplaces cette ligne par msgbox cellule.value

  19. #19
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2011
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par oOVaveOo Voir le message
    Bonjour,
    si tu ne veux que la première occurrence trouvée, c'est bien là qu'il faut faire la modif.
    Tu dois enlever la boucle Do/Loop et le Set cellule = .FindNext(cellule) qui permettent de boucler sur toute la plage pour rechercher toutes les occurrences, puis remplacer le
    liste = liste&vbCrLf&Wsh.Name&""&cellule.Address
    par cellule.select pour activer la cellule contenant la recherche.
    J'avais essayé ça, mais le problème c'est que j'ai une erreur lorsque le mot recherché est sur une autre feuille
    "La méthode Select de la classe Range a échoué"

  20. #20
    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 025
    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 025
    Points : 29 111
    Points
    29 111
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si tu souhaites sélectionner la première cellule trouvée et ensuite quitter la procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
          With sht.Cells    ' On va chercher dans toute la feuille 1' a adapter a ton cas
            Set cellule = .Find(valeur, LookIn:=xlValues)
            If Not cellule Is Nothing Then
    '          premiere = cellule.Address
              sht.Activate: cellule.Select: Exit Sub
    '          Do
    '           liste = liste & vbCrLf & sht.Name & " " & cellule.Address    'ici je vais enregistrer dans la variable liste toute les adresses ou ce trouve la valeur
    '           ' Action a faire dès que la ligne est trouvée
    '           Set cellule = .FindNext(cellule)
    '          Loop While Not cellule Is Nothing And cellule.Address <> premiere
            End If
          End With
    Le code qui est derrière l'apostrophe peut être enlevé.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Macro recherche de somme : définir la zone concernée par la recherche
    Par macpiero dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/03/2014, 12h10
  2. [AC-2007] Faire défiler les résultats d'une recherche par macro
    Par lillou_21 dans le forum Macros Access
    Réponses: 1
    Dernier message: 11/02/2013, 10h12
  3. Macro : recherche dans textes par cellule
    Par roidurif dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 06/11/2012, 22h39
  4. [XL-2010] Macro qui recherche par mot clé
    Par Adrien13 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/10/2011, 17h38
  5. Recherche par macro
    Par ericdev67 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/04/2008, 19h48

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