XL 2013 Séparer et ranger

maval

XLDnaute Barbatruc
Bonjour

J'ai un cas particulier j'ai téléchargé sur le site du gouvernement une base de données mon problème est que les valeur sont dans une seul cellule par ligne, est j'aimerai si possible les séparer et les ranger dans 14 cellules.

Mon fichier seras plus explicite

Je vous remercie d'avance

Max
 

Pièces jointes

  • Separer Ranger.xlsm
    9.9 KB · Affichages: 15

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Si vous avez le fichier csv, importez le par Données/A partir du texte et laissez vous guider.
Choissez l'option 'Délimité' puis dans la liste 'Origine du fichier', tout en bas, choisissez '65001 unicode(Utf-8)
A l'étape suivante mettez le point virgule comme délimiteur (si tel est le cas) et valider

Votre fichier sera éclaté en colonnes. Sinon communiquez nous l'origine du fichier.

Bonne journée
 

job75

XLDnaute Barbatruc
Bonjour maval, Roblochon,

Voyez le fichier joint et cette macro :
VB:
Sub Convertir()
Dim tablo, i&, x$, j%, y$, test As Boolean, ncol%, s
With Range("B22", Range("B" & Rows.Count).End(xlUp))
    If .Row < 22 Then Exit Sub 'si le tableau est vide
    tablo = .Resize(, 2) 'matrice, plus rapide, au moins 2 éléments
    '---traitement des espaces---
    For i = 1 To UBound(tablo)
        x = Application.Trim(tablo(i, 1)) 'SUPPRESPACE
        For j = 1 To Len(x)
            If Mid(x, j, 1) = " " Then
                y = Mid(x, j + 1, 1)
                test = False
                If j > 9 Then test = Mid(x, j - 9, 9) = "catégorie"
                If y <> UCase(y) Or y = "(" Or Mid(x, j, 6) = " Insee" Or test Then _
                    x = Left(x, j - 1) & Chr(160) & Mid(x, j + 1) 'insertion d'un espace insécable
            End If
        Next j
        tablo(i, 1) = x
    Next i
    .Value = tablo 'restitution
    '---conversion---
    ncol = Evaluate("MAX(LEN(" & .Address & ")-LEN(SUBSTITUTE(" & .Address & ","" "",)))") + 1 'nombre de colonnes
    ReDim resu(1 To UBound(tablo), 1 To ncol)
    For i = 1 To UBound(tablo)
        s = Split(tablo(i, 1)) 'l'espace est le séparateur
        For j = 0 To UBound(s)
            If IsDate(s(j)) Then resu(i, j + 1) = CDate(s(j)) Else resu(i, j + 1) = s(j)
    Next j, i
    .Resize(i - 1, ncol) = resu 'restitution
    .Columns(1).HorizontalAlignment = xlCenter
    .EntireRow.Columns.AutoFit 'ajustement largeur
End With
End Sub
A cause des dates je n'utilise pas la commande "Convertir".

L'exécution est rapide car on utilise des tableaux VBA.

A+
 

Pièces jointes

  • Separer Ranger(1).xlsm
    24.8 KB · Affichages: 15

Efgé

XLDnaute Barbatruc
Bonjour Job, le fil, le forum

En repartant du lien laissé
Si maval a fait un simple copié/collé du texte directement dans Excel, il se retrouve avec son fichier exemple, sans tabulations.
Si on fait un copié du texte d'origine dans un ficher texte, à l'ouverture de celui-ci par Excel, on retrouve les tabulations.
Voir le Txt en pièce jointe avec les premières lignes de l'original.

Cordialement
 

Pièces jointes

  • Tst.txt
    8 KB · Affichages: 6

Discussions similaires

Réponses
16
Affichages
409
Réponses
4
Affichages
186