Séparer un champ en plusieurs champs

Bonjour à tous,

J'ai un champ de ce type (appelons le A1) et j'aurais besoin de le décomposer en 6 champs disons B1, C1, D1, E1, F1 et G1

Le champ est du type :

113001_00;amont;215,92587|113100_12;aval;954,45984

B1 serait donc : 113001_00

C1 : amont

D1 : 215,92587

E1 : 113100_12

F1 : aval

G1 : 954,45984

donc ; et | sont des séparateurs

mais , et _ font partie des champs

Je précise que la longueur de chacune des 6 valeurs varie régulièrement

mais les séparateurs ; et | sont toujours les mêmes et toujours dans le même ordre

Merci d'avance de votre aide !

Bonne journée à tous !

Hello,

Avec un code VBA pour une fonction personnalisée trouvé sur internet.

Dis moi si ça te convient !

44classeur1.xlsm (13.52 Ko)

Bonjour,

Merci beaucoup de ce retour.

Il n'y a donc pas de méthode "simple" sans passer par un sous-programme ?

Je n'ai pas bien compris comme intégrer la solution que tu fournis en exemple dans ma feuille Excel ?

Merci encore !

Frédéric

Bonjour,

Tu peux utiliser la fonction "Convertir"

Pour cela, tu sélectionnes toutes les données (mettons de A1 à A10)

Dans le ruban "Données", tu cliques sur "Convertir"

Etape 1 : Délimité

Etape 2 : tu sélectionnes ";" (point virgule), et la dernière case "Autre"

Dans cette case, tu tapes Alt + 124 (le signe | apparaît)

Etape 3 : tu choisis $B$1 dans la case "Destination"

Puis "Terminer"

Et voilou

Bon courage

C'est surement possible si.

Pour la formule c'est une fonction personnalisée qui fonctionne comme ceci :

=LeSplit(cellule que l'on veux séparer;"séparateur, ici le ;";partie à séparer)

A savoir que pour la partie à séparer, le 1 sépare la 1ère partie, le 2 entre le 1er et 2ème point virgule, le 3 entre le 2è et le 3è et ainsi de suite.

Bonjour,

avec un fichier ça aiderait (anonymisé)

P.

bonjour

avec un macro

mes il nous manque un model de ton fichier

A+

Maurice

Sub Test()
   For L = 1 To 1
      text_string = Split(Replace(Range("A" & L).Value, "|", ";"), ";")
         For I = LBound(text_string) To UBound(text_string)
            Cells(L, I + 2).Value = text_string(I)
         Next
   Next
End Sub

Merci pour toutes vos réponses.

Ci-joint un modèle du fichier.

J'aurais besoin dans les colonnes B C D E F G de chacune des 6 valeurs séparées soit par ; soit par la barre.

Encore merci

Frédéric


Je veux dire par là que je n'ai pas besoin du ; ou de la barre dans les cellules cibles.

Juste de chacune des 6 valeurs séparées par le ; ou la barre.

12modele.xlsx (9.54 Ko)

Re-,

As-tu essayé la méthode que je t'ai donnée?

ça répond parfaitement à ton besoin, sans macro, ni formules....

Peut-être n'arrives-tu pas à l'utiliser?

@ te relire

Si la solution de cousinhub ne te convient pas (me^me si je pense que c'est la plus pratique, je ne connaissais pas, merci au passage pour l'astuce) regarde le fichier ci-joint.

Je me suis permis de reprendre le code de Archer que j'ai adapté pour qu'il aille jusqu'à la dernière ligne du tableau. Tu as juste a cliquer sur le bouton.

Bonne soirée.

15modele-copie.xlsm (16.93 Ko)

Bonjour

re modife pour les chiffres

A+

Maurice

10modele-copie.xlsm (19.79 Ko)

Merci à tous pour vos messages.

J'étudie ces différentes solutions et vous dit ce que j'ai fait et si j'ai besoin d'informations en plus.

En tous cas un immense MERCI à tous.

J'ai regardé.

Cousinhub, la conversion fonctionne très bien.

Mais en fait dans mon, fichier j'ai une cinquantaine de colonnes de données brutes puis une trentaine de colonnes qui se calculent automatiquement en fonction de ces données brutes.

J'aimerais donc avoir plutôt une formule qui se base sur mes données brutes pour se calculer.

En ce sens, la macro serait peut-être bien mais je ne sais pas où je dois coller le code dans mon fichier Excel (jamais fait).

Une astuce simple ?

Sinon, j'ai vu sur un autre poste cette possibilité.

Je la copie-colle sans la comprendre mes pensez-vous que cela puisse s'adapter à mon cas ?

=SI(NBCAR($A$1)-NBCAR(SUBSTITUE($A$1;"/";""))+1<LIGNES($1:1);"";SI(LIGNES($1:1)>NBCAR($A$1)-NBCAR(SUBSTITUE($A$1;"/";""));DROITE($A$1;NBCAR($A$1)-TROUVE("^^";SUBSTITUE($A$1;"/";"^^";NBCAR($A$1)-NBCAR(SUBSTITUE($A$1;"/";"")))));SI(LIGNES($1:1)=1;STXT($A$1;1;TROUVE("^^";SUBSTITUE($A$1;"/";"^^";1))-1);STXT($A$1;TROUVE("^^";SUBSTITUE($A$1;"/";"^^";LIGNES($1:1)-1))+1;TROUVE("^^";SUBSTITUE($A$1;"/";"^^";LIGNES($1:1)))-TROUVE("^^";SUBSTITUE($A$1;"/";"^^";LIGNES($1:1)-1))-1))))

Merci encore et bonne journée

Frédéric

Pour la macro c'est simple :

Alt + F11

Tu clique droit sur le nom de ton classeur -> Insertion -> Module

Tu y colle le code dedans

Ensuite sur ta feuille tu fais : Onglet Développeur -> Macro -> Clique sur le nom de la macro et exécuter.

Cordialement,

Edit : Si tu n'y arrives pas envoie moi ton fichier en MP si il ya des données confidentielles je te le ferais.

Rechercher des sujets similaires à "separer champ champs"