XL 2010 Adapter formule STXT ou autre

3xceln4ute

XLDnaute Occasionnel
Bonjour,

J'aimerais savoir s'il y avait moyen d'extraire automatiquement une portion d'un code dans une cellule adjacente . Techniquement c'est faisable (formule STXT). Cependant, la contrainte est que le code ne comporte pas toujours le même nombre de caractères, ce qui rend la formule inopérante.
Exemple:
CRC-10-TEMP-103400-44732-0 »»
Code:
=STXT(C6;13;6)
AJEF-11-CONC-105440-46881 »»
Code:
=STXT(C3;14;6)
CH-10-CONC-103130-0000 »»
Code:
=STXT(C8;12;6)

La solution serait de prendre le "-" comme point de repère, de compter 3 tirets et prendre le code à 6 chiffres juste après, mais je ne sais pas comment le formuler dans le langage d'excel.
 

3xceln4ute

XLDnaute Occasionnel
Bonjour JHA,

Je te remercie pour ton assistance. Toutefois, pour ce code "MHM-14-DIR-103510-14622" ça donne ce résultat : 14-DIR au lieu de 103510 (voir le classeur). As-tu une idée ?
 

Pièces jointes

  • Classeur Subirubi.xlsx
    10.6 KB · Affichages: 34

joss56

XLDnaute Accro
Tu copies tous tes codes dans une colonne. Tu les sélectionnes, tu cliques sur Données | Convertir. Tu spécifies le caractère de séparation (ici le tiret -) et tu constates ...

Jocelyn
 

Pièces jointes

  • Convertir.xlsx
    9 KB · Affichages: 32

Staple1600

XLDnaute Barbatruc
Bonsoir joss56

Mes remarques s'adressaient à subirubi
Je trouve normal de citer un fil quand on ouvre un second fil pour une même question.
Mais depuis un temps, la courtoisie et les nouveaux membres c'est plus ce que c'était...

subirubi
Pourquoi donc n'as-tu pas persévéré avec la formule que je t'ai proposé dans ton premier fil
je n'ai pas trop envie de pousser plus loin les tests mais ...
subirubi.jpg
 
Dernière édition:

DoubleZero

XLDnaute Barbatruc
Bonjour, le Fil :), le Forum,

Avec la même idée que joss56 et Staple1600 :
VB:
Option Explicit
Sub Convertir()
Columns(1).TextToColumns Destination:=Range("d1"), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
    Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
    :="-", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, _
    1), Array(6, 1)), TrailingMinusNumbers:=True
Columns("c:f").Delete Shift:=xlToLeft: Columns("d:aa").Delete Shift:=xlToLeft
End Sub

A bientôt :)
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir à tous :),

Bon, je m'y mets aussi...

Une formule matricielle (à valider par les trois touches Ctrl+Maf+Entrée au lieu de la seule touche Entrée) qui extrait le n ième mot d'un texte dont le séparateur de mots est le tiret (un genre de Split).


La formule matricielle :
VB:
=STXT("-" & $A2 & "-";PETITE.VALEUR(SI(STXT("-" & $A2 & "-";LIGNE(INDIRECT("$1:" &  NBCAR("-" & $A2 & "-")));1)="-";LIGNE(INDIRECT("$1:" &  NBCAR("-" & $A2 & "-"))));B$1)+1;PETITE.VALEUR(SI(STXT("-" & $A2 & "-";LIGNE(INDIRECT("$1:" &  NBCAR("-" & $A2 & "-")));1)="-";LIGNE(INDIRECT("$1:" &  NBCAR("-" & $A2 & "-"))));B$1+1)-PETITE.VALEUR(SI(STXT("-" & $A2 & "-";LIGNE(INDIRECT("$1:" &  NBCAR("-" & $A2 & "-")));1)="-";LIGNE(INDIRECT("$1:" &  NBCAR("-" & $A2 & "-"))));B$1)-1)
Dans la formule ci-dessus :
  • $A2 est le texte duquel on extrait le n ième mot
  • B$1 est le rang du mot à extraire
 

Pièces jointes

  • subirubi-extraire ième mot- v1.xlsx
    12.9 KB · Affichages: 29
Dernière édition:

3xceln4ute

XLDnaute Occasionnel
Bonsoir joss56

Mes remarques s'adressaient à subirubi
Je trouve normal de citer un fil quand on ouvre un second fil pour une même question.
Mais depuis un temps, la courtoisie et les nouveaux membres c'est plus ce que c'était...

subirubi
Pourquoi donc n'as-tu pas persévéré avec la formule que je t'ai proposé dans ton premier fil
je n'ai pas trop envie de pousser plus loin les tests mais ...
Regarde la pièce jointe 970518
Bonjour Staple1600 :),

Je tiens à m'excuser si cela t'a dérangé, sache que ce n'est pas le but.
Faut comprendre que j'avais besoin d'une réponse rapide. Certes, ta solution était parfaite sur le moment, mais comme l'avait bien remarqué un membre sur l'ancien fil, une nouvelle contrainte est apparue. Du coup, j'ai ouvert un nouveau fil.

Bonjour, le Fil :), le Forum,

Avec la même idée que joss56 et Staple1600 :
VB:
Option Explicit
Sub Convertir()
Columns(1).TextToColumns Destination:=Range("d1"), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
    Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
    :="-", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, _
    1), Array(6, 1)), TrailingMinusNumbers:=True
Columns("c:f").Delete Shift:=xlToLeft: Columns("d:aa").Delete Shift:=xlToLeft
End Sub

A bientôt :)
Allô 00,

Merci pour ta solution. J4aimerais la tester, cependant. Serait-ce possible de me dire juste comment implémenter cette macro à la colonne ?

Merci :)


Je tiens, en passant, à remercier tout ce beau monde qui a donné le meilleur de lui-même. Merci beaucoup.
 

Statistiques des forums

Discussions
312 194
Messages
2 086 069
Membres
103 110
dernier inscrit
Privé