Recherche formule pour séparer donnée hors gauche ou droite

Bonjour à tous,

j'ai une question, je fais mes recherches en parallèle biensûr, mais l'avis des connaisseurs d'excel est important sur ce sujet.

ma question : connaissez vous une fonction excel permettant de sépar des données dans une cellule excel ? je m'explique, je travail dans le transport overseas, nous expedions des containers à l'international. j'extrais des données de mon ERP concernant les commandes de chaaque client mais dans une commande client il peut très bien y avoir 1 seul container (là c'est simple à résoudre) mais parfois c'est davantages (1.2.3.4.... containers pour 1 commande). donc dans mon extraction je me retrouvve avec 1 cellule comme : CAIU4318516 (40GP), FCIU7363137 (40GP), MEDU7874973 (40GP), MSCU9097752 (40GP), MSCU9378472 (40GP), TGHU8642494 (40GP)

ce que je cherche c'est que excel me fasse une cellule par ligne et par container. j'ai pensais à droite ou gauche mais suivant la compagnie le nombre de caractère varie. je pense plus qu'il faudrait une formule qui sépare les donnée jusqu'à ce quelle trouve une virgule.

Pour cause de confidentialité, je vous ai fais un exemple ci dessous

Qu'en pensez vous ?

Pipin54000

7pipin.xlsx (11.88 Ko)

Bonjour,

on se croise souvent en ce moment

en formule je ne vois pas bien, je sais qu'on peut utiliser "convertir" dans l'onglet "Données", mais ici ça ne résoudra pas ton problème, en revanche, en VBA c'est totalement faisable avec la fonction Split() qui permet de séparer des données qui se retrouvent dans un tableau.

Il faut ensuite faire le code pour répéter les lignes de données, mais c'est clairement faisable, le plus difficile je dirais, c'est d'optimiser le code

Une solution par VBA te ferait-t-elle peur? Je sais que certains membres ne veulent pas en entendre parler... Parce que par formule, je ne vois pas comment tu pourrais faire...

bonjour

un essai

dans les cel vertes

2pipin.xlsx (12.41 Ko)

cordialement

Ausecour,

Effectivement en ce moment j'ai beaucoup de question ! :p

je ne suis pas contre du vba, par contre je ne pense pas pouvoir réaliser ce code tout seul, je vais me renseigner sur cette fonction Split() avant de tenter le diable ! :p

Utiliserais tu une formule ou un code VBA afin de recopier les données A2:I2 et K2:V2 sur chaque ligne de container ?

à te lire

Pipin54000

Re,

C'est exactement ça, en clair en mettant les différents conteners dans un tableau, je sortiras les conteners un à un sur des lignes en recopiant les informations fixes

Pour le code on peut te le faire, il faut juste que tu valides qu'une solution par VBA t'irait, car la solution proposée par tulipe est très limitée si tu as besoin de faire ça sur un gros nombre de lignes (de ce que j'en ai vu).

Tulipe,

Merci pour cette formule ! mais je ne suis pas sûr que au vu du volume de ligne à traiter que cela soit la plus pratique.

Merci d'avoir donnée ton avis sur ce sujet

Ausecour,

Je pense effectivement que le VBA est incontournable dans ce cas là. j'ai en gros 200 lignes à traiter chaque mois par client.

Par contre chaque mois dû à l'extraction chaque mois le fichier d'etraction est différent, je pense donc que je vais créer un fichier excel où la macro y sera et j'importerai les donnée depuis l'extraction excel

merci de votre aide à tout les 2 !

à vous lire

Pipin54000

Re,

je te propose cette solution qui fonctionne rapidement pour le coup

11pipin.xlsm (18.09 Ko)

Tu me diras ce que tu en pense

Slt tout le monde,

une autre macro à tester

Sub Separer_Donnees()

Dim sht As Worksheet
Dim i As Long, r As Long, rws As Long, LCol As Long
Dim c As Range
Dim vC As Variant

On Error GoTo FallThrough
Application.EnableEvents = False
Application.ScreenUpdating = False

Set sht = ThisWorkbook.Worksheets("Sheet1")

LCol = sht.UsedRange.Columns(sht.UsedRange.Columns.Count).Column

For r = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
    If InStr(1, Cells(r, 10).Value, ",") > 0 Then
        rws = Len(Cells(r, 10).Value) - Len(Replace(Cells(r, 10).Value, ",", vbNullString))
        Cells(r + 1, 10).Resize(rws, 1).EntireRow.Insert
        Cells(r, 1).Resize(rws + 1, LCol).FillDown
        For i = 0 To rws
            For Each c In Cells(r + i, 1).Resize(1, LCol)
                If InStr(1, c.Value, ",") > 0 Then
                    vC = Split(c.Value, ",")
                    c = vC(i)
                End If
                If IsNumeric(c) Then c = c.Value
            Next c
        Next i
    End If
Next r
FallThrough:
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub

Ausecour,

la macro est super ! et la rapidité ....

par contre j'ai pensé à un truc, dis moi ce que tu en penses :

1- feuille 2 : créer une macro afin d'importer les données de mon extraction excel

2- feuille 1 : on split et coupe / colle dans la feuille 1

Qu'en penses tu ?

Pippin54000

3pipin-1.xlsm (19.15 Ko)

Re,

Je peux modifier la macro pour mettre le résultat sur une nouvelle feuille, mais pour la première demande, il faudra que tu te contentes d'un copier coller

Voici la macro modifiée avec création d'une nouvelle feuille de résultat :

8pipin.xlsm (16.71 Ko)

Ausecour,

Le copié collé je le ferai alors !

Je vais tester ça ! et te tiens au courant

Pipin54000

bonjour à tous

sans les mains VBA ni aucune formule

amitiés

bonjour à tous

sans les mains VBA ni aucune formule

amitiés

Salut jmd

Pourrais tu nous expliquer comment tu as fait? parce que je ne vois aucune formule nul part, et au final on retrouve son tableau avec les colonnes mélangées

Ta méthode irait pour plusieurs fichiers de chacun 200 lignes?

re

c'est avec Power Query

clique dans la zone issue de PQuery, vois le menu Requête

on peut réarranger les colonnes dans PQuery avant de charger dans Excel

200 fichiers de 10 000 lignes si tu veux

(bien que je conseille plutôt de passer à Power BI Desktop gratuit)

note : voir les tutos Youtube pour P Query dans Excel 2010/13

amitiés

Bonjour tous,

Un essai par formule qui ne traite qu'une ligne à la fois, après plusieurs copier/coller, c'est pas tous les jours qu'on envoie deux cent commandes d'une dizaine de conteneurs...

En A2 de la deuxième feuille, inscrire le numéro de la ligne à traiter de la première feuille.

Puis cliquer en A8 ou A9 pour sélectionner le résultat, copier/coller vers le bloc note puis

copier/coller à suivre dans la feuille N°Cont

0pipin-nocont.xlsx (12.96 Ko)
Rechercher des sujets similaires à "recherche formule separer donnee hors gauche droite"