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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    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 éclairé 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
    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
    Membre averti
    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
    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 éclairé 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
    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
    Membre averti
    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
    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 ?

  6. #6
    Membre éclairé 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
    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 ^^

  7. #7
    Expert confirmé
    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
    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.

+ Répondre à la discussion
Cette discussion est résolue.

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, 11h10
  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, 09h12
  3. Macro : recherche dans textes par cellule
    Par roidurif dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 06/11/2012, 21h39
  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, 16h38
  5. Recherche par macro
    Par ericdev67 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/04/2008, 18h48

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