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 :

A l'aide d'un mot clé, exécute une tâche


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
    Employé administratif
    Inscrit en
    Février 2014
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Employé administratif

    Informations forums :
    Inscription : Février 2014
    Messages : 78
    Par défaut A l'aide d'un mot clé, exécute une tâche
    Bonjour,

    Prenons cet exemple :
    Sur la cellule A1, il a été saisi le texte « le lait équitable »
    Sur cette cellule active, je souhaiterais exécuter une tâche, si l'on y trouve le mot clé.
    En l’occurrence, ce mot clé est « lait », et s’il a bien ce mot clé, décale de 2 cellules vers la droite

    Comment rédiger cette syntaxe ? dans la macro ci-dessous, ça fonctionne seulement si le texte est lait, pas si la cellule contient la donnée « le lait équitable ». Je ne parviens pas modifier ce qui ne va pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub decal()
    If ActiveCell.Value2 = "lait" Then ActiveCell.Offset(0, 2).Select
    End Sub
    Merci pour votre aide.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    Tu sais que tu as des événements feuille qui te le lancerait automatiquement dès la validation ?
    eric

  3. #3
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Je n'ai jamais essayé, mais, tu as peut-être une porte de sortie avec Like

    Ou bien avec quelque chose qui ressemblerait à cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    sub portion()
       dim texte1 as string
       dim texte2 as string
       texte1 = "le lait équitable"
       texte2 = "lait"
       if instr (texte2, texte1) >0 then
          msgbox("Trouvé")
       else
          msgbox("Non rouvé")
       end if
    end sub

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Oula oui, j'ai répondu un peu vite...

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

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    BtjpsspgrW ne veut pas déceler la présence d'une sous-chaîne de caractères, mais celle d'un MOT (ce n'est pas pareil du tout).
    Je ne veux pas apporter dans cette "affaire", dont l'utilité dans un tableur me parait plutôt ludique, une aide au-delà de la description du mécanisme à mettre en place -->>
    - encadrement de la chaîne à traiter par des espaces
    - remplacement par un espace de tout caractère présent dans cette liste : ".,:-()!?"
    - forçage de la casse en majuscule
    - recherche (comme montré plus haut) de la valeur de instr(la-chaîne, " " & ucase(le_mot) & " ")

    Mon aide s'arrêtera là.

    PS : je n'ai pas voulu parler en plus d'autres aspects (pluriels, accords, etc...), puisque le message d'origine n'en parle pas non plus.

    Amusez-vous bien

  6. #6
    Membre confirmé
    Homme Profil pro
    Employé administratif
    Inscrit en
    Février 2014
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Employé administratif

    Informations forums :
    Inscription : Février 2014
    Messages : 78
    Par défaut détecter un mot clé dans cette cellule
    Bonjour,
    Je ne comprends pas bien les réponses apportées par les membres.
    Ce que je souhaite :
    Dans une base de données, sur la même colonne en décalant d’une cellule à chaque fois (boucle), je souhaiterais que VISUAL BASIC détecte si le mot clé est contenu dans cette cellule ou pas du tout. On peux trouver ce mot dans la barre de formule après peu de caractères, ou après un grande nombre de caractères.

    EXEMPLE :
    Cellule B2 = le lait équitable
    Cellule B3 = j’aime danser
    Cellule B4 = J’aime boire du lait
    Pour la cellule B2, le mot clé se trouve à partir du 4ème caractère. Pour la cellule B3, le mot clé ne se trouve pas. Pour la cellule B5, le mot clé se trouve à partir du 17ème caractère.

    J’ai essayé avec la syntaxe , mais ça ne fonctionne pas.

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Et qu'en serait-il d'une phrase du genre
    Il s'appelait Raymond

    Faut-il considérer ou non?
    Et qu'en est-il si lait est au pluriel, en majuscule,...?

    Prend le temps de lire le message de unparia (que je salue)

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut,

    Pour continuer sur les remarques de Jacques et Parmi...

    On parle du mot "lait"... Donc à encadrer par des espaces, sauf si en début de cellule (pas trop de sens en français mais il serait sage de préciser les cas possibles de façon exhaustive) ou en fin de cellule (suivi d'un des signes prévus par Jacques, ... ou pas!)

    Vu la complexité, j'envisagerais une expression régulière. Sur base d'exemples courants qu'il conviendrait que tu complètes quant aux cas autorisés et rejetés, voici une fonction (dont le pattern serait à adapter si tous les cas que tu prévois ne sont pas dedans), tu pourrais utiliser la fonction suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function TestWord(Content As String, Word As String) As Boolean
      Dim regexp As Object
      Dim Pattern As String
     
      Set regexp = CreateObject("VBScript.RegExp")
      regexp.IgnoreCase = True
      Pattern = "(^\(*[word][ ,;\?\.\)]+)|([ |\(][word][ ,;\?\.\)]+)|([ |\(][word][ \.,;?\)]*$)"
      Pattern = Replace(expression:=Pattern, Find:="[word]", Replace:=Word)
      regexp.Pattern = Pattern
      TestWord = regexp.Test(Content)
      Set regexp = Nothing
    End Function

    Nom : 20180824_6.png
Affichages : 232
Taille : 17,1 Ko

    Soyons clairs: je ne suis pas certain d'avoir envisagé tous les cas. Sur base d'une règle de gestion , on devrait probablement affiner/ajuster le pattern, qui semble peut-être ésotérique, mais qui en fait assez simple à disséquer...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #9
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Re
    bonsoir a tous
    oui le regex peut etre interéssant
    @pierre on peut simplifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test()
        MsgBox TestWord("huile:lait?carton; poire", "lait")
        MsgBox TestWord("il s'appelait trinita", "lait")
        MsgBox TestWord("il faut boire du lait pour grandir", "lait")
        MsgBox TestWord("j'aime la laitiere", "lait")
        MsgBox TestWord("lait et sucre sont necessaires pour la pate a crepe ", "lait")
        MsgBox TestWord("ce qui est bon dans le dejeuner c'est le lait", "lait")
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Function TestWord(ByVal txt As String, ByVal Word As String) As Boolean
        Dim Txt2$
        With CreateObject("VBScript.RegExp")
            .Global = True: .IgnoreCase = True
            .Pattern = "[^\w]"    'pattern pour chopper tout les caracteres speciaux y compris les espaces (voir result dans debug )
            Txt2 = .Replace(" " & txt & " ", "|") 'remplacement de ces dit caracteres
            .Pattern = "\|" & Word & "\|" 'new pattern englobant le mot cherché entre caracteres distincts(choisir le caracteres que l'on veut pourvu qu'il soit distinguable de ceux de la chaine)
            TestWord = .test(Txt2) 'test retournant un booleen
            Debug.Print Txt2 & "    :" & TestWord 'verif dand debug(facultatif)
        End With
    End Function
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

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

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox TestWord("huile:étourdi?carton; poire", "étourdi")

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

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    J'appelle en outre l'attention sur l'existence de certains pièges.
    Le mot "grand-père", par exemple, est un mot à part entière et non deux mots.
    La recherche du mot "père" dans la phrase "j'ai rencontré mon grand-père au marché" ne doit en aucun cas retourner "vrai"
    "Vrai" doit par contre être retourné avec la phrase "Jean le grand - père de trois enfants - est connu des services administratifs"
    D'autres pièges existent.
    Amusez-vous bien (il pleut, ce week-end).

  12. #12
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par unparia Voir le message
    J'appelle en outre l'attention sur l'existence de certains pièges.
    Le mot "grand-père", par exemple, est un mot à part entière et non deux mots.
    La recherche du mot "père" dans la phrase "j'ai rencontré mon grand-père au marché" ne doit en aucun cas retourner "vrai"
    "Vrai" doit par contre être retourné avec la phrase "Jean le grand - père de trois enfants - est connu des services administratifs"
    D'autres pièges existent.
    Amusez-vous bien (il pleut, ce week-end).
    ca me parait impossible de demander au regex de dicerner cet exemple vba et regexpand ne possedent pas de dictionnaire
    on peut jouer avec l'espace en plus dans la separation mais ca c'est toi qui le code dans le pattern
    que se soit avec un regex ou like faire les deux test

    pour ma proposition de toute a l'heure j'ai trouver une parade mais c'est pa joli

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test()
        MsgBox TestWord("huile:étourdi?carton; poire", "étourdi")
        MsgBox TestWord("huile:lait?carton; poire", "lait")
        MsgBox TestWord("il s'appelait trinita", "lait")
        MsgBox TestWord("il faut boire du lait pour grandir", "lait")
        MsgBox TestWord("j'aime la laitiere", "lait")
        MsgBox TestWord("lait et sucre sont necessaires pour la pate a crepe ", "lait")
        MsgBox TestWord("ce qui est bon dans le dejeuner c'est le lait", "lait")
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Function TestWord(ByVal txt As String, ByVal Word As String) As Boolean
        Dim Txt2$, word2$
        With CreateObject("VBScript.RegExp")
            .Global = True: .IgnoreCase = True
            .Pattern = Word
            Txt2 = .Replace(txt, String(10, "C"))
            .Pattern = "[^\w]"
            Txt2 = .Replace(" " & Txt2 & " ", "|")
            .Pattern = "\|" & String(10, "C") & "\|"
            TestWord = .test(Txt2)    '
            Debug.Print Txt2 & "    :" & TestWord
        End With
    End Function
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  13. #13
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    @Jacques,

    Je crois que tout le monde a bien compris les limites. La question n'est pas de réaliser la fonction qui envisage tous les cas possibles et imaginables, même les plus improbables, mais de répondre à la demande initiale dans les limites précises de sa formulation et en ayant en tête la finalité de l'opération.

    Il me semble donc qu'il revient au demandeur de préciser "son cahier des charges" et la finalité de la chose, que j'entrevois plus comme toi comme quelque chose de ludique), et notamment ce qui est considéré comme un mot.

    Citation Envoyé par unparia Voir le message
    [...]
    Le mot "grand-père", par exemple, est un mot à part entière et non deux mots.
    La recherche du mot "père" dans la phrase "j'ai rencontré mon grand-père au marché" ne doit en aucun cas retourner "vrai" [...]
    Il me semble assez évident que certaines règles doivent être respectées. Si on peut trouver "grand-père", ça devrait vouloir dire, au niveau des règles, qu'un mot ne peut pas être encadré par des tirets qui le collent, sinon, il serait impossible de déterminer si on doit considérer "grand-père" ou "grand" et "père" dans "bonjour-grand-père-merci" => retour aux règles qui doivent être énoncées clairement.

    @Patrick. J'étais parti au départ sur un découpage début|milieu|fin, mais en matière de regexp, je n'ai pas beaucoup de pratique, donc je fais sûrement un peu trop compliqué
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  14. #14
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour à tous,

    Si on revenait au basique ? ;-)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Option Compare Text
    Function motOk(phr As String, mot As String) As Boolean
        motOk = mot = phr Or InStr(phr, mot & " ") > 0 Or InStr(phr, " " & mot & " ") > 0 Or InStr(phr, " " & mot) > 0
    End Function
    Ou avec Like
    eric

    Edit : ajout de mot=phr

  15. #15
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub portion()
       Dim texte1 As String
       Dim texte2 As String
       texte1 = "le lait équitable"
       texte2 = "lait"
       MsgBox IsMidText(texte1, texte2)
     End Sub
    Function IsMidText(Txt As String, Cherche As String) As Boolean
    IsMidText = InStr("©" & Replace(Txt, " ", "©") & "©", "©" & Cherche & "©")
    End Function

  16. #16
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Et tant qu'on y est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Option Compare Text
    Function motOk(phr As String, mot As String) As Boolean
        motOk = InStr(" " & phr & " "," " &  mot & " ")
    End Function
    eric

  17. #17
    Invité
    Invité(e)
    Par défaut
    Bonjour eriiic,
    Je n'avais pas vue ta réponse.

  18. #18
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Pas de mal, c'était une avancée avec plus qu'une seule comparaison.
    Et puis ça m'a inspiré la suivante ;-)

  19. #19
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    bonjour a tous

    @Patrick. J'étais parti au départ sur un découpage début|milieu|fin, mais en matière de regexp, je n'ai pas beaucoup de pratique, donc je fais sûrement un peu trop compliqué
    @Pierre
    moi non plus je metrise pas les subtilités d'un pattern aussi complexe que le tiens

    c'est ce pattern qui m'a rendu fou je serais incapable de savoir quel segment fait quoi

    pour pouvoir envisager toutes les possibilités
    1. replacer le mot reccherché avec une chaine distincte sans caracteres speciaux
    2. replacer tout les caracteres speciaux y compris les espaces par un caracteres special
    3. test de la chaine de replacement précédée et suivi du caracteres special de remplacement

    toutes les possibilités seront prises en compte
    @unparia
    pour le grand-pere et grand - pere
    le regex n'a pas de dictionnaire il ne sera jamais distinger si c'est un nom commun ou autre,le regex cherche une expression c'est tout

    il faut faire les deux tests
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    pattern="(\s)" & word &"(\s)"
    .test(chaine)
    pattern="[^\w][^\w]" & word &"(\s)"
    .test(chaine)=true
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  20. #20
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Eric, voici les résultats avec ton code... => Dubitatif je suis
    Celle de Robert donne les mêmes résultats... => Dubitatif je reste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function motOk(phr As String, mot As String) As Boolean
        motOk = InStr(" " & phr & " ", " " & mot & " ")
    End Function
    Nom : 2018-08-25_190722.png
Affichages : 210
Taille : 7,9 Ko

    => Tant que nous n'aurons pas de précisions de la part du demandeur sur ce qu'il considère être un mot, ce sera de la branlette intellectuelle.

    Perso, plutôt qu'un option compare text qui ne permet pas d'utiliser la fonction dans n'importe quel contexte, je préfère strcomp(Chaine1, Chaine2, typeDeComparaison) qui permet de se détacher de l'option et donc d'inclure sans risque d'erreur ta fonction dans un module existant.


    [EDIT]

    Une technique qui pourrait convenir, et qui permettrait de paramétriser les caractères encadrant le mot et qui devraient être exclus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Function MotExiste(Phrase As String, Mot As String) As Boolean
      Dim Remplacements
      Dim Counter As Long
     
      Phrase = " " & Phrase & " "
      Remplacements = VBA.Array(".", ",", ";", "(", ")", "?", "{", "}", "!")
      For Counter = 0 To UBound(Remplacements)
        Phrase = Replace(Phrase, Remplacements(Counter), " ", , , vbTextCompare)
      Next Counter
      MotExiste = InStr(1, Phrase, " " & Mot & " ", vbTextCompare) > 0
    End Function
    Avec un troisième argument pour décider des caractères encadrants

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Function MotExiste2(Phrase As String, Mot As String, Exclus As String) As Boolean
      Dim Remplacements
      Dim Counter As Long
     
      Phrase = " " & Phrase & " "
      Remplacements = Split(Exclus, " ")
      For Counter = 0 To UBound(Remplacements)
        Phrase = Replace(Phrase, Remplacements(Counter), " ", , , vbTextCompare)
      Next Counter
      MotExiste2 = InStr(1, Phrase, " " & Mot & " ", vbTextCompare) > 0
    End Function

    Nom : 2018-08-25_192802.png
Affichages : 220
Taille : 12,5 Ko
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

Discussions similaires

  1. [1.x] Exécuter une tâche symfony dans un module
    Par arnauldl dans le forum Symfony
    Réponses: 2
    Dernier message: 11/08/2009, 14h09
  2. créer, supprimer, modifier et exécuter une tâche
    Par younes32 dans le forum PL/SQL
    Réponses: 3
    Dernier message: 05/06/2009, 09h13
  3. Exécuter une tâche à heure précise ?
    Par [ZiP] dans le forum Débuter
    Réponses: 7
    Dernier message: 24/11/2008, 14h07
  4. Service windows exécutant une tâche périodique
    Par Nico_stras dans le forum C#
    Réponses: 13
    Dernier message: 06/03/2008, 08h46
  5. Exécuter une tâche planifiée avec cron
    Par Olivier Regnier dans le forum Administration système
    Réponses: 6
    Dernier message: 30/03/2007, 21h13

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