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 :

Fonction Find dans VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 14
    Par défaut Fonction Find dans VBA
    Bonjour,

    En VBA, J'ai créé un code excel avec la Fonction FIND. Mon but est de trouver dans une liste, une entreprise en particulier.

    Voici la partie de mon code concernée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Feuil1").Range("B2:B100").Find("Nom_Entreprise")
    Cela marche parfaitement mais mon but pour automatiser cette partie serait, au lieu de remplir le nom de l'entreprise à la main, de se référer à une cellule où il y a le nom d'une entreprise. Pour cela j'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Feuil1").Range("B2:B100").Find("Worksheets("Feuil1").Cells(10,10).Value")
    Malheureusement cela ne marche pas. Comment résoudre le problème svp

    Merci d'avance

  2. #2
    Membre Expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 475
    Par défaut
    Bonsoir,

    Tu pourrais essayer avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Feuil1").Range("B2:B100").Find(what:=range("A3").value, LookAt:=xlWhole)

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 14
    Par défaut
    J'ai copié collé le code mais ça ne marche pas. Je comprend pas le A3 et le xlWhole :/

  4. #4
    Membre Expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 475
    Par défaut
    Hello,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    what:=range("A3").value
    Cherche la valeur qui est contenue dans la cellule A3


    Cherche la valeur exacte

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 14
    Par défaut
    Pour être complet voici la totalité de mon 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
    Public Sub MafonctionDeRecherche()
     
        Dim c As Object
        Set c = Worksheets("BonDeCommande").Range("B2:B100").Find("AIS")
     
     
        Dim therow As Integer
        therow = c.Row
     
     
      Worksheets("Donnée").Cells(10, 10).Value = Worksheets("BonDeCommande").Cells(therow, 3).Value
     
     
    End Sub
    Une des entreprises que je cherche s'appelle AIS.
    Mais je sais que AIS je le retrouve dans une autre feuille excel nommé "Donnée" en case J2 donc j'ai essayé :

    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 MafonctionDeRecherche()
     
        Dim c As Object
        Set c = Worksheets("BonDeCommande").Range("B2:B100").Find("Worksheets("Donnée").Cells(2, 10).Value")
     
     
        Dim therow As Integer
        therow = c.Row
     
     
      Worksheets("Donnée").Cells(10, 10).Value = Worksheets("BonDeCommande").Cells(therow, 3).Value
     
     
    End Sub
    Mais ca ne marche pas alors que le premier code marche.

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    La méthode Find recherche une valeur
    En mettant entre guillemets la chaîne "Worksheets("Donnée").Cells(2, 10).Value", ce sera cette chaîne (de surcroît mal écrite) qu'il cherchera et non le contenu de la cellule J2 de la feuille Donnée.
    correction, donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set c = Worksheets("BonDeCommande").Range("B2:B100").Find What:=Worksheets("Donnée").Cells(2, 10).Value
    Corrige de la même manière toutes tes lignes utilisant la méthode Find.

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 14
    Par défaut
    Merci beaucoup pour cette réponse, j'ai pu débloquer ma situation. J'aimerai aller plus loin dans mon code que voici :

    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
    Public Sub MafonctionDeRecherche()
     
     'Permet de chercher le nom de l'entreprise dans la liste des commandes'
        Dim c As Object
        Set c = Worksheets("BonDeCommande").Range("B2:B100").Find(What:=UserForm3.ComboBox11.Value)
     
    'Repère la ligne où se trouve le mot'
     
        Dim therow As Integer
        therow = c.Row
     
     'Inscrit les données de la ligne trouvée dans la feuille "Donnée"'
     
      Worksheets("Donnée").Cells(1, 1).Value = Worksheets("BonDeCommande").Cells(therow, 1).Value
      Worksheets("Donnée").Cells(1, 2).Value = Worksheets("BonDeCommande").Cells(therow, 2).Value
      Worksheets("Donnée").Cells(1, 3).Value = Worksheets("BonDeCommande").Cells(therow, 3).Value
      Worksheets("Donnée").Cells(1, 4).Value = Worksheets("BonDeCommande").Cells(therow, 4).Value
      Worksheets("Donnée").Cells(1, 5).Value = Worksheets("BonDeCommande").Cells(therow, 5).Value
     
     
    End Sub
    Ce code me permet de chercher un nom d'entreprise (que je choisis dans une ComboBox) dans une liste et d'en tirer la ligne où se trouve l'entreprise.

    Cependant, Il se peut qu'il y ai plusieurs fois le nom de l'entreprise donc mon objectif serait de faire une boucle pour que mon code extrait l'ensemble des lignes où le nom de l'entreprise est présent.

    Comment puis je faire ?
    Ma première idée était de chercher la première ligne puis une fois extraite faire une recherche à partir de cette ligne jusqu'à plus loin et ainsi de suite mais comment le coder ?

    Merci d'avance pour vos réponses

  8. #8
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Citation Envoyé par emamousse Voir le message
    Ce code me permet de chercher un nom d'entreprise (que je choisis dans une ComboBox) dans une liste et d'en tirer la ligne où se trouve l'entreprise.

    Cependant, Il se peut qu'il y ai plusieurs fois le nom de l'entreprise donc mon objectif serait de faire une boucle pour que mon code extrait l'ensemble des lignes où le nom de l'entreprise est présent.

    Comment puis je faire ?
    Ma première idée était de chercher la première ligne puis une fois extraite faire une recherche à partir de cette ligne jusqu'à plus loin et ainsi de suite mais comment le coder ?
    Et si tu t'inspirais calmement de l'exemple que tu trouves à la rubrique Range.Find de ton aide VBA ? Ce ne serait pas une très bonne idée, que de lire cette rubrique ?
    Je t'engage par ailleurs à lire également la rubrique Application.Union. Elle devrait te donner une idée complète de ce que tu dois faire pour obtenir une plage de toutes les cellules ainsi trouvées.
    Reste plus qu'à te mettre au boulot.

  9. #9
    Membre Expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 475
    Par défaut
    Bonjour,

    Voici un essai : il permet de chercher "a" dans la plage A1:A10.

    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 TestFindAll()
     
    Dim FoundCell As Range
    Dim LastCell As Range
    Dim FirstAddr As String
    With Range("A1:A10")
        Set LastCell = .Cells(.Cells.Count)
    End With
    Set FoundCell = Range("A1:A10").Find(what:="a", after:=LastCell)
     
    If Not FoundCell Is Nothing Then
        FirstAddr = FoundCell.Address
    End If
    Do Until FoundCell Is Nothing
        Debug.Print FoundCell.Address
        Set FoundCell = Range("A1:A10").FindNext(after:=FoundCell)
        If FoundCell.Address = FirstAddr Then
            Exit Do
        End If
    Loop
     
    End Sub


  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 14
    Par défaut
    Merci beaucoup QuestVBA,

    J'ai bien compris ta boucle mais du coup tu ne peux pas extraire la ligne trouver si ?
    car comme tu peux le voir dans mon code j'utilise ensuite la ligne trouvée et j'aimerais utilisé une par une chaque ligne trouvée

  11. #11
    Membre Expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 475
    Par défaut
    Je te rajoute deux données (ligne et colonne). A toi le reste ?

    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
    Sub TestFindAll()
     
    Dim FoundCell As Range
    Dim LastCell As Range
    Dim FirstAddr As String
    With Range("A1:A10")
        Set LastCell = .Cells(.Cells.Count)
    End With
    Set FoundCell = Range("A1:A10").Find(what:="a", after:=LastCell)
     
    If Not FoundCell Is Nothing Then
        FirstAddr = FoundCell.Address
    End If
    Do Until FoundCell Is Nothing
        Debug.Print FoundCell.Address
        Debug.Print FoundCell.Row
        Debug.Print Split(FoundCell.Address, "$")(1)
        Set FoundCell = Range("A1:A10").FindNext(after:=FoundCell)
        If FoundCell.Address = FirstAddr Then
            Exit Do
        End If
    Loop
     
    End Sub

Discussions similaires

  1. [E-03] Aide sur la Fonction .Find dans VBA
    Par Gunsx dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/01/2009, 22h36
  2. Aide fonction recherche dans VBA
    Par Koopa55 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/05/2008, 12h02
  3. fonction where dans VBA et recupération de lettre et de chiffre
    Par moimemessssssssss dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/04/2008, 21h55
  4. Intégration d'une fonction Excel dans VBA
    Par RéviAT dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/03/2008, 09h10
  5. fonction shell dans VBA
    Par dada31 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/01/2008, 09h41

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