Séparer le contenu d'une cellule sur plusieurs colonnes et rangs

bakubaku

XLDnaute Nouveau
Bonjour,

j'essaye de séparer le contenu d'une cellule sur plusieurs colonnes et rangs

concrètement:
dans des rapports, j'ai sur certaines lignes (pas sur toutes) une cellule qui renferme plusieurs termes, il y a minimum 2 termes dans cette cellule et un maximum qui peut varier,
ces termes sont du texte, et sont séparés par des virgules
j'aimerais pouvoir séparer les 2 premiers termes de la cellule sur la même ligne mais dans deux colonnes différentes et décliner les autres termes sur une colonne différente mais dans des rangs successifs

exemple:
avant: cellule R2 renferme 4 termes
après: cellule R2 renferme le terme 1
cellule S2 renferme le terme 2
cellule T3 renferme le terme 3
cellule T4 renferme le terme 4

de plus, il faudrait dupliquer sur les lignes supplémentaires les autres colonnes du rapport, mais sans écraser les lignes situés après la ligne contenant la cellule "surpeuplée"

je met en pièce jointe un fichier illustrant le avant/après

est-ce que c'est faisable avec une/des formule(s)? ou plutôt avec du vba?

merci d'avance
 

Pièces jointes

  • test tracking.xlsx
    10.5 KB · Affichages: 42

bakubaku

XLDnaute Nouveau
Re : Séparer le contenu d'une cellule sur plusieurs colonnes et rangs

Bonjour pierrejean

ton fichier est magnifique!
je dois encore finir de le tester dans quelques cas de figure, mais il semble faire exactement le job

pour ma culture générale, est-ce que tu peux m'expliquer ton utilisation de la formule Ubound dans ce cas?

encore merci
 

pierrejean

XLDnaute Barbatruc
Re : Séparer le contenu d'une cellule sur plusieurs colonnes et rangs

Re

Un essai de commentaire de la macro

Code:
Sub test()
For n = 2 To Range("R" & Rows.Count).End(xlUp).Row
'mise en tableau du contenu de la celule
  x = Split(Range("R" & n), ",")
  'le tableau se presente ainsi pour la ligne 3:
  'A1
  'A2
  'A3
  'A4
  'A5
  'A6
' si le nombre de lignes du tableau est = ou >2 (rappel le numérotage commence à 1 d'ou le >=1)
  If UBound(x) >= 1 Then
  '1er element du tableau en colonne R
    Range("R" & n) = x(0)
  ' 2eme element du tableau en colonne S
    Range("S" & n) = x(1)
  End If
 'si plus de 2 lignes dans le tableau
  If UBound(x) > 1 Then
  'insere des lignes
    For m = 2 To UBound(x)
      Rows(n + 1).Insert
    Next m
    For m = 2 To UBound(x)
    ' recopie de la ligne precedente
      Range("A" & n & ":Q" & n).Copy Destination:=Range("A" & n + m - 1)
    'ecriture en colonne T
      Range("T" & n + m - 1) = x(m)
    Next
  End If
Next
End Sub
 
Dernière édition:

bakubaku

XLDnaute Nouveau
Re : Séparer le contenu d'une cellule sur plusieurs colonnes et rangs

je l'ai testé sur un rapport de 4 791 lignes, il marche très bien sauf bizarrement pour le dernier cas qui se situe à la ligne 4 789,
mais quand je réappuie sur le bouton "traiter" il s'en occupe finalement, donc pas de problème

merci encore pour ton aide
 

Discussions similaires