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 :

Comment savoir si une cellule contient un mot particulier?


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 57
    Points : 16
    Points
    16
    Par défaut Comment savoir si une cellule contient un mot particulier?
    Bonjour,

    J'ai par exemple dans trois cellules differentes:

    cellule A1: "Le_chat_est_dehors"
    cellule A2: "Le_chien_est_dedans"
    cellule A3:"L_oiseau_est_dans_la_cage

    Mes mots clés sont "chat" et "chien" donc en sortie je voudrais avoir:

    cellule B1: chat
    cellule B2: chien
    cellule B3: vide

    Merci.

    Steelk

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(CHERCHE("chat";A1)>0;"Chat";"Non trouvé")
    Citation Envoyé par aide Excel
    Si l'argument texte_cherché est introuvable, la fonction renvoie la valeur d'erreur #VALEUR!.
    Tu devrais pouvoir te débrouiller avec ça.

    En fait la valeur "Non trouvé" si la condition n'est pas satisfaite ne fonctionne pas ; c'est la valeur d'erreur #VALEUR! qui est renvoyée.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    306
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 306
    Points : 164
    Points
    164
    Par défaut
    Tu cherches une formule Excel (solution de CinéPhil) ou un code VBA ?

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonjour,

    Nous sommes ici sous VBA ===>> réponse VBA, donc :

    Voir cet exemple :

    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
    Private Sub Command1_Click()
      Dim toto As String, mot1 As String, mot2 As String
      mot1 = "chat"
      mot2 = "chien"
      toto = "Le_chat_est_dehors"
      MsgBox toto & "  ===> " & transpo(toto, mot1, mot2)
      toto = "Le_chien_est_dedans"
      MsgBox toto & "  ===>" & transpo(toto, mot1, mot2)
      toto = "L_oiseau_est_dans_la_cage"
      MsgBox toto & "  ===> " & transpo(toto, mot1, mot2)
    End Sub
     
    Private Function transpo(texte As String, mt1 As String, mt2 As String) As String
      transpo = ""
      If LCase(texte) Like "*" & LCase(mt1) & "*" Then transpo = mt1: Exit Function
      If LCase(texte) Like "*" & LCase(mt2) & "*" Then transpo = mt2End Function
    Edit : j'ai modifié pour qu'il accepte un mot quelle que soit la casse

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 57
    Points : 16
    Points
    16
    Par défaut
    Effectivement, c'est bien du VBA que je désire....

    J'ai testé le code et j'ai une erreur de compilation...

    Je m'excuse, je me suis mal exprimé sur ma demande, je reformule:

    J'ai dans plusieurs cellules differentes de la feuille 1 des libellés:

    Feuille 1:
    cellule A1:libellés

    cellule A2: Le_chat_est_dehors
    cellule A3: Le_chien_est_dedans
    cellule A4: L_oiseau_est_dans_la_cage

    Feuille 2 contient les mots clés:

    mots_clés

    chat
    chien
    cheval
    serpent

    La position des mots clés n'est pas figé dans la feuille 2

    Résultats:

    Feuille 1:
    cellule B1:catégories
    cellule B2: chat
    cellule B3: chien
    cellule B4:

    Voir fichier joint
    Merci et encore désolé
    Fichiers attachés Fichiers attachés

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Désolé, mais j'estime avoir déjà répondu .... sur comment déceler si une variable string contient ou non une chaîne de caractères et (si elle la contient) la transformer. Telle était la question posée.
    L'exemple était clair...
    le reste (la façon d'aller à la pêche des cellules et des mots) est une autre affaire (la tienne), d'un autre genre .... ...

  7. #7
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 57
    Points : 16
    Points
    16
    Par défaut
    Je suis d'accord mais:
    J'ai testé le code et j'ai une erreur de compilation...

  8. #8
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Montre donc le code testé (et ce seul code... je ne veux pas y voir une seule cellule, mais seulement les variables qui y sont lues) en nous précisant où il y a une erreur et ce qu'elle est ...
    Plus simple :

    teste exactement (hors tout le reste) le code donné (il se compose d'un bouton de commande Command1 et d'une Fonction transpo... et de rien d'autre)... et dis-nous donc où il "foire" ...
    puisqu'il ne foire pas chez moi...

  9. #9
    Membre confirmé
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Points : 563
    Points
    563
    Par défaut
    Bonsoir,

    Voici une autre approche que celle d’ucfoutu, qui correspond à ta dernière pièce jointe :

    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 TrouveMotClef()
    Dim Mat(), NbLignes As Integer, i As Integer, Ref As Range, c As Range
        NbLignes = Sheets(2).UsedRange.Rows.Count
        ReDim Mat(NbLignes)
            With Sheets(2).Range("A2")
                    For i = 0 To NbLignes - 1
                        Mat(i) = .Offset(i)
                    Next
            End With
            With Sheets(1)
                Set Ref = Intersect(.UsedRange, .Range("A:A"))
            End With
        Set Ref = Intersect(Ref, Ref.Offset(1))
            For Each c In Ref
                    For i = 0 To NbLignes - 1
                            If Len(Replace(c, Mat(i), "")) <> Len(c) Then
                                c.Offset(0, 1) = Mat(i)
                                Exit For
                            End If
                    Next i
            Next c
    End Sub

  10. #10
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 57
    Points : 16
    Points
    16
    Par défaut
    Ucfoutu---> voir piece jointe....

    Bigalo, merci beaucoup pour le code il fonctionne a merveille celui la... et me convient mieux...puisqu'il fonctionne

    Je l'adapte a mon prog et je le pointe en résolu si c'est ok...
    Images attachées Images attachées  

  11. #11
    Membre confirmé
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Points : 563
    Points
    563
    Par défaut
    De rien,

    Comment, si c’est OK ?

  12. #12
    Membre confirmé
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Points : 563
    Points
    563
    Par défaut
    Re,

    Quant au code d’ucfoutu, il s’agit juste d’une faute de frappe ou d’une mauvaise manip lors de la recopie du code :

    En comparant les 2 lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      If LCase(texte) Like "*" & LCase(mt1) & "*" Then transpo = mt1: Exit Function
      If LCase(texte) Like "*" & LCase(mt2) & "*" Then transpo = mt2End Function
    on voit bien qu’il manque juste un retour chariot :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      If LCase(texte) Like "*" & LCase(mt1) & "*" Then transpo = mt1: Exit Function
      If LCase(texte) Like "*" & LCase(mt2) & "*" Then transpo = mt2
    End Function

  13. #13
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 57
    Points : 16
    Points
    16
    Par défaut
    De rien,

    Comment, si c’est OK ?
    Oui car comme je disais, j'ai mal défini mon besoin....

    Voir fichier joint pour plus d'explications.

    Merci encore
    Fichiers attachés Fichiers attachés

  14. #14
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    Points : 4 299
    Points
    4 299
    Par défaut
    Question idiote : pourquoi vous n'utilisez pas la fonction Instr du VBA ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If InStr(1, Cells(1, 1).Value, "chat", vbTextCompare) <> 0 Then
    A mettre en forme pour ce que tu veux faire évidemment

  15. #15
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonjour, illight,

    Ta question n'est pas idiote (c'est d'ailleurs elle que je voulais choisir au départ ...)

    J'ai changé d'avis et ai préféré Like ...
    Essaye de deviner pourquoi .... (tu trouveras...)

  16. #16
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    Points : 4 299
    Points
    4 299
    Par défaut
    Désolé mais je vois pas mais bon je propose moi, après tu fais ce que tu veux

  17. #17
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 57
    Points : 16
    Points
    16
    Par défaut
    Question idiote : pourquoi vous n'utilisez pas la fonction Instr du VBA ?
    Car je ne la connaissais pas, au vu de mes pauvres connaissances de VBA...

    Je vais creuser merci..

  18. #18
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 57
    Points : 16
    Points
    16
    Par défaut
    Hello,

    tous le monde, je n'ai toujours pas reussi a resoudre mon pb du:
    31/01/2008, 08h48

    De rien,

    Comment, si c’est OK ?

    Oui car comme je disais, j'ai mal défini mon besoin....

    Voir fichier joint pour plus d'explications.

    Merci encore
    Fichiers attachés test-animaux.xls (25,0 Ko, 1 affichages)
    Merci pour vos aides respectives...

  19. #19
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2017
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      If LCase(texte) Like "*" & LCase(mt1) & "*" Then transpo = mt1: Exit Function
      If LCase(texte) Like "*" & LCase(mt2) & "*" Then transpo = mt2End Function
    L'erreur se situe au "mt2End Function" ou il manque simplement un ":"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      If LCase(texte) Like "*" & LCase(mt1) & "*" Then transpo = mt1: Exit Function
      If LCase(texte) Like "*" & LCase(mt2) & "*" Then transpo = mt2: End Function
    Bonne journée !

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

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    Ouffff, 9 ans qu'il attendait, il était temps ! :-)
    Dommage que la bonne correction était plutôt : https://www.developpez.net/forums/d4...r/#post2906373
    eric

Discussions similaires

  1. [VBA-E] Savoir si une cellule contient un commentaire.
    Par $p00ky dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 02/08/2022, 17h57
  2. [XL-2013] Comment savoir si une cellule contient bien une date ?
    Par DenisHen dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 04/09/2015, 13h07
  3. [XL-2003] Comment savoir si une cellule a été modifiée
    Par Line dans le forum Excel
    Réponses: 4
    Dernier message: 08/08/2009, 19h49
  4. Comment savoir si une chaine contient des lettres
    Par developpeur_débutant dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 27/05/2009, 12h28
  5. [Excel] Comment savoir si la cellule contient un lien hypertexte ?
    Par Millenod dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 16/12/2004, 11h01

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