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 :

[VBA-E] effectuer une recherche dans un autre classeur


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
    Janvier 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 38
    Par défaut [VBA-E] effectuer une recherche dans un autre classeur
    Bonjour à toutes et à tous !!! Je suis novice dans la programmation pour Excel et j'aurais voulu avoir vos conseils...

    Voila, j'aimerais effectuer la recherche d'un mot dans une autre feuille qui n'appartient pas au même classeur...

    J'ai réussi à effectuer la recherche dans la même feuille où se trouve la macro... avec ce programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     Sub recherche_mot()
    '
        Dim mot As String
        mot = InputBox("saisissez la recherche")
        ActiveWindow.SmallScroll Down:=-79
        Cells.Find(What:=mot, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
            xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) _
        .Activate
        '
    End Sub

    donc j'aimerais modifier ce programme pour rechercher dans une autre feuille excel (en connaissant son chemin)... et aussi pour rechercher tous les mots correspondant à la recherche et non s'arrêter au premier...

    merci d'avance pour votre aide...

  2. #2
    Expert éminent


    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
    Par défaut
    bonjour et bienvenue sur le forum ...
    ton autre classeur/feuille... il est ouvert comment...?

  3. #3
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 38
    Par défaut
    merci pour avoir modifier mon message...

    C'est moi qui ouvre l'autre feuille avec la liste de noms où je veux effectuer ma recherche.
    J'aimerais si possible l'ouvrir avec une macro (comme ça ça évite à ce que je le fasse), sinon au pire des cas je place ma liste en feuille 2 de mon classeur... ça peut être une autre solution si c'est plus simple... maintenant je ne sais pas rechercher sur une autre feuille...

    voila j'espère que j'ai été assez clair...

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Citation Envoyé par Tu
    C'est moi qui ouvre l'autre feuille avec la liste de noms
    C'est une feuille ou un classeur ?
    J'ai lu jusqu'à la fin de ton message et je déduis que c'est un autre classeur.

    Tu as deux solutions, soit faire cette recherche sur un classeur fermé, soit sur un classeur ouvert
    Pour ouvrir le classeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks.Open Filename:=CheminEtNomDuClasseur
    Pour lancer la macro sur ce fichier, deux solutions
    A l'ouverture de ce fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Workbook_Open()
        Call MacroRecherche
    End sub
    Soit depuis le premier fichier ouvert
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Run "'LautreClasseur.xls'!MacroRecherche"
    A+

  5. #5
    Expert éminent


    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
    Par défaut
    Si j'ai bien compris tu ne ve pas lancer une macro appartenant à un autre classeur.... mais depuis le code associé à un classeur, ouvrir un autre classeur et effectuer une recherche dans celui-ci ...

    bon on tu commence par ouvrir le classeur avec Workbooks.Open et tu récupére ensuite une référence à celui-ci ... tu utilise ensuite cette référence pour effectuer ta recherche....

    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
     
      Sub recherche_mot()
      Dim wk As Workbook
      Dim c as range ' Resultat de la recherche
      Dim mot As String
      mot = InputBox("saisissez la recherche")
      Dim f As Worksheet 'Feuille dans laquelle effectuer la rechercher
      'Ouverture du classeur :
      set wk = Workbooks.Open("c:\MonClasseur.xls")
      'Effectue recherche dans 1° feuille du classser
       Set c = wk.Sheets(1).Cells.Find(What:=mot, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
            xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
     
        If Not c Is Nothing Then
            MsgBox c.Value & " à l'adresse " & c.Address
        Else
           MsgBox mot & " Introuvable"
        End If
    end sub
    Ce code est surement à compléter ...( plusieurs résultats à la recherche ...? , cas ou fichier excel déjà ouvert...)

  6. #6
    Membre éclairé
    Avatar de mortalino
    Inscrit en
    Janvier 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2007
    Messages : 72
    Par défaut
    Salut,

    Voici une fonction, elle sera à compléter afin de gérer le classeur, mais tu auras les adresses des cellules dans un tableau.
    (désolé pour la coloration syntaxique des mots clés, j'ai un programme qui ne passe pas ici, appremment) :


    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    Public Function FindWord(ByVal sWord As String, Optional vPlage As Variant, Optional wSheet As Variant = "ActiveSheet") As String()
            Dim bVerifPlage As Boolean, rStartCell As Range
        If Not wSheet = "ActiveSheet" Then Sheets(wSheet).Select
            'vérification de la feuille à traiter
        If Not IsMissing(vPlage) Then bVerifPlage = True
            'vérification d'une possible plage
     
            Dim cMyAddress      As New Collection
            Dim sRes()          As String
            Dim ParseRange()    As String
     
        If bVerifPlage = False Then
            ' s'il n'y pas de plage, on vérifie dans toute la feuille
            Cells.Find(What:=sWord, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
                xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
                , SearchFormat:=False).Activate: cMyAddress.Add ActiveCell.Address
            Set rStartCell = ActiveCell
            Do
                Cells.FindNext(After:=ActiveCell).Activate: cMyAddress.Add ActiveCell.Address
            Loop While ActiveCell.Address <> Range(rStartCell).Address
     
            ' on place l'adresse des cellules dans un tableau de données
            ' il sera facile de savoir après quelles cellules contiennent
            ' les données recherchées. (où même sélectionner ces cellules)
                ReDim sRes(cMyAddress.Count - 1)
            For i = 0 To cMyAddress.Count - 1
                sRes(i) = cMyAddress.Item(i + 1)
            Next i
        Else
            ' s'il y pas une plage, on vérifie seulement dedans
                Dim rPlage As Range
            Set rPlage = vPlage
            ' on instancie l'objet (plage) en récupérant sa valeur
            ParseRange = Split(CStr(rPlage.Address), ":")
            ' ici je récupère la dernière cellule de recherche, afin de la sélectionner
            ' comme ça, le résultat sera chronologique (sinon, la recherche s'effectue
            ' depuis la cellule sélectionnée)
            Range(ParseRange(1)).Select
     
            rPlage.Find(What:=sWord, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
                xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
                , SearchFormat:=False).Activate: cMyAddress.Add ActiveCell.Address
            Set rStartCell = ActiveCell
            Do
                rPlage.FindNext(After:=ActiveCell).Activate: cMyAddress.Add ActiveCell.Address
            Loop While ActiveCell.Address <> Range(rStartCell.Address).Address
     
            ' on place l'adresse des cellules dans un tableau de données
            ' il sera facile de savoir après quelles cellules contiennent
            ' les données recherchées. (où même sélectionner ces cellules)
                ReDim sRes(cMyAddress.Count - 2)
            For i = 0 To cMyAddress.Count - 2
                sRes(i) = cMyAddress.Item(i + 1)
            Next i
        End If
        FindWord = sRes: Set cMyAddress = Nothing: Erase sRes
    End Function
     
    Sub Exemple_Utilisation()
        Dim sResult() As String, l As Integer
     
        sResult = FindWord("bonjour", Range("C23:Z114"), "Feuil3")
        '  autres exemples d'utilisation
        'sResult = FindWord("abc", Range("A1:B20"))
        'sResult = FindWord(UserForm1.ComboBox1.Text, Range("A1:B20"))
     
        For l = 0 To UBound(sResult)
            Debug.Print "-" & sResult(l) & "-"
        Next l
        Erase sResult
    End Sub
    ~ Mortalino ~ Colorisation automatique

  7. #7
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 38
    Par défaut
    merci BBIL c'est tout à fait ça... j'ai réussi à faire une recherche dans un autre classeur... super...

    maintenant le problème est qu'il ne m'affiche qu'un seul résultat... comment faire pour qu'il m'affiche tous les résultats de la recherche


    exemple : je veux rechercher le mot age dans la liste ci dessous :

    tête
    page
    bras
    menton
    nage
    age
    ...


    avec mon programme il ne m'en affichera qu'un... moi j'aimerai savoir comment faire pour qu'il m'affiche la totalité de la recherche...
    à savoir dans l'exemple :

    page
    nage
    age

    merci d'avance

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

Discussions similaires

  1. [Toutes versions] Copier les résultats d'une recherche dans un autre classeur 2
    Par sossso112333 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 16/05/2015, 20h52
  2. [VBA Xl2007] Effectuer une recherche dans l'aide Excel ou VBA
    Par SilkyRoad dans le forum Contribuez
    Réponses: 0
    Dernier message: 28/12/2007, 21h13
  3. Effectuer une recherche dans Encarta
    Par Morfus dans le forum Delphi
    Réponses: 2
    Dernier message: 28/01/2007, 11h47
  4. [VBA-Excel] Effectuer une recherche dans une liste view
    Par Miles Raymond dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/11/2006, 17h21
  5. Comment effectuer une recherche dans une listBox?
    Par Mickey.jet dans le forum Delphi .NET
    Réponses: 2
    Dernier message: 19/05/2006, 16h15

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