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 :

Recherche multiple sur ligne


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 55
    Par défaut Recherche multiple sur ligne
    Bonjour , j'ai pris un code sur intenet qui effectue une recherche en colonne je voudrais l'adapter sur une ligne mais ça ne marche pas :
    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
    Sub Principale()
    Dim Plage As Range
    Dim Lignes(), i As Long
    Dim Texte As String
    Dim Flag As Boolean
     
    Set Plage = Sheets("Feuil1").Range("B28:AF28") 'plage de recherche
    Texte = "mot"   'expression cherchée
    Flag = Find_Next(Plage, Texte, Lignes())  'appel de la fonction
    If Flag Then  'si fonction retourne Vrai = expression trouvée dans la plage
        For i = LBound(Lignes) To UBound(Lignes)   'restitution des lignes correspondantes
            Debug.Print Lignes(i)
        Next i
    Else
        MsgBox "L'expression : " & Texte & " n'a pas été trouvée dans la plage : " & Plage.Address
    End If
    End Sub
     
    'Sources : Michel_m
    'http://www.lesite.net/forum/affich-31432413-importation-de-donnees-sans-doublons#9
    Function Find_Next(Rng As Range, Texte As String, Tbl()) As Boolean
    Dim Nbre As Integer, Lig As Long, Cptr As Long
     
        Nbre = Application.CountIf(Rng, Texte)
        If Nbre > 0 Then
            ReDim Tbl(Nbre - 1)
            Lig = 1
            For Cptr = 0 To Nbre - 1
            Lig = Rng.Find(Texte, Cells(Rng.Row, Lig), xlValues).Column
            Tbl(Cptr) = Cells(Rng.Row, Lig).Address
            Next
        Else
            GoTo Absent
        End If
        Find_Next = True
        Exit Function
    Absent:
        Find_Next = False
    End Function
    Une solution ?
    l 'erreur vient de la fonction FIND next , la ligne < Lig = Rng.Find(Texte, Cells(Rng.Row, Lig), xlValues).Column>
    Merci , bonne journée

  2. #2
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    Rng correspond à la plage B28:AF28
    Rng.Row = 28;Lig = 1
    Cells(Rng.Row, Lig) correspond donc à la cellule A28.

    Tu ne peux pas demander que la recherche débute après une cellule qui n'appartient pas à la plage Rng.
    Essaie avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Lig = Rng.Find(Texte, , xlValues).Column
    Cordialement.

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 55
    Par défaut
    Merci de ta réponse gFZT82
    ça marche bien , sauf qu'il me trouve que la première cellule , et me redonne la meme adresse de cellule pour les autres , qu'il voit qu'il y a plusieur cellule comportant l'expression recherchée mais il me donne tjrs la meme adresse de cellule la premiere une idée ?

  4. #4
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Pour une recherche multiple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            Lig = 2
            For Cptr = 0 To Nbre - 1
                Lig = Rng.Find(Texte, Cells(Rng.Row, Lig), xlValues).Column
                Tbl(Cptr) = Cells(Rng.Row, Lig).Address
            Next
    Remarque bien qu'il y a plus simple avec la méthode Range.FindNext.

    Cordialement.

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 55
    Par défaut
    Ah super c'est ça , grand bravo
    HUm je crois bien que Range.FindNext. aurait été plus simple
    Par contre , j'aimerais pouvoir copier la cellule rechercher avec ça forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            Lig = 2
            For Cptr = 0 To Nbre - 1
                Lig = Rng.Find(Texte, Cells(Rng.Row, Lig), xlValues).Column
                Tbl(Cptr) = Cells(Rng.Row, Lig).Address
            Next
    Mais lorsque je vais cette commande , j'ai juste l'adresse ex : "$I$448"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            Lig = 2
            For Cptr = 0 To Nbre - 1
                Lig = Rng.Find(Texte, Cells(Rng.Row, Lig), xlValues).Column
                Tbl(Cptr) = Cells(Rng.Row, Lig).Value
            Next
    j'ai juste ce qui a écrit dans la cellule recherché EX : "mot"
    J'aimerais avoir toute la forme , sachant que mes cellule recherché sont des liste de choix a fond bleu .
    Une toute dernière idée , merci encore pour ton aide .

  6. #6
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Essaie cette procédure qui fait la recherche du mot et effectue la copie de la cellule dans la première ligne de la feuil2.
    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 Principale()
    Dim Plage As Range, C As Range
    Dim Texte As String, firstAddress As String
    Dim Col As Integer
        Set Plage = Sheets("Feuil1").Range("B28:AF28")
        Texte = "mot"
        Col = 1
        Set C = Plage.Find(Texte, , xlValues, xlWhole)
        If Not C Is Nothing Then
            firstAddress = C.Address
            Do
                C.Copy Sheets("Feuil2").Cells(1, Col)
                Col = Col + 1
                Set C = Plage.FindNext(C)
            Loop While Not C Is Nothing And C.Address <> firstAddress
        Else
            MsgBox "L'expression : " & Texte & " n'a pas été trouvée dans la plage : " & Plage.Address
        End If
    End Sub
    Cordialement.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 24/09/2012, 23h12
  2. [XL-2007] recherche multiple sur mon disque dur a partir d une colone
    Par redbull222 dans le forum Excel
    Réponses: 2
    Dernier message: 27/11/2011, 10h54
  3. SELECT Recherche multiple sur un champs
    Par devjcc dans le forum Requêtes
    Réponses: 3
    Dernier message: 02/06/2009, 15h23
  4. [DOM4J] XPATH pour recherche DOM4J sur niveaux multiples
    Par cdubet dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 23/05/2007, 15h11
  5. Recherche titre sur ligne et copie colonne
    Par baptbapt dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 26/07/2006, 15h31

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