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

Microsoft Office Discussion :

Recherche un mot


Sujet :

Microsoft Office

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 84
    Points : 46
    Points
    46
    Par défaut Recherche un mot
    Bonjour,
    Depuis quelques temps je cherche le code qui me permettrait de trouver un mot dans une phrase...
    Je m'explique... Dans ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If rstCOM!Question Like "*" & RechercheMOT & "*" Or rstCOM!Reponse Like "*" & RechercheMOT & "*" Then
    Je voudrais rechercher QUE le mot représenté dans RechercheMOT, (Ici le mot vie), c'est à dire que le programme ne trouve dans une phrase QUE ce mot la et non tous les mots tels que :
    "Un VIEillard n'est pas jeune", "C'est la VIEillesse qui le veut"," Le mariage d'une VIErge"," oliVIEr et Raymond"...etc. Toutes ces phrases ne doivent pas être retenues.
    Par contre : "C'est la VIE qui le veut...","La VIE est un miracle..." etc, doivent être retenu.
    Je galère depuis 3 jours pour trouver comment formuler la demande, et je ne trouve pas !
    Quelqu'un à t'il la solution ?
    D'avance merci.

    Code entier si c'est préférable :
    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
    Private Sub ENREGBASEMOT() '------------------------------------------------------Enregistre la TABLEMOT------------------------------------------------
    Dim I As Integer
    Dim dbCOM As DAO.Database
    Dim dbMOT As DAO.Database
    Dim rstCOM As DAO.Recordset
    Dim rstMOT As DAO.Recordset
    Set dbCOM = CurrentDb
    Set dbMOT = CurrentDb
    Set rstCOM = dbCOM.OpenRecordset("COMPLETE", dbOpenDynaset)
    Set rstMOT = dbMOT.OpenRecordset("TABLEMOT", dbOpenDynaset)
        I = 0
        While Not rstCOM.EOF
                'If InStr(rstCOM!Question, RechercheMOT) >= 1 Or InStr(rstCOM!Reponse, RechercheMOT) >= 1 Then
                If rstCOM!Question Like "*" & RechercheMOT & "*" Or rstCOM!Reponse Like "*" & RechercheMOT & "*" Then
                    I = I + 1
                    rstMOT.AddNew
                    rstMOT!Fiche = I
                    rstMOT!Categorie = rstCOM!Categorie
                    rstMOT!DateE = rstCOM!DateE
                    rstMOT!Question = rstCOM!Question
                    rstMOT!Reponse = rstCOM!Reponse
                    rstMOT!Hasard = rstCOM!Hasard
                    rstMOT.Update
                    DRAPEAU = True
                End If
                rstCOM.MoveNext
        Wend
     
        rstCOM.Close
        rstMOT.Close
        dbCOM.Close
        dbMOT.Close
    End Sub
    Encore merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par momongana Voir le message
    Bonjour,

    Essayez et adaptez cette fonction testée sur Word :
    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 TestFonction()
     
             MsgBox SplitMot(Selection.Range.Text, "VIE")
     
    End Sub
     
    Function SplitMot(ByVal ChaineATraiter As String, ByVal ChaineATrouver As String) As Boolean
     
    Dim I As Integer
    Dim TableDesMots As Variant
     
             SplitMot = False
             TableDesMots = Split(ChaineATraiter, " ")
             If UBound(TableDesMots) > 0 Then
                For I = LBound(TableDesMots) To UBound(TableDesMots)
                    If LCase(TableDesMots(I)) = LCase(ChaineATrouver) Then
                       SplitMot = True
                       Exit Function
                    End If
                Next I
             End If
     
    End Function

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 84
    Points : 46
    Points
    46
    Par défaut Split
    Merci de votre message... Mais comment l'adapter à mon code ?
    Comme vous le voyez dans mon code, Je copie la phrase et sa réponse dans une table TABLEMOT
    Mais n'est copié QUE la phrase ou la réponse qui correspondent à RechercheMOT soit pour le test présent : vie... sauf qu'avec ce code, je copie aussi toutes les phrases qui ont le mot vie dedans... tels que vieillard ... Olivier, etc...Chose que je ne veux pas !
    Je ne vois pas très bien comment adapter votre code avec le mien.
    Peut-être pourriez-vous m'en dire plus ?
    Cordialement et encore merci de votre réponse.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par momongana Voir le message
    J'imagine que cela devrait être comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
             If SplitMot(rstCOM!Question, RechercheMot) = True Or SplitMot(rstCOM!Reponse, RechercheMot) = True Then
     
                '.....
     
             End If

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 84
    Points : 46
    Points
    46
    Par défaut Split
    Depuis ce code comment faire pour...
    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
    Private Sub ENREGBASEMOT() '------------------------------------------------------Enregistre la TABLEMOT------------------------------------------------
    Dim I As Integer
    Dim dbCOM As DAO.Database
    Dim dbMOT As DAO.Database
    Dim rstCOM As DAO.Recordset
    Dim rstMOT As DAO.Recordset
    Set dbCOM = CurrentDb
    Set dbMOT = CurrentDb
    Set rstCOM = dbCOM.OpenRecordset("COMPLETE", dbOpenDynaset)
    Set rstMOT = dbMOT.OpenRecordset("TABLEMOT", dbOpenDynaset)
        I = 0
        While Not rstCOM.EOF
                'If InStr(rstCOM!Question, RechercheMOT) >= 1 Or InStr(rstCOM!Reponse, RechercheMOT) >= 1 Then J'ai essayé ce bout de code... NIET!
                If rstCOM!Question Like "*" & RechercheMOT & "*" Or rstCOM!Reponse Like "*" & RechercheMOT & "*" Then Celui là serait mieux mais laisse passer vieillard, Olivier...etc si la RechercheMOT est vie. OR JE NE VEUX QUE VIE.
                    I = I + 1
                    rstMOT.AddNew ' enregistre la table provisoire TABLEMOT
                    rstMOT!Fiche = I
                    rstMOT!Categorie = rstCOM!Categorie
                    rstMOT!DateE = rstCOM!DateE
                    rstMOT!Question = rstCOM!Question
                    rstMOT!Reponse = rstCOM!Reponse
                    rstMOT!Hasard = rstCOM!Hasard
                    rstMOT.Update
                    DRAPEAU = True
                End If
                rstCOM.MoveNext
        Wend
     
        rstCOM.Close
        rstMOT.Close
        dbCOM.Close
        dbMOT.Close
    End Sub
    Le programme est un quiz de culture générale. Je veux pouvoir choisir toutes les fiches qui ont le mot vie dans leur phrase... si bien sur, je demande vie comme critère de sélection, j'aurais pu choisir un autre mot comme critère EX: film... mais qui n'aurait pas accepter filmographie...
    Une fois la TABLE MOT enregistrée, le programme ne "tire" que les fiches ayant correspondu au critère de base

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par momongana Voir le message
    Il faut remplacer votre if then par le mien

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 84
    Points : 46
    Points
    46
    Par défaut Split
    Citation Envoyé par Eric KERGRESSE Voir le message
    J'imagine que cela devrait être comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
             If SplitMot(rstCOM!Question, RechercheMot) = True Or SplitMot(rstCOM!Reponse, RechercheMot) = True Then
     
                '.....
     
             End If
    Hélas... Cela me laisse passer tous les mots qui comporte le mot vie... xavier, olivier, vieillard, vieillesse etc...
    Voilà comment j'ai placé votre 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
    16
    17
    While Not rstCOM.E
           ' If rstCOM!Question Like "*" & RechercheMOT & "*" Or rstCOM!Reponse Like "*" & RechercheMOT & "*" Then Avec ce code   ************************ Trouve 824 résultats sur 24000 fiches
           If SplitMot(rstCOM!Question, RechercheMOT) = True Or SplitMot(rstCOM!Reponse, RechercheMOT) = True Then Avec le votre ************************ Trouve 178 résultats sur 24000 fiches (???)
                I = I + 1
                rstMOT.AddNew
                rstMOT!Fiche = I
                rstMOT!Categorie = rstCOM!Categorie
                rstMOT!DateE = rstCOM!DateE
                rstMOT!Question = rstCOM!Question
                rstMOT!Reponse = rstCOM!Reponse
                rstMOT!Hasard = rstCOM!Hasard
                rstMOT.Update
                DRAPEAU = True
            End If
                rstCOM.MoveNext
     
        Wend

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par momongana Voir le message
    Si vous transférez vos tables sur un fichier Excel, je peux regarder.

  9. #9
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 84
    Points : 46
    Points
    46
    Par défaut Split
    Citation Envoyé par Eric KERGRESSE Voir le message
    Si vous transférez vos tables sur un fichier Excel, je peux regarder.
    Bonjour et merci pour votre aide...

    Je joins un bout du fichier... Devrait sortir lorsqu'on tape vie dans le champ RechercheMOT, les lignes 1 - 2 - 5 - 10 pour les questions et 11 - 13 pour les réponses. Les autres lignes ne devraient pas être concernées ! (Soit 6 fiches)
    Par contre, je ne trouve pas le bouton pour le code...
    Cordialement
    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par momongana Voir le message
    Pièce jointe 566326

  11. #11
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 84
    Points : 46
    Points
    46
    Par défaut Split
    Vraiment un grand merci pour votre réactivité et votre aide...
    Par contre, je ne connais absolument pas Excel et je ne vois pas le formule qui me permettrait de me dépanner.
    De plus, sauf erreur de ma part, je vois que la ligne 13 n'a pas été "prise"... Normal ?


    Je recherche vraiment la formule que je puisse intégrer à mon code...
    En tous cas, merci de votre aide.
    Cordialement

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par momongana Voir le message
    Je ne vois pas le mot "vie" dans la ligne 13.
    Sinon, la formule qui permet de sélectionner les lignes est celle que je vous ai donnée hier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                 If SplitMot(.Value, MotATrouver) = True Or SplitMot(.Offset(0, 1).Value, MotATrouver) = True Then

  13. #13
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 84
    Points : 46
    Points
    46
    Par défaut Split
    Le mot vie se trouve dans les réponses... comme à la ligne 11.

  14. #14
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 84
    Points : 46
    Points
    46
    Par défaut Split
    Hélas... ce bout de code ne fonctionne pas : du moins il ne prend pas QUE le mot vie, dans l'exemple... comme vous pouvez le voir plus haut dans mes messages...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If SplitMot(rstCOM!Question, RechercheMOT) = True Or SplitMot(rstCOM!Reponse, RechercheMOT) = True Then
    ............................
    end if

  15. #15
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par momongana Voir le message
    Le mot vie se trouve dans les réponses... comme à la ligne 11.
    Si c'est de la ligne 23 dont vous faites mention, Vie s'accompagne d'une virgule, donc le code ne prend pas cette chaîne en compte, c'est normal.

    Si vous souhaitez prendre en compte les virgules dans les mots :

    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
     
        Set TabResultat = Sheets("TableMot").ListObjects("TableDesResultats")
     
        For I = 1 To AireQR.Count
            With AireQR(I)
                 If SplitMot(.Value, MotATrouver) = True Or SplitMot(.Offset(0, 1).Value, MotATrouver) = True Or SplitMot(.Value, MotATrouver & ",") = True Or SplitMot(.Offset(0, 1).Value, MotATrouver & ",") = True Then
                    ShResultat.Cells(LigneResultats, 1) = .Row
                    Set LigneResultat = TabResultat.ListRows.Add
                    LigneResultat.Range(1, 1) = .Row
                    Set LigneResultat = Nothing
                    LigneResultats = LigneResultats + 1
                 End If
     
                 If SplitMot(.Value, MotATrouver) = True Or SplitMot(.Value, MotATrouver & ",") = True Then
                    .Interior.Color = RGB(255, 255, 0)
                 End If
     
                 If SplitMot(.Offset(0, 1).Value, MotATrouver) = True Or SplitMot(.Offset(0, 1).Value, MotATrouver & ",") = True Then
                    .Offset(0, 1).Interior.Color = RGB(255, 255, 0)
                 End If
            End With
        Next I
    Sinon, si cela ne fonctionne pas sur votre outil, je ne peux pas vous aider plus.

    Bon courage.

Discussions similaires

  1. Recherche sur mots de 3 lettres
    Par mamizo dans le forum Bases de données
    Réponses: 7
    Dernier message: 16/02/2005, 14h59
  2. [TP]Recherche de mots dans un Doc.
    Par Loceka dans le forum Turbo Pascal
    Réponses: 8
    Dernier message: 04/10/2004, 19h04
  3. Recherche des mots contenant ...
    Par Asdorve dans le forum Langage SQL
    Réponses: 3
    Dernier message: 18/06/2004, 10h23
  4. Réponses: 10
    Dernier message: 22/05/2004, 13h51
  5. Recherche multi-mots sur une seule colonne
    Par Badiste dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/03/2004, 11h24

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