Macro recherche chaine de caractere

Leks

XLDnaute Nouveau
Bien le bonjour à tous,
d'abord merci d'avance à la personne qui prendra de son temps pour m'aider.
Je suis à la recherche d'une macro imbrique dans un clic d'une forme libre (pour ca j'ai fais clic droit : affecter une macro puis nouvelle ) et qui me permettrait de faire une recherche d'une chaine de caractère (exemple le mot "passerelle") dans la colonne D d'un deuxieme feuillet nommé "terrain" et de coller la ligne entière dans une message box si la recherche aboutit (présence du mot passerelle dans la colonne D en ligne 5 donc qu'il colle la ligne 5 ).
Si la recherche n'aboutit a rien, qu'un message du style " aucune passerelle présente " apparaise dans une MsgBox.
Je sais pas si c'est trop clair, je suis au travail donc difficile de poster un fichier test ...
Si cela est possible également de me commenter le code afin que je ne fasse pas un bete copier coller et que je puisse apprendre ..

Merci d'avance
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Macro recherche chaine de caractere

Bonjour Leks, bonjour le forum,

Je te propose le code commenté ci-dessous :

Code:
Sub Macro1()
Dim T As Worksheet 'déclare la variable T (onglet Terrain)
Dim MC As Variant 'déclare la variable MC (Mot Cherché)
Dim R As Range 'déclare la variable R (Recherche)
Dim PA As String 'déclare la variable PA (Première Addresse)
Dim DC As Byte 'déclare la variable DC (Dernière Colonne)
Dim CEL As Range 'déclare la variable CEL (CELlule)
Dim MSG As String 'déclare la variable MSG (MeSsaGe)

Set T = Sheets("Terrain") 'définit l'onglet T
'dédinit la boîte d'entrée du mot cherché MC
MC = Application.InputBox("Quel Mot recherchez-vous ?", "MOT RECHERCHÉ", Type:=2)
If MC = False Then Exit Sub 'si bouton "Annuler", sort de la procédure
'définit la recherche R (recherche le mot MC entier dans les valeurs de la colonne D  de l'onglet T)
Set R = T.Range("D:D").Find(MC, , xlValues, xlWhole)
If Not R Is Nothing Then 'condition : si au moins une ocurrence existe
    PA = R.Address 'défimnit l'adresse PA de la première occurrence trouvée
    Do 'exécute
        MSG = "" 'initialise la variable MSG
        'définit la dernière colonne éditée DC de la ligne de l'occurrence trouvée R
        DC = T.Cells(R.Row, Application.Columns.Count).End(xlToLeft).Column
        'boucle sur toutes les cellules éditées de la ligne de l'occurrence trouvée
        For Each CEL In T.Range(T.Cells(R.Row, 1), T.Cells(R.Row, DC))
            'définit le message MSG (ajoute un espace entre chaque cellule)
            MSG = IIf(MSG = "", CEL.Value, MSG & " " & CEL.Value)
        Next CEL 'prochaine cellule de la boucle
        MsgBox MSG 'affiche le message MSG
        Set R = T.Range("D:D").FindNext(R) 'redéfinit la recherche R (occurrence suivante)
    'boucle tant qu'il existe de nouvelles occurrences ailleurs qu'en PA
    Loop While Not R Is Nothing And R.Address <> PA
Else 'sinon (Condition)
    MsgBox "Aucune occurrence de " & Chr(34) & MC & Chr(34) & " n'est présente !" 'message
End If 'fin de la condition
End Sub
 

Leks

XLDnaute Nouveau
Re : Macro recherche chaine de caractere

Salut robert,
d'abord grand merci pour la reponse ca me convient parfaitement a deux petits details pres.
Peut on se passer de l'inputbox ? Je voudrais associer directement le mot recherche dans la macro sans differents choix possibles ?( ils sont associes a des freeform)
Et est il possible en cas de recherche abouti de faire egalement apparaitre en toute circonstances dans la message box les cellules A1 ,C1, D1, E1, G1, H1 avec un retour a la ligne et la que ca ne colle pas toute la ligne entiere de la recherche mais que la cellule de la colonne A, C, D, E, G, H de maniere a former un espece de mini tableau bien ordonne ?
D'avance merci
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Macro recherche chaine de caractere

Bonjour,

Si j'ai bien compris, ça donnerait ça (MC à adapter) :

Code:
Sub Macro1()
Dim T As Worksheet 'déclare la variable T (onglet Terrain)
Dim MC As String 'déclare la variable MC
Dim R As Range 'déclare la variable R (Recherche)
Dim PA As String 'déclare la variable PA (Première Adresse)
Dim DC As Byte 'déclare la variable DC (Dernière Colonne)
Dim CEL As Range 'déclare la variable CEL (CELlule)
Dim MSG As String 'déclare la variable MSG (MeSsaGe)

Set T = Sheets("Terrain") 'définit l'onglet T
MC = "toto" 'définit le mot cherché MC (à adapter)
'définit la recherche R (recherche le mot MC entier dans les valeurs de la colonne D  de l'onglet T)
Set R = T.Range("D:D").Find(MC, , xlValues, xlWhole)
If Not R Is Nothing Then 'condition : si au moins une occurrence existe
    PA = R.Address 'définit l'adresse PA de la première occurrence trouvée
    Do 'exécute
        MSG = "" 'initialise la variable MSG
        'définit la dernière colonne éditée DC de la ligne de l'occurrence trouvée R
        DC = T.Cells(R.Row, Application.Columns.Count).End(xlToLeft).Column
        'boucle sur certaines cellules éditées de la ligne de l'occurrence trouvée
        For Each CEL In Application.Union(T.Cells(R.Row, 1), T.Cells(R.Row, 3), T.Cells(R.Row, 4), T.Cells(R.Row, 5), T.Cells(R.Row, 7), T.Cells(R.Row, 8))
            'définit le message MSG (renvoie à la ligne entre chaque cellule)
            MSG = IIf(MSG = "", CEL.Value, MSG & Chr(13) & CEL.Value)
        Next CEL 'prochaine cellule de la boucle
        MsgBox MSG 'affiche le message MSG
        Set R = T.Range("D:D").FindNext(R) 'redéfinit la recherche R (occurrence suivante)
    'boucle tant qu'il existe de nouvelles occurrences ailleurs qu'en PA
    Loop While Not R Is Nothing And R.Address <> PA
Else 'sinon (Condition)
    MsgBox "Aucune occurrence de " & Chr(34) & MC & Chr(34) & " n'est présente !" 'message
End If 'fin de la condition
End Sub
 

Leks

XLDnaute Nouveau
Re : Macro recherche chaine de caractere

Effectivement, excellent Robert surtout avec les commentaires (c'est presque le plus important, ça me permet d'apprendre).

Encore merci :cool:

Je vais juste voir à mettre en forme l'affichage sur la textbox maintenant (et je vais surtout essayer de le faire moi même pour plus t'embêter) ;)

edit : ah non j'ai oublié, il est possible que dans la même macro, j'ai 2 voir 3 mots à rechercher ????? Comment dois je intégrer ?
 
Dernière modification par un modérateur:

Leks

XLDnaute Nouveau
Re : Macro recherche chaine de caractere

Effectivement, excellent Robert surtout avec les commentaires (c'est presque le plus important, ça me permet d'apprendre).

Encore merci :cool:

Je vais juste voir à mettre en forme l'affichage sur la textbox maintenant (et je vais surtout essayer de le faire moi même pour plus t'embêter) ;)

edit : ah non j'ai oublié, il est possible que dans la même macro, j'ai 2 voir 3 mots à rechercher ????? Comment dois je intégrer ?

Bon j'y arrive pas haha, je voulais rajouter devant chaque ligne copier dans la textbox un mot du style " produit " etc, impossible ... Pourtant j'ai compris plus ou moins le code, je dois faire un truc mal :(
 

Leks

XLDnaute Nouveau
Re : Macro recherche chaine de caractere

Oh bonjour Cpk,
pas evident du boulot via mobile. Jme doute que de tete sans fichier representatif c'est pas evident du coup je vais t'uploader ça quand je rentrerais. Enfin faut deja que je fasse un fichier demonstratif, l'original étant confidentiel.
Cm'enerve pck j'ai compris la macro de robert mais certains rouages supplementaires doivent m'echapper..
Merci beaucoup de t'etre propose, c'est super sympa
 

CPk

XLDnaute Impliqué
Re : Macro recherche chaine de caractere

Si j'ai bient tout compris, la base serait une méthode find
Ce lien n'existe plus

Après il y aurait quelque condiments à rajouter mais rien de bien compliqué pour nous.
Donc plus vite on aura un fichier démo sans donné confidentiel plus vite vous allez avoir un système en état de fonctionnement
 

Leks

XLDnaute Nouveau
Re : Macro recherche chaine de caractere

Voilà un fichier test qui n'a strictement rien à voir mais le résultat final est le même.

La deuxième macro de Robert fonctionne parfaitement, le seul problème c'est que ça fait pas trop ordonné sur la MsgBox et après m'être renseigné j'ai l'impression que c'est pas trop configurable (peut être s'orienter vers une TextBox ?)

Le seul soucis sinon qui m'embête dans la très fonctionnelle macro de Robert c'est que si la recherche aboutit à quelque chose, elle mette également devant chaque ligne trouvé, la première ligne de la colonne correspondante (style N° DE commande : 1) et non juste 1.
Je pensais que ça serait lisible sans donc je ne pensais pas en avoir besoin mais après vu le résultat, je pense que c'est mieux de l'intégrer et j'ai pas réussi (j'y ai pourtant passé ma soirée hier).

Sinon, tant qu'à faire, penses tu qu'une TextBox serait plus sympa pour afficher le résultat (j'ai lu qu'il était possible d'afficher un petit logo etc)? Et aussi simple à comprendre / configurer ?
Sinon je me contenterais sans soucis de l'affichage MsgBox surtout que j'ai compris grosso modo le fonctionnement ..

D'avance, merci
ps : par contre pareil si tu peux commenter les lignes afin d'avancer mon apprentissage je t'en serais fort reconnaissant
 

Pièces jointes

  • Aide_Excel - Copie.xlsm
    30.3 KB · Affichages: 42

Robert

XLDnaute Barbatruc
Repose en paix
Re : Macro recherche chaine de caractere

Bonjour le fil, bonjour le forum,

Acte 1 : faire une recherche de mot. Comme pas plus de précisions je te propose la première macro avec une boîte d'entrée pour permettre de définir le mot recherché. Macro 1.
Acte II : La boite d'entrée ne convient pas. J'en déduis que le mot est fixe mais tu ne donnes toujours pas plus d'explications... Macro 2.
Acte III. La macro 2 ne convient pas car il peut y avoir plusieurs mots (pourquoi pas la macro 1 alors ?) mais toujours pas d'explications sur la provenance de ces mots.

Alors oui, on devrait parvenir à coder selon tes besoins mais tu ne sembles pas toi-même connaître ces besoins. Donc fin de la pièce pour moi. CPk prend le relais je lui souhaite bonne chance...
 
Dernière édition:

Discussions similaires

Réponses
2
Affichages
86

Statistiques des forums

Discussions
312 489
Messages
2 088 855
Membres
103 979
dernier inscrit
bderradji