> 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
Carte mémoire Samsung 512 Go MicroSDXC Evo Select U3 (130 Mo/s) à 48,54 € livrée
48,54 € 75 € -35% @Amazon Allemagne
Clé USB Sandisk Dual Drive 256 Go à double connectique USB 3.1 Type A et C à 16,04 €
28,56 € 40 € -29% @Amazon
Enceinte sans fil bluetooth rechargeable JBL Flip 6 à 103,07 € livrée
103,07 € 120 € -14% @Amazon Espagne
Clé USB 3.1 Type C Sandisk Ultra 256 Go à 27,94 € livrée
27,94 € 49 € -43% @Amazon Allemagne
SSD Interne M.2 NVMe PCIe 4.0 Samsung 980 PRO 2 To (7000 Mo/s) à 201,25 € livré
201,25 € 250 € -20% @Amazon Allemagne
Coffret de 15 fraises à bois Bosch (queue de 8 mm) à 53,19 €
53,19 € 69,99 € -24% @Amazon
Jeu PC Dishonored : La mort de l'Outsider gratuit
Gratuit @Epic Games
Coffret 6 scies trépans HSS Bimétal (20/25/35/40/51/68 mm) à 52,65 €
52,65 € 63 € -16% @Amazon
Montre connectée Amazfit GTS à 56,49 €
56,49 € 89,99 € -37% @Amazon
Clé HDMI Fire TV Stick (Prime Video, Netflix, Disney+, Molotov, MyCanal sur votre TV) à 24,99 €
24,99 € 39,99 € -38% @Amazon

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