Problème d'importation de CSV

siocnarf

XLDnaute Occasionnel
Bonjour,

J'ai un csv de 90 000 lignes et je souhaite l'importer dans Excel 2007. Jusque là, il n'y a pas trop de souci.

Mon problème est que j'ai des inscriptions dans la première colonne tel que suit:
Adobe Acrobat 9 Pro - English, Français, Deutsch

Or l'importation fait que la séparation avec des virgules coupe le produit en 3 colonnes. Auparavant, j'avais évalué qu'avec un txt et des tabulations entre les colonnes mon problème était réglé. Je ne peux plus effectuer d'exportation avec un séparateur en tabulation.

Sur 90000 lignes, j'ai peut-être 300 lines qui sont problématiques.

1. Y-a-t-il un moyen d'empêcher que ces lignes soient coupé?
2. Comment par programmation, je pourrais tester ces lignes et les corriger.

Le principe serait de passer sur les lignes qui ont de l'information en colonne H (laq colonne H est normalement vide), fusionner La colonne A, B et C en mettant une virgule entre chaque mot et décaler les colonne D,E,F,G,H en colonne B,C,D,E,F.
Mais cela peut être long sur 90K lines.

Comment je devrais procéder? Y-a-t-il une autre alternative?

Merci,

François
 

Pièces jointes

  • test.xls
    94.5 KB · Affichages: 40
  • test.xls
    94.5 KB · Affichages: 45
  • test.xls
    94.5 KB · Affichages: 45

pierrejean

XLDnaute Barbatruc
Re : Problème d'importation de CSV

Bonjour François

Teste cette macro

Code:
Sub test()
tablo = Range("A1:C" & Range("A" & Rows.Count).End(xlUp).Row)
ReDim tabres(1 To UBound(tablo, 1), 0)
For n = LBound(tablo, 1) To UBound(tablo, 1)
 tabres(n, 0) = tablo(n, 1)
 If tablo(n, 2) <> "" Then tabres(n, 0) = tabres(n, 0) & "," & tablo(n, 2)
 If tablo(n, 3) <> "" Then tabres(n, 0) = tabres(n, 0) & "," & tablo(n, 3)
Next
Range("C1").Resize(UBound(tabres)).Value = tabres
End Sub
 

siocnarf

XLDnaute Occasionnel
Re : Problème d'importation de CSV

Bonjour François

Teste cette macro

Code:
Sub test()
tablo = Range("A1:C" & Range("A" & Rows.Count).End(xlUp).Row)
ReDim tabres(1 To UBound(tablo, 1), 0)
For n = LBound(tablo, 1) To UBound(tablo, 1)
 tabres(n, 0) = tablo(n, 1)
 If tablo(n, 2) <> "" Then tabres(n, 0) = tabres(n, 0) & "," & tablo(n, 2)
 If tablo(n, 3) <> "" Then tabres(n, 0) = tabres(n, 0) & "," & tablo(n, 3)
Next
Range("C1").Resize(UBound(tabres)).Value = tabres
End Sub

Ça semble bien et ça mérite certainement d'être testé. Donc cette loop va vérifier les 90 000 lignes. Est-ce que ce ne sera pas un peu long?
L'idée n'est pas de supprimer les colonnes mais de tasser les colonnes décaler afin que celles-ci prennent leurs place en colonne B et ¨+. Actuellement en se fractionnant, la colonne A occupe également les colonnes B voire C ce qui décale les informations vers la droite.

Je vais y jeter un coup d'oeil demain car la journée avance.

Merci,
 

siocnarf

XLDnaute Occasionnel
Re : Problème d'importation de CSV

Bonjour,

Je ne pouvais pas attendre... J'ai retravaillé le code légèrement. Ce qui est important pour savoir de combien de colonne on dépasse est de regarder les colonnes de fin. En temps normal, il devrait y avoir des inforrmations en colonnes 2 et 3 (B et C) car on décale les données vers la droite. Ce code ramène la colonne A correctement mais comment devrais-je m'y prendre pour les autres colonnes et les ramener en colonne B et + ou C et + selon le cas?


Code:
Sub test()
tablo = Range("A1:H" & Range("A" & Rows.Count).End(xlUp).Row)
ReDim tabres(1 To UBound(tablo, 1), 0)
For n = LBound(tablo, 1) To UBound(tablo, 1)
 tabres(n, 0) = tablo(n, 1)
 If tablo(n, 7) <> "" Then
 
    tabres(n, 0) = tabres(n, 0) & "," & tablo(n, 2)
    If tablo(n, 8) <> "" Then tabres(n, 0) = tabres(n, 0) & "," & tablo(n, 3)
    
 End If
Next
Range("A1").Resize(UBound(tabres)).Value = tabres
End Sub
 

siocnarf

XLDnaute Occasionnel
Re : Problème d'importation de CSV

Bonjour,

Je croyais que la pièce jointe expliquait correctement le problème.

Je vais refaire un test.

Dans certain cas, mon importation d'un CSV contient des virgules dans la colonne A ce qui fait que la colonne A est répartie sur plusieurs colonnes consécutives.

Dans ces colonnes, il peut y avoir des données normalement. Comme je le disais, il y a 90 000 lignes.

Lorsque la colonne A est séparé sur plusieurs colonnes, cela provoque un décalage des colonnes et des valeurs vont donc se retrouver là où il n'y a normalement pas de valeurs. Ma constatation est que cela peut décaler d'une ou deux colonnes.

Le code valide ce décalage et consolide la valeur de la colonne A. Cet aspect de consolidation fonctionne correctement. Maintenant, il faut ramener les colonnes décaler à leurs positions attendues. Ainsi, si la colonne A a été séparée sur les colonne A, B et C et que l'on consolide la colonne A, il faut ramener les colonnes D et plus vers les colonnes B, C, D,..

Merci,

François
 

chris

XLDnaute Barbatruc
Re : Problème d'importation de CSV

Bonjour
Bise à pierrejean :)

Et si déjà tu utilisais l'import contrôlé soit en modifiant l'extension CSV en TXT (le CSV ne marche correctement que pour les anglo-saxons utilisant le norme US) ou en utilisant Données externes, quitte à rompre ensuite la liaison que cela crée.
 

mutzik

XLDnaute Barbatruc
Re : Problème d'importation de CSV

bonjour

pourquoi ne pas importer le fichier brut dans la col A
données / convertir et utiliser le tiret comme séparateur
ensuite tu convertis la colonne contenant les virgules avec le séparateur virgule
 

siocnarf

XLDnaute Occasionnel
Re : Problème d'importation de CSV

Bonjour
Bise à pierrejean :)

Et si déjà tu utilisais l'import contrôlé soit en modifiant l'extension CSV en TXT (le CSV ne marche correctement que pour les anglo-saxons utilisant le norme US) ou en utilisant Données externes, quitte à rompre ensuite la liaison que cela crée.

Vous avez raison que les CSV ne fonctionne pas bien pour nous. En quoi le renommer en txt serait-il différent car, Excel demandera un séparateur?

En quoi utiliser les données externes seraient-ils différents de simplement ouvrir le fichier? Ouvrir un csv par données externe ou un txt?
 

chris

XLDnaute Barbatruc
Re : Problème d'importation de CSV

RE

Avec un txt en ouverture ou en données externes, on peut non seulement
  • préciser le séparateur mais ne pas prendre les 1ères lignes,
  • typer colonne par colonne les données et ainsi ne pas perdre les zéros non significatifs de codes postaux ou autres numéros,
  • remettre si nécessaire les dates à l'endroit,
  • repréciser le séparateur décimal et le séparateur de milliers reçus afin de ne pas avoir à bidouiller un import mal passé.

Ce que tu ne précises pas c'est le séparateur reçu.
 

siocnarf

XLDnaute Occasionnel
Re : Problème d'importation de CSV

Bonjour,

Je ne suis pas certain de comprendre le terme "séparateur reçu".

Mon problème est que dans la colonne A, il y a un certain nombre de valeurs qui utilisent une virgule dans le nom. Cela a pour effet de décaler des valeurs en csv car le séparateur est la virgule par défaut. La liste que tu énumères est bien mais ces manipulations peuvent être faites avec un csv. À moins qu'il ne gère un csv différemment d'un txt...
 

chris

XLDnaute Barbatruc
Re : Problème d'importation de CSV

Bonjour

Quand tu ouvres un CSV aucune fenêtre ne s'affiche pour te permettre de contrôler l'import de données.

Le séparateur est le caractère qui sépare les colonnes de données dans le fichier texte. Si je comprends bien tu as des ,

Tu indiques que tu ne peux plus utiliser la tabulation. Les systèmes d'export prévoient souvent 2 choix : le séparateur et l'encadrement des données non numériques par des simples ou doubles guillemets. Le choix soit d'un ; comme séparateur soit l’encadrement des chaînes permettrait de résoudre ton souci.

En combinant le bon choix pour l'export et en contrôlant l'import pour que cela soit cohérent, on règle le problème dans la majorité des cas.
 

Membres actuellement en ligne

Statistiques des forums

Discussions
312 493
Messages
2 088 956
Membres
103 990
dernier inscrit
lamiadebz