Extraire données d'une phrase en cellules

Bonjour à tous,

J'ai un fichier avec des milliers de lignes que je dois scinder en plusieurs cellules...

de type : Titre, nom, prénom,adresse (voir fichier joint)

J'ai beau essayer avec la fonction Données > Convertir, cela ne fonctionne que lorsque je choisi une ligne à la fois.

Dès que j'en sélectionne plusieurs, il ne différencie pas les premiers éléments que je veux scinder.

A savoir que l'adresse peut être retranscrite en une cellule sans dissocier le CP ou le numéro. (l'adresse est toujours la dernière information de la cellule)

Est-ce que quelqu'un peut m'aider sur base de mon fichier joint ?

Mille mercis !

Maureen

14excel-aide.xlsx (8.63 Ko)

Bonjour,

L'inversement du prénom et du nom

comme dans l'exemple joint Bruno ARTS c'est dans la base de donnée d'origine aussi ?

Sinon çà va être encore plus chaud pour identifier le texte à garder

Bonjour,

Malheureusement les champs n'ont pas de délimiteur bien visible, si tu utilises convertir avec espace en délimiteur, ça va tout te découper, j'ai donc fait une macro pour obtenir le résultat que tu voulais:

Sub conversion()
der_lig = Range("a" & Rows.Count).End(xlUp).Row
tableau = Range("a4", "a" & der_lig)
For i = LBound(tableau, 1) To UBound(tableau, 1)
    tabsplit = Split(tableau(i, 1), " ")
    Range("b" & 4 + i - 1) = tabsplit(0)
    Range("c" & 4 + i - 1) = tabsplit(1)
    Range("d" & 4 + i - 1) = tabsplit(2)
    adresse = ""
    For h = LBound(tabsplit, 1) + 3 To UBound(tabsplit, 1)
        adresse = adresse & IIf(adresse = "", "", " ") & tabsplit(h)
    Next h
    Range("e" & 4 + i - 1) = adresse
Next i
End Sub

Je te retourne également le fichier:

Rhoo Mille mercis !

Par contre je viens d'avoir l'info que je dois quand même encore ajouter une colonne : Code Postale et une colonne : Ville qui sont les 2 derniers éléments. Est-ce faisable ?

Bonjour,

Malheureusement les champs n'ont pas de délimiteur bien visible, si tu utilises convertir avec espace en délimiteur, ça va tout te découper, j'ai donc fait une macro pour obtenir le résultat que tu voulais:

Et rapide en plus par contre tes lignes de code n'ont pas reconnu Bruno comme prénom lol

re

Oui c'est possible!

En revanche petit soucis venant de tes données:

1392_Zaventem

le code postal et la ville ne sont pas séparés par un espace, du coup ça foire à cet endroit, autre soucis... Bruxelles 7, qui va essayer de renvoyer bruxelles en code postal, et 7 en ville...

Merci beaucoup !

Oui je vois, je vais vérifier mes sources et les modifier en amont pour éviter cela.

Je pense que tu viens de me faire gagner une semaine de boulot

A bientôt !

Re

Super alors!

Bonne continuation et peut-être à bientôt sur le forum

Salut Maureen-deb,

Salut Ausecour,

Toute la difficulté de ce genre d'exercice repose sur la connaissance approximative des exceptions rencontrées au hasard des données.

Au mieux, ici, en fonction de ce qui est montré dans les exemples.

Un double-clic sur la feuille démarre la macro.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Dim tData, tSplit, tExtract(), iIdx
'
Cancel = True
'
tData = Range("A4:A" & Range("A" & Rows.Count).End(xlUp).Row)
For x = 1 To UBound(tData, 1)
    iIdx = iIdx + 1
    ReDim Preserve tExtract(6, iIdx)
    tSplit = Split(tData(x, 1), " ")
    tExtract(0, iIdx - 1) = tSplit(0)
    tExtract(1, iIdx - 1) = IIf(Asc(Right(tSplit(1), 1)) < 95, tSplit(1), tSplit(2))
    tExtract(2, iIdx - 1) = IIf(Asc(Right(tSplit(2), 1)) > 95, tSplit(2), tSplit(1))
    For y = UBound(tSplit) To 3 Step -1
        If IsNumeric(Left(tSplit(y), 4)) And Len(tSplit(y)) >= 4 Then
            For Z = 3 To y - 1
                tExtract(3, iIdx - 1) = tExtract(3, iIdx - 1) & IIf(tExtract(3, iIdx - 1) = "", tSplit(Z), " " & tSplit(Z))
            Next
            tExtract(4, iIdx - 1) = Left(tSplit(y), 4)
            If Len(tSplit(y)) > 4 Then
               tExtract(5, iIdx - 1) = Right(tSplit(y), Len(tSplit(y)) - 5)
            Else
                For Z = y + 1 To UBound(tSplit)
                    tExtract(5, iIdx - 1) = tExtract(5, iIdx - 1) & IIf(tExtract(5, iIdx - 1) = "", tSplit(Z), " " & tSplit(Z))
                Next
            End If
            Exit For
        End If
    Next
Next
Range("B4").Resize(iIdx, 6).Value = WorksheetFunction.Transpose(tExtract)
'
End Sub

A+

Rechercher des sujets similaires à "extraire donnees phrase"