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

Signaler
Messages postés
11
Date d'inscription
mardi 22 janvier 2019
Statut
Membre
Dernière intervention
7 février 2019
-
Messages postés
11
Date d'inscription
mardi 22 janvier 2019
Statut
Membre
Dernière intervention
7 février 2019
-
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 !

3 réponses

Messages postés
1403
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
3 octobre 2020
143
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) ?
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

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 !
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...

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é ?
Messages postés
6996
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
31 octobre 2020
564
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



1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

Messages postés
6996
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
31 octobre 2020
564
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à
Messages postés
6996
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
31 octobre 2020
564
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 ?

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

Messages postés
6996
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
31 octobre 2020
564
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

Messages postés
11
Date d'inscription
mardi 22 janvier 2019
Statut
Membre
Dernière intervention
7 février 2019

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