× Aidez la recherche contre le COVID-19 avec votre ordi ! Rejoignez l'équipe PC Astuces Folding@home
 > 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
Publicité
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 poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Les bons plans du moment PC Astuces

Tous les Bons Plans
299,95 €Ecran 31,5 pouces LG Ultragear 32GK650F-B (QHD, 144 Hz) à 299,95 €
Valable jusqu'au 31 Octobre

LDLC fait une promotion sur l'écran LG 31,5 pouces LG Ultragear 32GK650F-B qui passe à 299,95 € au lieu de 349 € ailleurs. Cet écran possède une dalle 31,5 pouces QHD (2560x1440) à 144 Hz, un temps de réponse de 5 ms. Il est compatible FreeSync.


> Voir l'offre
104,71 €Alimentation Seasonic Focus Plus Gold 650W (garantie 10 ans) à 104,71 € livré
Valable jusqu'au 22 Octobre

Amazon Allemagne fait une promotion sur l'alimentation Seasonic Focus Plus Gold 650W qui passe à 96,11 €. Comptez 8,60 € pour la livraison en France soit un total de 104,71 € livré alors qu'on la trouve ailleurs à partir de 139 €. Le niveau frise la perfection avec une magnifique certification 80+ OR et un câblage full modulaire, le tout dans un silence de cathédrale. L'alimentation est garantie 10 ans.

Vous pouvez utiliser votre compte Amazon France sur Amazon Allemagne et qu'il n'y a pas de douane. Si vous êtes perdu en allemand, vous pouvez traduire le site en anglais.


> Voir l'offre
58,99 €Kit de 16 Go (2 x 8 Go) de mémoire DDR4 Crucial Ballistix 3000 MHz à 58,99 €
Valable jusqu'au 23 Octobre

Amazon fait une promotion sur le kit de 16 Go (2x8 Go) de mémoire DDR4 Crucial Ballistix 3000 MT/s CL15 qui passe à 58,99 € livré gratuitement alors qu'on le trouve ailleurs à partir de 82 €.


> Voir l'offre

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