Excel : Recherche et extraction d'un mot dans une colonne [Résolu]

Signaler
Messages postés
12
Date d'inscription
mardi 17 avril 2012
Statut
Membre
Dernière intervention
3 mai 2012
-
Messages postés
12
Date d'inscription
mardi 17 avril 2012
Statut
Membre
Dernière intervention
3 mai 2012
-
Bonjour,

J'ai un petit probleme dans excel que je n'arrive pas à résoudre.

Rechercher un mot specifique dans une colonne pour l'extraire vers une autre colonne.

Par exemple si dans une ligne il y a marqué "4 rue du general leclerc BP100" je veux extraire le BP100 pour qu'il apparaisse dans une colonne nommée BP pour la ligne associée.

Merci d'avance pour votre aide,
Cordialement

17 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
225
Regarde ce que fais ceci (exemple) :
toto = "JJEJEJE BP 5000 JIII"
If toto Like "*BP*" Then
  titi = "BP" & Val(Mid(toto, InStr(toto, "BP") + 2))
  MsgBox titi
End If

Voilà .



________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
225
Bonjour,
Problème simple : ===>> 2 solutions entre d'autres ===>>
1) parcourir la colonne (Boucle For ... to ...) et déterminer si occurrence, à l'aide de la fonction Instr (à lire dans ton aide)
2) plus adroit : utiliser la méthode Find (à lire dans ton aide VBA, ainsi que son exemple)

Dans les deux cas : lorsque occurrence ===>> copier (méthode copy à lire dans ton aide) vers la destination que tu veux.
Reviens avec ton code d'essai si encore en difficulté malgré ces lectures.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
59
Date d'inscription
mardi 4 décembre 2007
Statut
Membre
Dernière intervention
28 juin 2012

Saut Jean-Michel,

Connais tu les mots à chercher et peux tu les lister dans une feuille.
L'idée est de prendre les mots à chercher les uns après les autres (si plusieurs) et le mettre dans la colonne désiré.

As tu déjà réalisé un code ?

Lezeps ;-))
Messages postés
12
Date d'inscription
mardi 17 avril 2012
Statut
Membre
Dernière intervention
3 mai 2012

Rebonjour et merci de votre réponse.

Je suis en train d'essayer d'écrire le code mais j'ai des difficultés a mettre en oeuvre la méthode find. En effet j'ai beau chercher sur internet je ne trouve pas de réponse cohérente. Pourriez-vous m'indiquer le chemin pour réussir (aide vba) et je les mettrai en oeuvre.

Merci

@ZEPS256 : Je ne peux pas utiliser cette méthode car je ne connais pas les variables après BP.

Cdt.
Messages postés
59
Date d'inscription
mardi 4 décembre 2007
Statut
Membre
Dernière intervention
28 juin 2012

Jean-Michel,

Ucfoutu a raison, et nettement meilleur que moi !!!...c'est lui qui m'aide.
Néanmoins, aider me fait progresser.

1°) maitrises tu la boucle for..to... avec peut être une variable (nb de ligne ou de colonne dans lesquelles chercher).

2°) Find => avant de chercher sur le net, tu fais F1 dans VBA et tu tapes "Find"
Et là tu auras les explications.
Je trouve que c'est mieux.
Et si tu faits F2 tu as l'explorateur d'objets qui te donne les propriétés (et tu peux repasser ds l'aide F1 directement à partir du poit interrogation d'aide)

A toi !...

Lezeps ;-))
Messages postés
12
Date d'inscription
mardi 17 avril 2012
Statut
Membre
Dernière intervention
3 mai 2012

Merci lezeps

Je regardais dans l'xplorateur d'objet mais je ne comprenais pas tout. Ta méthode est très bien c'est juste que je n'avai pas téléchargé les aides. Je tient au courant

Bonjour,

c'est juste que je n'avai pas téléchargé les aides


Juste un mot : sacrilège.

Programmer sans utiliser les fichiers d'aide en premier, c'est comme utiliser des béquilles en paille.
Messages postés
12
Date d'inscription
mardi 17 avril 2012
Statut
Membre
Dernière intervention
3 mai 2012

Bonjour,

Après une semaine de galère la meilleur chose que je suis arrivé a faire est :

Sub test_II()


With Range("A1:A" & [A65536].End(xlUp).Row).SpecialCells(xlCellTypeConstants)
For i = 1 To .Rows.Count
v = .Cells(i, 1).Value
w = InStr(1, "BP")
If .Cells(i, 1) Like "*BP*" Then
Valeu = Mid(v, 1, 6)
.Cells(i, 3).Value = Valeu
End If
Next
End With

End Sub

Mais j'ai un probleme pour ou j'ai bien mettre w à la place de 1 afin de copier a partir de BP

PS: J'ai abandonné la fonction find car je ne trouvai pas comment faire un copier coller ou meme d'afficher les valeurs trouvé

Pourriez-vous m'aider ?

Cordialement
Messages postés
12
Date d'inscription
mardi 17 avril 2012
Statut
Membre
Dernière intervention
3 mai 2012

Desolé pour l'odmission de mot mon probleme se trouve au niveau de la fonction mid où j'aimerai bien mettre w à la place de 1 afin de copier a partir de BP
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
225
Bonjour,
Je pense que tu as maintenant installé l'aide, non ?
Si oui ;
je ne comprends pas ta question, qui consisterait à savoir comment remplacer 1 par w dans l'utilisation de Mid !


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
59
Date d'inscription
mardi 4 décembre 2007
Statut
Membre
Dernière intervention
28 juin 2012

De mon côté, j'ai un peu le même besoin.
Je me suis créé la liste de mot (ils sont variables) que je dois trouver une autre feuille.
Sur une feuille en colonne B:B j'ai mes chaines de caractère

Ucfoutu me corrigera si besoin, mais ça tourne bien.
C'est juste un peu long à mon gout, si beaucoup de critères ( 100 mots pour 100 lignes par exemple => 3 ou 4 s )

Sub RechercheMot()
Dim f1 As Byte
Dim i1 As Byte
Dim x1 As Byte
Dim z1 As Byte
Dim montext1 As String
Dim RechercheMot As String

'Détermine le n° de lignes pour ramener la somme
x1 = Range("B250").End(xlUp).Row
For i1 = 2 To x1
montext1 = Cells(i1, 2).Value

'Récupère la liste des mots à chercher
z1 = Sheets("Critéres").Range("A50").End(xlUp).Row
For f1 = 2 To z1
RechercheMot = Sheets("Critéres").Cells(f1, 1).Value

Next
Next
End Sub

Lezeps ;-))
Messages postés
12
Date d'inscription
mardi 17 avril 2012
Statut
Membre
Dernière intervention
3 mai 2012

Rebonjour tout le monde

Tout d'abord merci de votre aide la deuxieme valeur de la fonction mid donne la Position du caractère dans l'argument qui est variable dans notre cas car le BP peut se trouver à n'importe quel position. Je voudrai donc que cette fonction marche a partir de "BP". Merci de votre aide
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
225
Oui ?
et alors ?
Puisque tu as extrait (dans ta variable w) la position de "BP" ===> utilise donc w comme deuxième argument de Mid !
Où est ton problème ?


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
12
Date d'inscription
mardi 17 avril 2012
Statut
Membre
Dernière intervention
3 mai 2012

Le Probleme est que j'ai une erreur '5' Argument ou appel de procédure incorrect. Du a ce W
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
225
Et cela t'étonne ? vraiment ?
Regarde comment tu as déterminé w
w = InStr(1, "BP")

ouvre ton aide sur la fonction Instr.
dans ce que tu as écrit, w = 0 (forcément)
et comme Mid ne peut extraire qu'à partir d'une position >0, ma foi>> plantage !
Tu devrais te concentrer un peu sur les fonctions (de base) que tu utilises


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
12
Date d'inscription
mardi 17 avril 2012
Statut
Membre
Dernière intervention
3 mai 2012

J'ai corrige le code et ça fonctionne enfin presque :


Sub test_II()


With Range("A1:A" & [A65536].End(xlUp).Row).SpecialCells(xlCellTypeConstants)
For i = 1 To .Rows.Count
SearchString = .Cells(i, 1).Value
SearchChar = "BP"
w = InStr(SearchString, SearchChar)
If .Cells(i, 1) Like "*BP*" Then
Valeu = Mid(SearchString, w, 6)
.Cells(i, 3).Value = Valeu
End If
Next
End With

End Sub

J'aimerais maintenant pouvoir prolonger ou réduire l'extraction en fonction du nombre de numéro après BP car la en effet c'est fixe il suffit par exemple que j'ai JJEJEJE BP 5000 JIII pour qu'il me donne BP 50 alors que je veux extraire le BP5000 aurait tu une solution ou une piste..

Merci d'avance pour ton aide précieuse :)
Messages postés
12
Date d'inscription
mardi 17 avril 2012
Statut
Membre
Dernière intervention
3 mai 2012

Sub test_II()


With Range("A1:A" & [A65536].End(xlUp).Row).SpecialCells(xlCellTypeConstants)
For i = 1 To .Rows.Count
SearchString = .Cells(i, 1).Value
SearchChar = "BP"
w = InStr(SearchString, SearchChar)
If .Cells(i, 1) Like "*BP*" Then
Valeu = "BP" & Val(Mid(SearchString, InStr(SearchString, "BP") + 2))
.Cells(i, 3).Value = Valeu
End If
Next
End With

End Sub


REPONSE ACCEPTEE
Merci grandement, il me restera plus qu'a porter ce boud de code sur toutes les colonnes mais ça ne va pas être bien long.


Je te remercie pour ton aide.