Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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é


Donne ==>


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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…