> Tous les forums > Forum Bureautique
 macro excel pour convertir donnéesSujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
Math_lyon
  Posté le 06/06/2012 @ 15:45 
Aller en bas de la page 
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

Publicité
galopin01
 Posté le 06/06/2012 à 16:16 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  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

Math_lyon
 Posté le 06/06/2012 à 16:31 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
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.

Math_lyon
 Posté le 06/06/2012 à 16:51 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
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... )

galopin01
 Posté le 06/06/2012 à 17:28 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  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 ...

galopin01
 Posté le 06/06/2012 à 19:06 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Un fichier démo

Math_lyon
 Posté le 07/06/2012 à 09:48 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
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...

Math_lyon
 Posté le 07/06/2012 à 10:12 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
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.

galopin01
 Posté le 07/06/2012 à 10:21 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  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
Math_lyon
 Posté le 07/06/2012 à 10:56 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
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 ?

galopin01
 Posté le 07/06/2012 à 13:50 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  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

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour participer à la discussion.
Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !
Recevoir PC Astuces par e-mail


La Lettre quotidienne +226 000 inscrits
Avec l'actu, des logiciels, des applis, des astuces, des bons plans, ...

Les bonnes affaires
Une fois par semaine, un récap des meilleurs offres.

Les fonds d'écran
De jolies photos pour personnaliser votre bureau. Une fois par semaine.

Les nouveaux Bons Plans
Des notifications pour ne pas rater les bons plans publiés sur le site.

Les bons plans du moment PC Astuces

Tous les Bons Plans
Souris gamer Logitech G502 Hero à 38,99 €
39,99 € 50 € -20%
@Amazon
SSD WD Black SN770 2 To (PCIe Gen4, NMVe M.2, 5150 Mo/s) à 114 €
114 € 130 € -12%
@Cdiscount
SSD Kingston FURY Renegade 1 To (PCIe 4.0, NVME M.2, dissipateur, 7300 Mo/s) à 85,46 €
85,46 € 99 € -14%
@Cdiscount
Coffret Tivoly extracteurs de vis et goujon cassés à 14,63 €
14,63 € 30 € -51%
@Amazon
Clavier sans-fil bluetooth Logitech MX Keys S à 89 €
89 € 109 € -18%
@Boulanger
15 € de réduction dès 129 € d'achat sur tout Cdiscount
-15 € -1 -18%
@Cdiscount

Sujets relatifs
macro excel pour convertir données d'un txt
Excel : macro pour récupérer ttes les données ?
macro excel pour stockage de données
Creation d' une boucle macro dans fichier EXCEL pour impression
Macro pour ouverture d'un fichier Excel
Macro pour créer un Gencode sur Excel - EAN 18
Macro Excel compilations données et export pdf
Macro pour un envoi feuille excel par mail
Macro excel pour enregistrer
EXCEL RECHERCHEV pour autre fichier. Macro?
Plus de sujets relatifs à macro excel pour convertir données
 > Tous les forums > Forum Bureautique