XL 2013 EClater une cellule en plusieurs lignes sur plusieurs colonnes

al.usa3193@hotmail.com

XLDnaute Nouveau
Bonjour à tous,

Je ne suis pas experte dans tout ce qui macro et c'est un peu du charabia pour moi :) :)
Je souhaiterais eclater les données d'une cellule sur plusieurs lignes svp, je vous joins mon fichier!!!

Merci de votre aide ....:)
 

Pièces jointes

  • Classeur1.xlsx
    9.9 KB · Affichages: 61

al.usa3193@hotmail.com

XLDnaute Nouveau
:) :) :)
Comme tu le vois, ça ressemble à un tableau MAIS, toutes lignes du texte dans la ligne 1 de la feuil excel, ce que je voudrais faire c'est de tout splitter et de mettre chaque ligne de texte dans une ligne séparemment.
Si on compte bien, on est supposé avoir 31 lignes.

J'espère que j'ai bien expliqué :)
 

Staple1600

XLDnaute Barbatruc
Bonsoir à tous

Laissons Dieu hors des cellules d'Excel ;)

Alors qu'est-ce que tu ne comprends pas ?
Est-ce que déjà tu as pu tester cette macro ?
Sinon, G..gle ou tout outil de ce type te diras comment faire pour lancer une macro dans EXCEL

NB: Si tu ne comprendas pas ma macro, moi j'entrave que dalle à toutes ces références de produits cosmétiques qui enrichessent des multinationales pas tojours éthiques.
(Mélenchon , sors de ce corps !!)
Nous sommes donc à équalité au niveau compréhension. ;)

Pour info, dans ta cellule C2, il y a plus de 1000 caractères.
Dans mon exemple, j'ai utilisé le / comme séparateur mais était-ce le bon choix ?
 

job75

XLDnaute Barbatruc
Bonjour al.usa3193, Jean-Marie,

Ce code fonctionne bien :
Code:
Private Sub CommandButton1_Click()
Dim c As Range, L#, t$, i%, e, s, j%, t1$
Application.ScreenUpdating = False
Application.Goto [Z1], True 'pour éloigner les colonnes traitées
Rows("3:" & Rows.Count).Delete 'RAZ
Rows("3:" & Rows.Count).WrapText = False 'pas de renvoi à la ligne
For Each c In [A2:G2] 'plage à adapter
  If c <> "" Then
    L = c.ColumnWidth
    t = "": i = 2
    For Each e In Split(c)
      s = Split(e, vbLf)
      For j = 0 To UBound(s)
        t1 = t
        t = Trim(t & " " & s(j))
        c(i) = t
        c(i).Columns.AutoFit 'ajustement largeur
        If j Or c(i).ColumnWidth > L + 1 Then c(i) = t1: i = i + 1: t = s(j): c(i) = t
    Next j, e
    c.ColumnWidth = L
  End If
Next c
Application.Goto [A1], True
End Sub
Le résultat dépend bien sûr des largeurs des colonnes.

Suivant l'ordi il faut modifier (manuellement) ces largeurs.

A+
 

Pièces jointes

  • Eclater(1).xlsm
    27.5 KB · Affichages: 49

job75

XLDnaute Barbatruc
Re,

Si l'on veut que les nombres en colonnes B D E F G soient bien des nombres :

- mettre ces colonnes aux formats Nombre ou Pourcentage adéquats

- ajouter en fin de macro le code :
Code:
[D:F].Replace ",", ".", xlPart 'conversion en nombres
Fichier (2).

Bonne fin de soirée.
 

Pièces jointes

  • Eclater(2).xlsm
    29.1 KB · Affichages: 33

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum, job75

J'avais pourtant testé un split avec Chr(10) , autrement dit vbLf
Mais bug sur mon PC actuel.
Sii ça peut aider la demanderesse ;), je mets un petit mémo
Code:
VbLf = Chr(10) ( Line Feed) : Descendre d'une ligne
vbCr = Chr(13) (Carriage Return) : Retour chariot
vbCrLf = Chr(13) & Chr(10)

@job75: j'ai testé ton fichier (message#7) sous XL2003, ça fonctionne.
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour le fil, le forum, JM,

On peut traiter autrement les colonnes A B D E F G, c'est d'ailleurs plus rapide :
Code:
For Each c In [A2:B2,D2:G2] 'plage à adapter
  s = Split(Replace(Replace(c, vbLf, " "), " %", "%"))
  If c <> "" Then c(2).Resize(UBound(s) + 1) = Application.Transpose(s)
Next c
Fichier (3).

Bonne journée.
 

Pièces jointes

  • Eclater(3).xlsm
    28.5 KB · Affichages: 33

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum, job75

@job75
Comme je suis sous Excel 2003 (villégiature oblige), je convertis ton *.xlsx en *.xls
Et là, le CommandButtton le fonctionne pas
J’insère un nouveau CommandButton j'y colle ton code VBA du CommandButton1
Ça marche toujours pas (mais je sais que copié dans un module standard ton code fonctionne comme je l'indiquais dans mon précédent message)
Question
Est-ce l'outil de conversion de Microsoft qui "bugue" ou est-ce ce vieux PC (sous XP et XL2K3) qui est en cause ??

PS: Si je crée un classeur vierge, là un commandbutton issu de la barre d'outils Contrôles fonctionne sans souci.
 

job75

XLDnaute Barbatruc
Re,

Une autre méthode : on se fixe le nombre maximum de caractères d'une ligne en C2.

Des caractères vbCrLf sont introduits dans le texte en C2 :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim maxi, c As Range, s, t$, e, i%, t1$
Application.EnableEvents = False 'désactive les évènements
With [M1] 'nombre maximun de caractères d'une ligne en C2, à adapter
  .Value = Abs(Int(Val(.Value)))
  maxi = .Value
  If Target.Address = .Address Then .Select
End With
Application.ScreenUpdating = False
Rows("3:" & Rows.Count).Delete 'RAZ
Rows("3:" & Rows.Count).WrapText = False 'pas de renvoi à la ligne
For Each c In [A2:B2,D2:G2] 'plage à adapter
  s = Split(Replace(Replace(c, vbLf, " "), " %", "%"))
  If c <> "" Then c(2).Resize(UBound(s) + 1) = Application.Transpose(s)
Next c
Set c = [C2] 'cellule à adapter
If c <> "" Then
  t = ""
  For Each e In Split(Replace(c, vbCrLf, " "))
    s = Split(e, vbLf)
    For i = 0 To UBound(s)
      t1 = t
      t = Trim(t & IIf(i, vbLf, " ") & s(i))
      If Len(t) - InStrRev(t, vbLf) > maxi Then t = t1 & IIf(i, vbLf, vbCrLf) & s(i)
  Next i, e
  c = t 'nouveau texte en C2
  s = Split(Replace(t, vbCrLf, vbLf), vbLf)
  c(2).Resize(UBound(s) + 1) = Application.Transpose(s)
End If
Columns("C").AutoFit 'ajustement largeur
Rows(2).AutoFit 'ajustement hauteur
Application.EnableEvents = True 'réactive les évènements
End Sub
La macro s'exécute quand une cellule quelconque est modifiée ou validée.

L'intérêt est que les textes à partir de C3 sont toujours le reflet exact* du texte en C2.

[Edit] * Du moins jusqu'à une certaine limite, chez moi 345 caractères par ligne sur l'exemple.

La limite est due à la largeur maximum possible d'une colonne (255).

Cette méthode a ma préférence, d'autant qu'elle est bien plus rapide.

Fichiers (4).

A+
 

Pièces jointes

  • Eclater(4).xlsm
    28.7 KB · Affichages: 30
  • Eclater(4).xls
    80 KB · Affichages: 27
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 195
Messages
2 086 079
Membres
103 112
dernier inscrit
cuq-laet