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

Excel Discussion :

Rechercher une valeur dans plusieurs feuilles


Sujet :

Excel

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    785
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 785
    Points : 182
    Points
    182
    Par défaut Rechercher une valeur dans plusieurs feuilles
    Bonjour à tous.

    J’ai besoin d’un petit coup de main.

    Voilà le problème :

    Rechercher un mot au travers de certaines feuilles par ex.(« Feuil1 », « Feuil2 », « Feuil2 ») sélectionner la feuille et le mot trouvé.

    J’ai essayé çà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    mot = InputBox("Mot à rechercher ?")
        For Each Feuille In Sheets
        Set trouvé1 = Cells.Find(What:=mot, LookAt:=xlWhole)
        If Not trouvé1 Is Nothing Then
            trouvé1.Select
        End If
        Next Feuille
    Cà bug sur « Set trouvé1 = Cells.Find(What:=mot, LookAt:=xlWhole)”.

    Je ne trouve pas de solution quelqu’un pourrait-il m’aidait

    Merci d’avance.

  2. #2
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    Si le mot recherché n'apparaît qu'une seule fois dans le classeur ou si plusieurs exemplaires on veut s'arrêter sur le premier mot trouvé, essaye comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub RECHERCHER()
    mot = InputBox("Titre ou extrait de titre à rechercher ?")
    If mot = "" Then Exit Sub
    For feuille = 1 To Sheets.Count
        Sheets(feuille).Activate
        Set C = Cells.Find(What:=mot, lookat:=xlWhole)
        If Not C Is Nothing Then
        C.Activate
        Exit Sub
        End If
    Next feuille
    End Sub
    Dans le cas où le mot cherché pourrait apparaître plusieurs fois dans le classeur et que tu veux poursuivre la recherche après le premier mot trouvé, le code ci-dessus doit être adapté
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    785
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 785
    Points : 182
    Points
    182
    Par défaut
    Bonjour fring

    Merci d'avoir répondu rapidement à ma question.

    J'ai testé ton code çà tourne sans problème.

    En effet le mot recherché n'apparaît qu'une seule fois dans le classeur et la procédure doit s'arrêter dès que ce mot a été trouvé.

    Petite question complémentaire, comment modifier ton code pour limiter la recherche dans certaines feuilles ?

    @+

  4. #4
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Citation Envoyé par modus57 Voir le message
    Petite question complémentaire, comment modifier ton code pour limiter la recherche dans certaines feuilles ?
    Bah...plusieurs possibilités, tout dépend de ce que tu entends par "certaines feuilles"

    Tu peux détailler ce que tu souhaiterais obtenir stp ? (les 10 dernières feuilles, 1 feuille sur 2, les feuilles qui se nomment "Schmurth", les feuilles 2/7/15/37/48, etc...)
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    785
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 785
    Points : 182
    Points
    182
    Par défaut
    Re bonjour fring.

    P
    Tu peux détailler ce que tu souhaiterais obtenir stp ? (les 10 dernières feuilles, 1 feuille sur 2, les feuilles qui se nomment "Schmurth", les feuilles 2/7/15/37/48, etc...)
    Par exemple sur 12 feuilles nommées "test1" à "test12", limiter la recherche dans les feuilles nommées "test2" à "test8".

  6. #6
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Si elles sont rangées dans l'ordre, càd si "test1" = 1ère feuille, "test2" = 2ème feuille, ......, "test12" = 12ème feuille, on pourrait simplement changer
    au lieu de For feuille = 1 To Sheets.Count

    Tu dis cette modif est suffisante
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    785
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 785
    Points : 182
    Points
    182
    Par défaut
    Bonsoir fring

    Elles sont rangées dans l'odre et ta modif fonctionne parfaitement.

    Pour améliorer mes connaissances, question subsidiaire:
    Quel est le code pour une recherche dans les feuilles "test2", "test4" ,"test6"
    "test7" et "test10", par exemple.

    Merci d'avance pour ta réponse.

  8. #8
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    467
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 467
    Points : 493
    Points
    493
    Par défaut
    Bonsoir
    voici un code qui recherche une valeur dans toutes les feuilles du classeur active,même si tu veux limiter la recherche à un certaine feuilles du classeur tu modifié seulement cette ligne de code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each sh In Sheets(Array("test2", "test4","test6", "test7", "test10"))
    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
    Sub ChercherDansClasseur()
    Dim Feuille As String, y As Long
    Dim AdrValeur As Range
     Mot = InputBox("Mot à rechercher ?")
        For Each sh In Sheets(Array("test2", "test4","test6", "test7", "test10"))
          Feuille = sh.Name
            With Sheets(Feuille)
              Set AdrValeur = .Cells.Find(What:=Mot, LookAt:=xlWhole)
                 If Not AdrValeur Is Nothing Then
                   PremAddress = AdrValeur.Address
                 Do
                    Sheets(Feuille).Activate
                    AdrValeur.Select
                       Exit Sub
           Loop While Not AdrValeur Is Nothing And AdrValeur.Address <> PremAddress
        End If
      End With
     Next
    Set AdrValeur = Nothing
    End Sub
    Bonne soirée

    Abed_H

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    785
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 785
    Points : 182
    Points
    182
    Par défaut
    Bonjour Abed_H, fring

    Abed_H à dit:
    voici un code qui recherche une valeur dans toutes les feuilles du classeur active,même si tu veux limiter la recherche à un certaine feuilles du classeur tu modifié seulement cette ligne de code.

    Voici une autre solution en m'inspirant du code de "fring" et ton 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
     
    Sub ChercherDansClasseursNonContigus()
    Mot = InputBox("Mot à rechercher ?")
    If mot = "" Then Exit Sub
    Groupe = (Array("test2", "test4","test6", "test7", "test10"))
        For Feuille = 1 To Sheets(Groupe).Count
        Sheets(Feuille).Activate
        Set c = Cells.Find(What:=Mot, LookAt:=xlWhole)
        If Not trouvé1 Is Nothing Then
            c.Activate
            Exit For
        End If
        Next Feuille
        ActiveSheet.Select
    End Sub
    Merci d'avance pour votre avis @+

  10. #10
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Juste pour économiser les touches du clavier, on peut gagner une ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub ChercherDansClasseursNonContigus()
    Mot = InputBox("Mot à rechercher ?")
    If mot = "" Then Exit Sub
    Groupe = (Array("test2", "test4", "test6", "test7", "test10"))
        For Feuille = 1 To Sheets(Groupe).Count
        Sheets(Feuille).Activate
        Set c = Cells.Find(What:=Mot, LookAt:=xlWhole)
        If Not trouvé1 Is Nothing Then
            c.Activate
            Exit For
        End If
        Next Feuille
    End Sub
    Je ne l'ai pas testé mais à 1ère vue cela ne donnera pas le résultat souhaité parce que Sheets(Groupe).Count va donner comme résultat 5 donc il va aller chercher dans les feuilles 1 à 5
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    785
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 785
    Points : 182
    Points
    182
    Par défaut
    Re bonjour Abed_H, fring

    J'avais mal testé mon code , tu as raison fring cela ne peut pas fonctionner.

    La salution de Abed_H est plus appropriée, je la teste pour être sur quelle fonctionne dans mon apli.

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    785
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 785
    Points : 182
    Points
    182
    Par défaut
    Bonsoir Abed_H, fring

    Aprés avoir testé ton code j'ai un autre problème, que je narrive pas à résoudre :

    J'ai des valeurs en colonnes A de "Feuil1" et je voudrais lister les valeurs qui se trouvent dans cette colonne mais pas dans la colonne A des "Feuil2" à "Feuil8" et supprimer dans "Feuil1" la ou les ligne qui contiennent les valeurs qui n'existe pas dans la colonne A des "Feuil2" à "Feuil8".

    Pourriez-vous m'aider car j'ai beau chercher je ne trouve pas de solution.

    Merci

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    785
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 785
    Points : 182
    Points
    182
    Par défaut
    Re

    Un bout de code que j'ai trouvé sur le net, mais qui fonctionne avec une seule feuille, si çà peut aider.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub test()
    x = 1
    For Each Cel In Worksheets("Feuil1").Range(zone1)
    Set Cherch = Worksheets("Feuil2").Range(zone2).Find(Cel)
    If Cherch Is Nothing Then
        Cel.Delete
        x = x + 1
    End If
    Next
    End Sub

  14. #14
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    Ceci devrait répondre à ta demande
    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 Rechercher_Supprimer()
    Dim X As Boolean, i As Integer
    Application.ScreenUpdating = False
    For i = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
    X = True
        If Sheets(1).Cells(i, 1) <> "" Then
            For feuille = 2 To 8
                With Sheets(feuille)
                Set C = .Range("A2:A65535").Find(What:=Sheets(1).Cells(i, 1), lookat:=xlWhole)
                If Not C Is Nothing Then
                X = True
                Exit For
                Else: X = False
                End If
                End With
            Next feuille
        End If
    If X = False Then Sheets(1).Rows(i).Delete
    Next i
    Sheets(1).Activate
    Application.ScreenUpdating = True
    End Sub
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    785
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 785
    Points : 182
    Points
    182
    Par défaut
    Bonjour fring

    Ceci devrait répondre à ta demande
    La procédure ne fonctionne pas tout à fait comme je le voudrais.

    Pour une meilleure compréhension je te joins un fichier explicatif @+

  16. #16
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    La procédure ne fonctionne pas comme tu le voudrais... mais exactement comme tu l'as demandé...!
    mais pas dans la colonne A des "Feuil2" à "Feuil8"
    Dans ton fichier joint les mots ne se trouvent pas que dans la colonne A.

    Tu remplaces simplementpar
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  17. #17
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    785
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 785
    Points : 182
    Points
    182
    Par défaut
    Bonsoir fring

    Désolé je suis me suis mal expliqué dans mon précédent message, effectivement la procédure fonctionne parfaitement.

    Merci pour ton aide

  18. #18
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    785
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 785
    Points : 182
    Points
    182
    Par défaut
    Bonsoir fring

    Je reviens sur ce fil pour demander encore ton aide, car je ne suis pas un spécialiste en VBA.

    Si j'ai bien compris, la procédure compte dans la "Feuil1" les lignes depuis la dernière cellule jusqu'à la deuxième cellule de la colonne A.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    For i = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
    Mais comment procéder pour limiter le comptage à une zone nommée "liste_noms" (adresse Feuil1!$A$5:$A$15) ?

    Merci d'avance pour ta réponse.

  19. #19
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    467
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 467
    Points : 493
    Points
    493
    Par défaut
    Bonsoir
    remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
    par
    Abed_H

  20. #20
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    785
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 785
    Points : 182
    Points
    182
    Par défaut
    Bonsoir Abed_H

    Ok j'ai compris, mais j'ai oublié de préciser que l'adresse de la zone nommée "liste_noms" peut variée par ex. (adresse Feuil1!$A$5:$A$15) peut devenir (adresse Feuil1!$A$10:$A$25).

    @ +

Discussions similaires

  1. [XL-2007] Somme d'une valeur dans plusieures feuilles
    Par zaza45 dans le forum Excel
    Réponses: 2
    Dernier message: 25/03/2013, 12h20
  2. [XL-2010] Somme sur une recherche de valeur dans plusieurs colonnes
    Par Marmouz dans le forum Excel
    Réponses: 2
    Dernier message: 21/01/2012, 15h06
  3. [XL-2007] Rechercher une valeur dans une feuille, ligne, colonne ou tableau
    Par XceSs dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 09/08/2011, 19h26
  4. Réponses: 7
    Dernier message: 21/11/2009, 22h00
  5. Recherche d'une valeur dans plusieurs colonnes
    Par Arnaud F. dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/03/2009, 11h44

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