XL 2013 Séparer et ranger

  • Initiateur de la discussion Initiateur de la discussion maval
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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
 
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

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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
182
Réponses
9
Affichages
195
Réponses
5
Affichages
433
Réponses
4
Affichages
381
Retour