|
Posté le 06/06/2012 @ 15:45 |
Nouvel astucien
| Bonjour,
J'ai un fichier de plusieurs lignes et plusieurs colonnes. Les informations sont disposées en ligne, et dans une des colonnes qui est dans le milieu, j'ai plusieurs informations dans une seule case qui sont séparées par des retour à la ligne.
Je n'arrive pas à les séparer malgré l'outil "convertir les données", le retour a la ligne ne semble pas exister comme séparateur.
L'idéal serait de pouvoir faire une ligne par info, le tout en recopiant les données de la ligne initiale pour les autres colonnes.
Si quelqu'un aurait une idée ? Peut être y a t il un symbole qui représente le retour a la ligne ?
Merci d'avance
|
|
|
|
|
|
Posté le 06/06/2012 à 16:16 |
Astucien | Bonjour,
Sans fichier difficile de te faire du sur-mesure.
Cette macro converti une sélection de cellule. Ssi une cellule comporte des "retour ligne" les différents morceaux sont dispatchés dans les colonnes suivantes.
Il est donc recommandé de copier/coller tes données dans la colonne A d'une feuille vide.
Tu sélectionnes le tout puis tu lances la macro. Tu retrouveras tes données splitées dans les colonnes B et suivantes...
Sub separe() Dim o As Range, Arr$() For Each o In Selection Arr = Split(o, Chr(10)) For i = 0 To UBound(Arr) o.Offset(, i + 1) = Arr(i) Next Next End Sub
|
|
Posté le 06/06/2012 à 16:31 |
Nouvel astucien
| Voici un exemple de ce qu'il faudrait :
Element A |
Element B |
info1 info2 info3 |
Element C |
Element D |
Element E |
Element F |
info1 info2 info4 |
Element G |
Element H |
Element I |
Element J |
info1 info2 info5 |
Element K |
Element L |
Element M |
Element N |
info1 info2 info6 |
Element O |
Element P |
Element Q |
Element R |
info1 info2 info7 |
Element S |
Element T |
Il faudrait qu'il n'y ait qu'une donnée de type info par ligne et recopier les elements liés à cet info sur chaque ligne, donc obtenir ça :
par exemple pour la premiere ligne, la transformer de cette manière
Element A |
Element B |
info1 |
Element C |
Element D |
Element A |
Element B |
info2 |
Element C |
Element D |
Element A |
Element B |
info5 |
Element C |
Element D |
Mais déjà un grand merci pour ton bout de code , je vais essayer de voir si je peux faire quelque chose. |
|
Posté le 06/06/2012 à 16:51 |
Nouvel astucien
| un élément important que j'ai oublié de préciser, les données infos n'ont pas forcément la même taille (bah voui, ce serait trop simple sinon... ) |
|
Posté le 06/06/2012 à 17:28 |
Astucien | Au lieu de me donner un exemple tu me donnerai un petit bout du vrai fichier, ça m'éviterai de faire un fichier qui n'ira pas non plus ... |
|
Posté le 06/06/2012 à 19:06 |
Astucien | |
|
Posté le 07/06/2012 à 09:48 |
Nouvel astucien
| J'ai réussi à remplacer les retour à la ligne par des points virgule.
Maintenant ma problématique est de créer une macro qui mettrait une info par ligne pour la colonne avec toutes les infos séparées par des points virgules sans effacer les données à droite de cette colonne
6ABC-12032458 - 341755 - 1 |
11/04/2012 |
11/04/2012 |
13:00 |
18:00 |
info1 |
45fng1-r0s0 ; 45fng1-r1s0 ; 45gig1-r0s0 ; 45gig1-r0s1 ; 45gig1-r1s0 ; 45mez1-r0s0 ; 45mez1-r0s1 ; 45mez1-r1s0 ; 45mez1-r1s1 ; 45vim1-r0s0 ; 45vim1-r0s1 ; 45vim1-r1s0 |
commentaire 1 |
29/03/2012 |
6ABC-12032708 - 451172 - 1 |
11/04/2012 |
11/04/2012 |
0:00 |
05:00 |
info2 |
45gon1-r0e0 ; 45gon1-r0s0 |
commentaire 2 |
29/03/2012 |
6ABC-12032449 - 940671 - 1 |
11/04/2012 |
11/04/2012 |
0:00 |
05:00 |
info1 |
94bns1-i1-1 ; 94bns1-i1-2 ; 94lau1-i1-1 ; 94ldc1-i1-1 ; 94ldc1-i1-2 ; 94ldc1-i2-1 ; 94pfb1-i1-1 ; 94pfb1-i1-2 ; 94pgs1-i1-1 ; 94ph21-i1-1 ; 94plt1-i1-1 ; 94plt1-i1-2 ; 94tme1-i1-1 |
commentaire 3 |
29/03/2012 |
Le but serait d'obtenir ça :
6ABC-12032458 - 341755 - 1 |
11/04/2012 |
11/04/2012 |
13:00 |
18:00 |
info1 |
45fng1-r0s0 |
commentaire 1 |
29/03/2012 |
6ABC-12032458 - 341755 - 1 |
11/04/2012 |
11/04/2012 |
13:00 |
18:00 |
info1 |
45fng1-r1s0 |
commentaire 1 |
29/03/2012 |
6ABC-12032458 - 341755 - 1 |
11/04/2012 |
11/04/2012 |
13:00 |
18:00 |
info1 |
45gig1-r0s0 |
commentaire 1 |
29/03/2012 |
6ABC-12032458 - 341755 - 1 |
11/04/2012 |
11/04/2012 |
13:00 |
18:00 |
info1 |
45gig1-r0s1 |
commentaire 1 |
29/03/2012 |
6ABC-12032458 - 341755 - 1 |
11/04/2012 |
11/04/2012 |
13:00 |
18:00 |
info1 |
45gig1-r1s0 |
commentaire 1 |
29/03/2012 |
6ABC-12032458 - 341755 - 1 |
11/04/2012 |
11/04/2012 |
13:00 |
18:00 |
info1 |
45mez1-r0s0 |
commentaire 1 |
29/03/2012 |
6ABC-12032458 - 341755 - 1 |
11/04/2012 |
11/04/2012 |
13:00 |
18:00 |
info1 |
45mez1-r0s1 |
commentaire 1 |
29/03/2012 |
6ABC-12032458 - 341755 - 1 |
11/04/2012 |
11/04/2012 |
13:00 |
18:00 |
info1 |
45mez1-r1s0 |
commentaire 1 |
29/03/2012 |
6ABC-12032458 - 341755 - 1 |
11/04/2012 |
11/04/2012 |
13:00 |
18:00 |
info1 |
45mez1-r1s1 |
commentaire 1 |
29/03/2012 |
6ABC-12032458 - 341755 - 1 |
11/04/2012 |
11/04/2012 |
13:00 |
18:00 |
info1 |
45vim1-r0s0 |
commentaire 1 |
29/03/2012 |
6ABC-12032458 - 341755 - 1 |
11/04/2012 |
11/04/2012 |
13:00 |
18:00 |
info1 |
45vim1-r0s1 |
commentaire 1 |
29/03/2012 |
6ABC-12032458 - 341755 - 1 |
11/04/2012 |
11/04/2012 |
13:00 |
18:00 |
info1 |
45vim1-r1s0 |
commentaire 1 |
29/03/2012 |
J'ai un petit problème aussi, c'est que j'ai converti le retour a la ligne (qui se fait avec ALT + 010 dans excel) en ";" mais en réalité excel a conservé ce retour à la ligne dans le fond. Dans le champ de la cellule on ne le voit pas, mais lorsque je veux convertir les données avec comme séparateur ";" il considère qu'il n'y a que la 1ere info et efface le reste, car il voit un retour à la ligne après la 1 ère info, donc comme si le reste était une autre cellule... J'en ai marre !
J'aurais bien aimé passer le fichier test, mais je ne vois pas d'option pour joindre un fichier...
|
|
Posté le 07/06/2012 à 10:12 |
Nouvel astucien
| En fait j'ai trouvé d'où vient la conservation du retour à la ligne. Je ne sais pour quelle raison, il faut remplacer le CAR(10) et le CAR(13) qui sont 2 codes pour le retour à la ligne.
Donc avec deux fonctions substitue, ça fonctionne. Maintenant il faudrait que j'arrive à automatiser le tout avec une macro. |
|
Posté le 07/06/2012 à 10:21 |
Astucien | Bonjour,
Tu as du zapper mon fichier démo dans le dernier message C'est du tout cuit : YAPUKA adapter le N° de colonne !
Sinon pour joindre un fichier utilise cjoint et communique nous le lien en retour.
Modifié par galopin01 le 07/06/2012 10:21 |
|
Posté le 07/06/2012 à 10:56 |
Nouvel astucien
| Salut,
Ton code marche super bien
Merci beaucoup !
Ceci dit faudrait que j'arrive à comprendre, comment as tu fait dans les grandes lignes ? |
|
Posté le 07/06/2012 à 13:50 |
Astucien | Bonjour,
Le code commenté :
Sub Test() Dim iLR&, Arr$(), nCol% nCol = 5 'Colonne à convertir 'On mémorise la dernière ligne iLR = Cells(Rows.Count, 1).End(xlUp).Row 'De la dernière ligne à la première For i = iLR To 2 Step -1 'On décompose le string splité dans une variable array Arr = Split(Cells(i, nCol), Chr(10)) 'on regarde le nombre d'élément de l'array k = UBound(Arr) 's'il y a plusieurs éléments If k > 0 Then 'Pour chaque élément supplémentaire on insère une ligne vers le bas 'par Copier/Coller pour répéter les informations For kk = 1 To k Rows(i).Copy Rows(i).Insert xlUp Next 'Pour chaque ligne on remplace la cellule d'origine par son élément splité For j = 0 To k Cells(i + j, nCol) = Arr(j) Next End If 'et on réinitialise la variable de contrôle de l'array pour la ligne précédente k = 0 Next End Sub
|
|