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 texte contenu dans une forme [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    NA
    Inscrit en
    Novembre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : NA

    Informations forums :
    Inscription : Novembre 2014
    Messages : 11
    Points : 1
    Points
    1
    Par défaut Recherche texte contenu dans une forme
    Bonjour à toutes et à tous,

    Tout d'abord, je tiens à remercier tous les contributeurs de ce forum.

    Après recherche, je n'ai malheureusement pas trouvé de réponse à mon problème.

    En fait, je souhaiterais créer une interface de recherche sur un classeur. L'objectif est de faire une sorte "d'index" sur la première feuille, qui pointerai chacun sur une donnée particulière dans les autres feuilles.

    Si je prend un exemple, en index je met un certain nombre de menu ainsi que les liens vers différentes recettes (les feuilles) pour réaliser les menus.

    L'objectif est donc de pouvoir, depuis l'index, rechercher directement une recette en tapant un ingrédient.

    Cependant, pour des raison esthétiques, les données de l'index et dans les feuilles sont contenues dans des "formes" Excel.

    Graphiquement, de ce style :
    Nom : menu.jpg
Affichages : 1437
Taille : 21,9 Ko

    Si je tape "souris d'agneau" dans la recherche sur l'index, je dois pouvoir voir les références du mot présentent dans l'index.

    En espérant avoir été clair

    Merci d'avance.


    Teomik

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    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 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Bonjour,

    Pas sûr de tout bien comprendre, mais si tu veux lire le texte sur une form, ceci pourrait peut-être t'aider
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        Dim Sh As Shape
     
        For Each Sh In ActiveSheet.Shapes  'Mettre le nom de la feuille si autre que ActiveSheet
            If InStr(1, LCase(Sh.TextFrame.Characters.Text), "terrine") > 0 Then
                MsgBox "Trouvé"
            Else
                MsgBox "Non trouvé"
            End If
        Next
    MPi²

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    NA
    Inscrit en
    Novembre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : NA

    Informations forums :
    Inscription : Novembre 2014
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Merci pour cette première réponse.

    Cependant, ce que je souhaite, c'est que l'utilisateur puisse, à l'aide d'un bouton "rechercher" taper l'ingrédient qu'il souhaite.
    Ensuite, cette recherche doit retourner les instances de l'ingrédient présent dans l'index.

    En fait, c'est exactement la fonction de recherche CTRL+F mais dans des formes (en l’occurrence les textes sont contenus dans des carrés plus ou moins design ^^)

    Car CTRL + F recherche le texte contenu dans une ligne ou une colonne.

    Merci

    Teomik

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    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 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Quel est cet index au juste ?
    Une liste dans un onglet ou le texte dans un Form ?
    MPi²

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    NA
    Inscrit en
    Novembre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : NA

    Informations forums :
    Inscription : Novembre 2014
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Voici une illustration :
    Nom : exemple.jpg
Affichages : 1427
Taille : 15,9 Ko

    C'est une ébauche de ce que j'appelle "l'index".

    -> On a une liste de produit
    -> Si je clic sur Pomme par exemple, cela va m'ouvrir une nouvelle feuille (lien hypertexte dans le classeur) avec toutes les recettes possible avec la pomme.

    L'objectif du bouton recherche dans "l'index" est donc de permettre à l'utilisateur d'ouvrir la feuille correspondante. Si je recherche "Poulet" alors le texte "poulet" de la rubrique viande se mettra en surbrillance et l'utilisateur n'aura qu'à cliquer pour accéder à la liste des recettes.

    Ai-je été assez clair?

    Merci.

    Teomik

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    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 617
    Points : 5 912
    Points
    5 912
    Par défaut
    De la façon dont je vois les images, c'est qu'il n'y a qu'une seule "form" qui contient différents textes.
    Lorsque tu cliques sur cette Form, tu ne peux pas lire ou sélectionner une seule partie de cette Form.
    C'est toute la Form qui est sélectionnée... à moins que ce soit plusieurs Forms, une sous les autres... (?)
    MPi²

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    NA
    Inscrit en
    Novembre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : NA

    Informations forums :
    Inscription : Novembre 2014
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    En effet ce sont plusieurs formes imbriquées.
    La forme globale ne contient pas de texte, elle contient d'autres formes, chacune un rectangle qui contient du texte et qui permet de faire un lien hypertexte sur une autre feuille du classeur.


    Teomik

  8. #8
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    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 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Si je comprends bien, dans les images que tu mets, "Orange", "Banane",... sont tous des rectangles individuels.
    Donc, une macro du genre de celle qui suit devrait pouvoir aider.

    Tu affectes cette macro à chaque rectangle et tu lis son texte pour ta recherche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Rechercher()
        Dim Texte As String
     
        Texte = ActiveSheet.Shapes(Application.Caller).TextFrame.Characters.Text
        MsgBox Texte
    End Sub
    MPi²

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    NA
    Inscrit en
    Novembre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : NA

    Informations forums :
    Inscription : Novembre 2014
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Exactement!

    Cependant, après avoir affecté cette macro à chacune des formes, j'essaie un CTRL+F sur la feuille et il ne trouve rien..

    Alors que quand je clic sur une forme, j'ai bien une message box qui me retourne le texte contenu dans la forme.

    Merci de ton aide.

    Teomik

  10. #10
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    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 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Pourquoi un Ctrl-F ?
    Étant donné que la macro te retourne le texte, il te suffit de rechercher dans tes feuilles où se situe ce ou ces mots.
    Peut-être que ça prendrait un peu plus d'explications sur le déroulement de ton programme ou du moins ce que tu veux faire exactement.

    Disons que je clique Banane, qu'est-ce que le programme est censé faire ?
    Où doit-il chercher cette valeur ?
    MPi²

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    NA
    Inscrit en
    Novembre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : NA

    Informations forums :
    Inscription : Novembre 2014
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    1- L'utilisateur saisi l'ingrédient à rechercher grâce à une zone recherche présente dans la feuille d'index. Il clic sur rechercher.
    2- S'il rentre banane, on affiche les instances de ce mot présentent dans l'index. En l’occurrence, banane sera présent dans la catégorie Fruit.
    3- L'utilisateur n'a plus qu'à cliquer sur la forme contenant le mot banane dans la rubrique fruit de l'index. Chaque forme à un lien vers une autre feuille qui contiendra des recettes.

    Voilà.

  12. #12
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    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 617
    Points : 5 912
    Points
    5 912
    Par défaut
    J'ai de la difficulté à comprendre exactement ce que tu fais, mais bon...
    Essaie ceci; ça pourrait te donner une piste

    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
    Sub Rechercher()
        Dim Ingredient As String, StrTemp As String
        Dim Sh As Shape
     
        Ingredient = InputBox("Entrer l'ingrédient", "Recherche de recettes")
        If Ingredient = "" Then Exit Sub
     
        For Each Sh In ActiveSheet.Shapes
            If InStr(1, LCase(Sh.TextFrame.Characters.Text), LCase(Ingredient)) > 0 Then
                StrTemp = StrTemp & Sh.Name & vbCrLf
            End If
        Next
     
        If StrTemp <> "" Then
            MsgBox "Ces forms contiennent le mot " & Ingredient & vbCrLf & StrTemp
        Else
            MsgBox "Aucune form contient " & Ingredient
        End If
    End Sub
    MPi²

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    NA
    Inscrit en
    Novembre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : NA

    Informations forums :
    Inscription : Novembre 2014
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    C'est bien ce que je cherche à faire.

    Cependant, actuellement, quand je clic sur Recherche, je rentre mon ingrédient, il me renvoie le nom de la forme qui contient le mot.
    On y est presque sauf qu'il faudrait pouvoir placer le curseur directement sur le forme qui contient ingrédient (ou mettre en surbrillance la forme).

    Voir le fichier joint exemple (très succins mais c'est dans l'esprit).


    Merci.exemple_rechercheForm.xls
    Fichiers attachés Fichiers attachés

  14. #14
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    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 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Essaie ceci pour voir
    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
    Sub Rechercher()
        Dim Ingredient As String, StrTemp As String
        Dim Sh As Shape
     
        Ingredient = InputBox("Entrer l'ingrédient", "Recherche de recettes")
        If Ingredient = "" Then Exit Sub
     
        For Each Sh In ActiveSheet.Shapes
            If InStr(1, LCase(Sh.TextFrame.Characters.Text), LCase(Ingredient)) > 0 Then
                TrouverRecette Ingredient  'affiche la feuille avec les recettes
                Exit For
            End If
        Next
     
    End Sub
     
    Sub TrouverRecette(Nom As String)
        Select Case LCase(Nom)  'lettres minuscules
            Case "banane"
                Sheets("Recette_banane").Activate
            Case "agneau"
                Sheets("Recette_agneau").Activate
     
        End Select
    End Sub
    MPi²

  15. #15
    Nouveau Candidat au Club
    Homme Profil pro
    NA
    Inscrit en
    Novembre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : NA

    Informations forums :
    Inscription : Novembre 2014
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Merci beaucoup pour ton aide, c'est nickel mais il y a un cas qui va poser problème : si j'ai le même ingrédient dans deux catégories différentes, il faudrait pouvoir choisir..

    Je vois pas vraiment comment l'intégrer dans cette macro.

    Teomik

  16. #16
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    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 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Je pense qu'il va falloir que tu réanalyses l'ensemble du programme...
    L'histoire des Forms est déjà difficile à maintenir à jour pour l'ajout/retrait/modification d'ingrédients ou de menus.
    Il faudrait y aller comme une base de données et penser à "l'esthétique" par la suite
    MPi²

  17. #17
    Nouveau Candidat au Club
    Homme Profil pro
    NA
    Inscrit en
    Novembre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : NA

    Informations forums :
    Inscription : Novembre 2014
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Je sais que ce n'est pas évident mais j'essaie de trouver une solution pour faciliter l'accès.
    La "base" existe mais y accéder est fastidieux je cherche une rustine.

    En dehors de la gestion des doublons, la dernière macro est pas mal, mais il me manque le fait de pouvoir mettre en surbrillance la forme trouvée.

    un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ActiveSheet.Shapes.Range("StrTemp").Select
     
        If StrTemp <> "" Then
            MsgBox "Ces forms contiennent le mot " & Ingredient & vbCrLf & StrTemp
            MsgBox StrTemp   //il m'affiche bien le nom de la forme
            ActiveSheet.Shapes.Range("StrTemp").Select   //là ça plante...

    Teomik

  18. #18
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    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 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Il faut enlever les guillemets puisque c'est une variable
    Essaie
    Mais ça te sélectionnera la form comme si tu cliquais droit dessus, donc avec les points autour...
    Sinon, tu pourrais créer un double de chaque form que tu places une au-dessus de l'autre, avec une couleur différente.
    Tu pourrais les mettre visibles ou invisibles selon le cas...

    Ou encore tu pourrais jouer avec la couleur de fond de la Form lorsqu'elle est "sélectionnée" par la recherche
    MPi²

  19. #19
    Nouveau Candidat au Club
    Homme Profil pro
    NA
    Inscrit en
    Novembre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : NA

    Informations forums :
    Inscription : Novembre 2014
    Messages : 11
    Points : 1
    Points
    1
    Par défaut
    C'est justement sur le fond et la sélection que je souhaiterai jouer mais pour le moment je n'arrive pas à sélectionner la forme.

    Comme ça, chaque forme qui contient le terme de la recherche sera en surbrillance et dans le cas où j'ai des doublons je peux choisir ma catégorie d'ingrédients.

    C'est bizarre je ne vois pas d'où vient le problème :/

    Ci-joint l'état actuel du doc testexemple_rechercheForm.xls

  20. #20
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    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 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Essaie quelque chose comme ceci
    Tu stockes la couleur de base dans une constante, l'ingrédient choisi, et un tableau qui contiendra les noms des forms

    Lorsque tu sélectionnes un ingrédient, tu changes la couleur de fond (J'ai pris vbRed)
    Quand tu as terminé ce que tu veux faire, tu appelles la macro RemettreCouleur pour remettre la couleur originale

    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
    34
    35
    36
    37
    Const Couleur As Long = 8830719
     
    Public TabloForms() As String
    Public Ingredient As String
     
    Sub Rechercher()
        Dim StrTemp As String
        Dim Sh As Shape
        Dim Idx As Long
     
        Ingredient = InputBox("Entrer l'ingrédient", "Recherche de recettes")
        If Ingredient = "" Then Exit Sub
     
        Erase TabloForms
        ReDim TabloForms(0)
     
        For Each Sh In ActiveSheet.Shapes
            If InStr(1, LCase(Sh.TextFrame.Characters.Text), LCase(Ingredient)) > 0 Then
                Sh.DrawingObject.Interior.Color = vbRed
                ReDim Preserve TabloForms(Idx)
                TabloForms(Idx) = Sh.Name
                Idx = Idx + 1
            End If
        Next
     
    End Sub
     
    Sub RemettreCouleur()
        Dim Sh As Shape
     
        For Each Sh In ActiveSheet.Shapes
            If InStr(1, LCase(Sh.TextFrame.Characters.Text), LCase(Ingredient)) > 0 Then
                Sh.DrawingObject.Interior.Color = Couleur
            End If
        Next
     
    End Sub
    MPi²

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/07/2015, 22h46
  2. DataGridView : longueur max du texte contenu dans une cellule
    Par Kanetsugu dans le forum Windows Forms
    Réponses: 0
    Dernier message: 21/05/2011, 15h25
  3. recherche du contenu dans une table
    Par sghanet dans le forum ASP.NET
    Réponses: 3
    Dernier message: 25/02/2010, 16h52
  4. Tronquer le texte contenu dans une variable object ?
    Par drthodt dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/06/2008, 15h08
  5. [DEBUTANT]Recherche mot contenu dans une String
    Par lynxman dans le forum Langage
    Réponses: 7
    Dernier message: 16/12/2005, 11h49

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