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 d'un mot dans une colonne classée


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 54
    Points : 44
    Points
    44
    Par défaut Recherche d'un mot dans une colonne classée
    Bonne après-midi à chacun,
    Pour un programme qui travaille sur des textes, j’ai besoin d’utiliser un dictionnaire de plus de 20000 mots ainsi constitué : en colonne A, il y a la liste classée des mots et en colonne B, se trouve leurs définitions.
    Pour interroger le dictionnaire j’ai besoin d’une fonction qui, si on lui donne un mot, réponde le numéro de ligne.

    Voici la fonction élémentaire que j’ai faite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function NuméroLigne(Mot) As Long
    Dim i As Long, lD As Long, lF As Long
    lD = 2
    lF = Range("A65536").End(xlUp).Row
    For i = lD To lF
        If Cells(i, 1).Formula = Mot Then GoTo Trouvé
    Next
    NuméroLigne = 0
    Exit Function
    Trouvé:
    NuméroLigne = i
    End Function
    Cette fonction est fonctionne très bien, mais elle est très lente et elle ralentit beaucoup le programme. J’ai aussi essayé de faire une fonction avec Find, mais elle n’a pas fonctionné parce qu’elle s’arrête sur les portions de mots. Par exemple si je cherche le mot « ton », elle s’arrête sur « bâton ».

    Voici donc ma question (qui doit être très classique, car je ne suis pas le premier à chercher un mot dans un dictionnaire) :
    « Est-ce qu’il existe une fonction qui renvoie le numéro de la ligne d’un mot donné se trouvant dans une colonne classée de mots ? »

    Merci par avance.
    RéviAT

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 288
    Points : 364
    Points
    364
    Par défaut
    Oui, Find est certainement beaucoup plus rapide, tu peux utiliser l'option "Totalité du contenu de la cellule" pour éviter l'inconvénient dont tu parles, ce qui se traduit par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Cells.Find(What:="mot recherché", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
            xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
            , SearchFormat:=False).Activate

  3. #3
    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,

    Réessaye avec la fonction Find mais tu ajoutes la propriété
    Ce qui donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells.Find(What:=mot, LookAt:=xlWhole)
    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.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 54
    Points : 44
    Points
    44
    Par défaut Recherche d'un mot dans une colonne classée
    Merci "neupont" pour cette réponse qui résoud mon problème avec Find.
    Par contre je me demande s'il n'y a pas une fonction qui utiliserait le fait que la colonne des mots est classée pour optimiser la recherche (Find fonctionne aussi bien que la colonne soit classée ou non).
    A a-t-il mieux que Find ?
    RéviAT (déjà très content de cette première réponse)

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut RéviAT

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function NuméroLigne(Mot As String) As Long
    Dim Cel As Range
    Application.Volatile
    Set Cel = Range([A1], [A65536].End(xlUp)).Find(Mot, LookIn:=xlValues, LookAt:=xlWhole)
    If Cel Is Nothing Then
        NuméroLigne = 0
    Else
        NuméroLigne = Cel.Row
    End If
    End Function
    Volaile => réactualise la formule ) chaque calcul de la feuille
    Pas forcément n'écessaire, puisque c'est à travers une macro, mais tu peux l'employer dans une cellule
    C1 : =NuméroLigne(D1)
    tu mets ton mot en D1 et C1 te donne la ligne
    A+
    Edit à vouloir faire vite... j'avais oublié que si la valeur est en A2 il ne la trouvait pas => donc, on démarre de A1

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 54
    Points : 44
    Points
    44
    Par défaut Recherche d'un mot dans une colonne classée
    Merci pour les quatre réponses convergeantes. je vais donc utiliser la fonction Find.
    J'ai vu dans vos réponses que votre âge apparaît. Comment faut-il faire pour qu'il en soit ainsi ?
    J'ai 58 ans ... plus trop jeune pour faire du VBA.
    A bientôt et merci encore.
    RéviAT

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

Discussions similaires

  1. [XL-2007] Recherche de plusieurs mots dans une colonne
    Par merlinus3000 dans le forum Excel
    Réponses: 2
    Dernier message: 30/09/2013, 12h38
  2. Recherche de mot dans une colonne
    Par ticad dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/04/2010, 08h40
  3. Recherche d'un mot dans une structure
    Par Remedy dans le forum C
    Réponses: 28
    Dernier message: 25/05/2006, 23h37
  4. Recherche d'un mot dans une phrase se touvant dans un champ
    Par Grandbastien dans le forum Access
    Réponses: 3
    Dernier message: 02/04/2006, 09h58
  5. Recherche d'un mot dans une page
    Par Emcd dans le forum Langage
    Réponses: 4
    Dernier message: 12/01/2006, 18h25

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