Extraire un mot dans une chaîne de caractères [Résolu]

Messages postés
11
Date d'inscription
mardi 22 janvier 2019
Statut
Membre
Dernière intervention
7 février 2019
- - Dernière réponse : garfieldu38
Messages postés
11
Date d'inscription
mardi 22 janvier 2019
Statut
Membre
Dernière intervention
7 février 2019
- 23 janv. 2019 à 10:32
Bonjour à tous,

Je cherche à extraire le 4ème mot d'une liste de référence ci-dessous.
J'ai essayé de combiner les fonctions stxt, cherche, gauche, droite, nbcar mais rien à faire...
(mon problème est que la taille de mon 4ème mot varie entre 6 et 8 caractères,

BASK 657431 60 ML574HVA 10 PIGMENT 481
BASK 657481 60 U220EA 8 BLACK 00
...
...

...

Mes idées

1) =STXT(H8;CHERCHE(" ";[ma case];13);9)
Mais cela me sort U220EA 8 au lieu de U220EA pour la 2ème ligne

2)Dans un forum j'ai trouvé un début de réponse mais cela n'a pas l'air de fonctionner ...
(phrase en A1 et position du mot en B1)


=SI(B1>NBCAR(A1)-NBCAR(SUBSTITUE(A1;" ";""));DROITE(A1;NBCAR(A1)-TROUVE("^^";SUBSTITUE(A1;" ";"^^";NBCAR(A1)-NBCAR(SUBSTITUE(A1;" ";"")))));SI(B1=1;STXT(A1;1;TROUVE("^^";SUBSTITUE(A1;" ";"^^";1))-1);STXT(A1;TROUVE("^^";SUBSTITUE(A1;" ";"^^";B1-1))+1;TROUVE("^^";SUBSTITUE(A1;" ";"^^";B1))-TROUVE("^^";SUBSTITUE(A1;" ";"^^";B1-1))-1)))

Merci d'avance !
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
4582
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
14 octobre 2019
117
1
Merci
Bonjour Garfield, bonjour le forum,

Une solution VBA t'intéresse-t-elle ?
Qu'est-ce qu'un "mot" pour toi ? uniquement alphabétique entre le numérique (ML ou HVA) ou un mélange numérique/alphabétique séparé par un espace (ML574HVA) ?

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 63146 internautes nous ont dit merci ce mois-ci

garfieldu38
Messages postés
11
Date d'inscription
mardi 22 janvier 2019
Statut
Membre
Dernière intervention
7 février 2019
-
c'est le mélange numérique/alphanumérique qui m'intéresse"ML574HVA" (la référence de mon produit) !

je me tourne vers le VBA car je n'ai pas réussi en classique pourtant j'y suis presque (cf idée 1) : le fait que ma référence fasse entre 6 et 8 caractères rend les choses compliquées ..

merci beaucoup pour ta réponse !
garfieldu38
Messages postés
11
Date d'inscription
mardi 22 janvier 2019
Statut
Membre
Dernière intervention
7 février 2019
-
j'ai essayé ça mais quand ma référence fait 7 caractères j'ai un espace en trop et si elle fait 6 j'ai un espace et un caractère en trop...

garfieldu38
Messages postés
11
Date d'inscription
mardi 22 janvier 2019
Statut
Membre
Dernière intervention
7 février 2019
-
peut-être que je dois supprimer ce post et le remettre dans "bureautique, Excel" ? cela serait plus approprié ?
Commenter la réponse de ThauTheme
Messages postés
6272
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
16 octobre 2019
398
1
Merci
Bonjour,

Tu es dans le Forum VB/VBA

Voici la fonction split en vba:

se mettre sur la feuille contenant les données et faire Alt F11 pour accéder au module de la feuille;

Mettre ce code:

Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Value = "" Then Exit Sub
MsgBox Split(ActiveCell.Value, " ")(3)
End Sub



Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 63146 internautes nous ont dit merci ce mois-ci

cs_Le Pivert
Messages postés
6272
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
16 octobre 2019
398 -
J'ai vu ton image voici une boucle sur la colonne B:

https://www.developpez.net/forums/d605223/logiciels/microsoft-office/excel/contribuez/boucles-parcourir-colonne-ligne-plage-donnees-2-methodes/

voici le code:

Sub For_X_to_Next_Ligne()
Dim FL1 As Worksheet, NoCol As Integer
Dim NoLig As Long, Var As Variant
    Set FL1 = Worksheets("Feuil1")
    NoCol = 2 'lecture de la colonne B
    For NoLig = 1 To Split(FL1.UsedRange.Address, "$")(4) 'mettre à la place du 1 ta cellule de départ
        Var = FL1.Cells(NoLig, NoCol)
        FL1.Cells(NoLig, NoCol + 1) = Split(Var, " ")(3)
    Next
    Set FL1 = Nothing
End Sub


Voilà
cs_Le Pivert
Messages postés
6272
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
16 octobre 2019
398 -
garfieldu38
Messages postés
11
Date d'inscription
mardi 22 janvier 2019
Statut
Membre
Dernière intervention
7 février 2019
-
Cela ne marche pas ...Est-ce que c'est lié au fait que certaines ref ont un "-" et non pas un espace entre mon 2ème et mon 3ème mot ?

garfieldu38
Messages postés
11
Date d'inscription
mardi 22 janvier 2019
Statut
Membre
Dernière intervention
7 février 2019
-
en vert là où je voudrais extraire le mot (j'ai essayé de lancer la macro en partant de la colonne en orange ou en vert cela ne change rien)

j'ai toutefois trouvé une alternative c'est de passer par l'onglet données > convertir > délimité, ce qui éclate ma case en autant de colonnes que j'ai de "mot" dans ma cellule

cs_Le Pivert
Messages postés
6272
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
16 octobre 2019
398 -
Cela vient de là.

Essaie ceci pour enlever le tiret:

Sub enlevetiret()
Dim FL1 As Worksheet, NoCol As Integer
Dim NoLig As Long, Var As Variant
    Set FL1 = Worksheets("Feuil1")
    NoCol = 2 'lecture de la colonne B
    For NoLig = 1 To Split(FL1.UsedRange.Address, "$")(4) 'mettre à la place du 1 ta cellule de départ
        Var = FL1.Cells(NoLig, NoCol)
        Var = Replace(Var, "-", " ")
         FL1.Cells(NoLig, NoCol) = Var
       Next
    Set FL1 = Nothing
End Sub
Sub For_X_to_Next_Ligne()
Dim FL1 As Worksheet, NoCol As Integer
Dim NoLig As Long, Var As Variant
    Set FL1 = Worksheets("Feuil1")
    NoCol = 2 'lecture de la colonne B
    For NoLig = 1 To Split(FL1.UsedRange.Address, "$")(4) 'mettre à la place du 1 ta cellule de départ
        Var = FL1.Cells(NoLig, NoCol)
        FL1.Cells(NoLig, NoCol + 1) = Split(Var, " ")(3)
    Next
    Set FL1 = Nothing
End Sub

Commenter la réponse de cs_Le Pivert
Messages postés
11
Date d'inscription
mardi 22 janvier 2019
Statut
Membre
Dernière intervention
7 février 2019
0
Merci
Bonjour à tous, merci beaucoup @cs_Le Pivert pour ton aide mais ta macro n'a pas marché.
J'ai trouvé une solution en faisant une macro automatique (je ne comprends pas encore le VBA mais cela te montre comment j'ai fait) ! (3 étapes : remplacer les "-", créer des colonnes, et convertir mes données)


Sub MacromCompil()
'
' MacromCompil Macro
'

'
Columns("H:H").Select
Selection.Replace What:="-", Replacement:=" ", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Columns("I:I").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Columns("H:H").Select
Selection.TextToColumns Destination:=Range("H1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
:=Array(1, 1), TrailingMinusNumbers:=True
End Sub
Commenter la réponse de garfieldu38