Microsoft 365 Extraire des valeurs de taille variable d'une chaîne de caractère

bigduff

XLDnaute Nouveau
Bonjour les experts,

Je sèche sur le problème suivant. Je récupère dans Excel des informations dans ce format :

GTP9;426;5;2
GTP10;0;0;0

Je souhaite pouvoir extraire automatiquement les valeurs situées entre points virgule, ainsi que la valeur la plus à droite, dans autant de colonnes distinctes.

Donc dans mon exemple : 426, 5 et 2 ou 0, 0 et 0.

Problème : le texte en début de chaîne varie entre 4 et 5 caractères (de GTP1 à GTP11), et les valeurs comprises entre points virgule entre 1 et 4 caractères (de 0 à 9999).

Ce qui rend cette problématique insoluble pour mes quelques tentatives à base de STXT, CHERCHE et TROUVE.

Je vous serai reconnaissant si vous pouviez m'apporter une aide à ce sujet.

Un grand merci d'avance.

B.
 

Phil69970

XLDnaute Barbatruc
Bonjour à tous

Tout en image :
Données ==> Convertir==> Délimité

1636393366313.png
1636393424898.png
1636393462602.png

Donne ==>
1636393505374.png


et en vba cela donne : (Il faut juste sélectionner la zone à convertir)

VB:
Sub Convertion()
Set MaZone = ActiveCell
On Error Resume Next
Selection.TextToColumns Destination:=MaZone, DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, Semicolon:=True, FieldInfo:=Array(Array(1, 1)), TrailingMinusNumbers:=True
Set MaZone = Nothing
End Sub

*Merci de ton retour

@Phil69970
 

job75

XLDnaute Barbatruc
Bonsoir bigduff, chris, Bruno, Phil69970,

Voyez le fichier joint et les noms définis deb et fin, ce sont des matrices.

Formule en B2 à tirer à droite et vers le bas :
Code:
=STXT($A2;PETITE.VALEUR(deb;COLONNE()-1);PETITE.VALEUR(fin;COLONNE())-PETITE.VALEUR(deb;COLONNE()-1))
A+
 

Pièces jointes

  • Extraire(1).xlsx
    10.5 KB · Affichages: 12

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir à tous :),
Bienvenue sur XLD @bigduff :),

J'y vais aussi avec mes 3 formules:
  • En B1, la formule : =GAUCHE(STXT(A1;CHERCHE(";";A1)+1;99);CHERCHE(";";STXT(A1;CHERCHE(";";A1)+1;99))-1)
  • Puis en D1, la formule : =SUPPRESPACE(DROITE(SUBSTITUE(A1;";";REPT(" ";255));255))
  • Et après en C1 (C1 dépend de B1 et D1): =SUBSTITUE(STXT(A1;CHERCHE(";" & B1 & ";";A1)+2+NBCAR(B1);999);";" & D1;"")
  • Tirer/copier B1 à D1 vers le bas
nota : si vous voulez des "vrais nombres", insérez dans chacune des trois formules 1* juste après le signe =.
 

Pièces jointes

  • bigduff+ extraction- v1.xlsx
    10 KB · Affichages: 9
Dernière édition:

bigduff

XLDnaute Nouveau
Wow, merci pour ces prompts retours.

Par rapport au premier message, c'est vrai que passer par l'import de données d'Excel fonctionne très bien. Je copie/colle la colonne dans un fichier note quelconque, j'importe, et le découpage se fait automatiquement.

Mais je vais quand même essayer toutes ces belles formules, pour le panache et la beauté du geste.

Je vous tiens au courant.
 

Discussions similaires

Statistiques des forums

Discussions
312 115
Messages
2 085 453
Membres
102 890
dernier inscrit
selkis