Excel : Recherche et extraction d'un mot dans une colonne

Résolu
JeanMichMich69 Messages postés 12 Date d'inscription mardi 17 avril 2012 Statut Membre Dernière intervention 3 mai 2012 - 17 avril 2012 à 11:20
JeanMichMich69 Messages postés 12 Date d'inscription mardi 17 avril 2012 Statut Membre Dernière intervention 3 mai 2012 - 24 avril 2012 à 11:54
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

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
24 avril 2012 à 11:46
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
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
17 avril 2012 à 11:25
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
0
ZEPS256 Messages postés 59 Date d'inscription mardi 4 décembre 2007 Statut Membre Dernière intervention 28 juin 2012
17 avril 2012 à 11:27
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 ;-))
0
JeanMichMich69 Messages postés 12 Date d'inscription mardi 17 avril 2012 Statut Membre Dernière intervention 3 mai 2012
17 avril 2012 à 13:18
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ZEPS256 Messages postés 59 Date d'inscription mardi 4 décembre 2007 Statut Membre Dernière intervention 28 juin 2012
17 avril 2012 à 14:22
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 ;-))
0
JeanMichMich69 Messages postés 12 Date d'inscription mardi 17 avril 2012 Statut Membre Dernière intervention 3 mai 2012
17 avril 2012 à 14:36
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
0
Utilisateur anonyme
17 avril 2012 à 19:15
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.
0
JeanMichMich69 Messages postés 12 Date d'inscription mardi 17 avril 2012 Statut Membre Dernière intervention 3 mai 2012
23 avril 2012 à 14:18
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
0
JeanMichMich69 Messages postés 12 Date d'inscription mardi 17 avril 2012 Statut Membre Dernière intervention 3 mai 2012
23 avril 2012 à 14:21
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
23 avril 2012 à 15:15
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
0
ZEPS256 Messages postés 59 Date d'inscription mardi 4 décembre 2007 Statut Membre Dernière intervention 28 juin 2012
24 avril 2012 à 08:28
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 ;-))
0
JeanMichMich69 Messages postés 12 Date d'inscription mardi 17 avril 2012 Statut Membre Dernière intervention 3 mai 2012
24 avril 2012 à 09:04
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
24 avril 2012 à 09:53
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
0
JeanMichMich69 Messages postés 12 Date d'inscription mardi 17 avril 2012 Statut Membre Dernière intervention 3 mai 2012
24 avril 2012 à 10:25
Le Probleme est que j'ai une erreur '5' Argument ou appel de procédure incorrect. Du a ce W
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
24 avril 2012 à 10:50
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
0
JeanMichMich69 Messages postés 12 Date d'inscription mardi 17 avril 2012 Statut Membre Dernière intervention 3 mai 2012
24 avril 2012 à 11:33
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 :)
0
JeanMichMich69 Messages postés 12 Date d'inscription mardi 17 avril 2012 Statut Membre Dernière intervention 3 mai 2012
24 avril 2012 à 11:54
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.
0
Rejoignez-nous