Macro pour importer et formater et enregistrer fichier .csv

fredh

XLDnaute Occasionnel
Bonjour a tous.

Voila j'ai un logiciel qui m'extrait des valeurs depuis une base de données, ces valeurs sont stocké dans un fichier CSV.

Donc quand j'ouvre mon fichier CSV, j'ai mes valeur en A1, B1, C1 etc separé par des ; . Je convertit donc la colonne A:A avec le menu Données, Convertir.
Seulement voila si je convertit tout alors j'obtient 277 colonne et excel me dit qu'il ne peut pas ouvrir toutes les colonnes et que les dernieres seront perdue....
Excel jusqu'a la versions 2003 ne peut avoir que 255 colonne et 65000 lignes...
Dans le menu convertir je peut choisir une colonne et cocher la case "colonne non destribué" afin de ne pas inclure cette colonne.
Donc a la fin je me retrouvent avec moins de 255 colonnes car il y a des colonnes "pleines" mais que je ne veut pas !

J'ai crée une macros avec l'enregistreur pour convertir le format CSV en format XLS et "suprimez" des colonnes inutilent.
1er probleme : ma ligne de la macros pour convertir est trop longue et je ne peut donc pas formater corectement.

Voici ma ligne :
Code:
   Columns("A:A").Select
    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
        Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
        :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
        Array(7, 9), Array(8, 9), Array(9, 1), Array(10, 9), Array(11, 9), Array(12, 9), Array(13, 1 _
        ), Array(14, 1), Array(15, 1), Array(16, 9), Array(17, 9), Array(18, 1), Array(19, 1), Array _
        (20, 1), Array(21, 9), Array(22, 9), Array(23, 1), Array(24, 1), Array(25, 1), Array(26, 9), _
        Array(27, 9), Array(28, 1), Array(29, 1), Array(30, 1), Array(31, 9), Array(32, 9), Array( _
        33, 1), Array(34, 1), Array(35, 1), Array(36, 9), Array(37, 9), Array(38, 9), Array(39, 1), _
        Array(40, 9), Array(41, 9), Array(42, 9), Array(43, 1), Array(44, 1), Array(45, 1), Array( _
        46, 1), Array(47, 1), Array(48, 1), Array(49, 1), Array(50, 1), Array(51, 1), Array(52, 1), _
        Array(53, 1), Array(54, 1), Array(55, 1), Array(56, 1), Array(57, 1), Array(58, 1), Array( _
        59, 1), Array(60, 1), Array(61, 1), Array(62, 1), Array(63, 1), Array(64, 1), Array(65, 1), _
        Array(66, 1), Array(67, 1), Array(68, 1), Array(69, 1), Array(70, 1), Array(71, 1), Array( _
        72, 1), Array(73, 1), Array(74, 1), Array(75, 1), Array(76, 1), Array(77, 1), Array(78, 1), _
        Array(79, 1), Array(80, 1), Array(81, 1), Array(82, 1), Array(83, 1), Array(84, 1), Array( _
        85, 1), Array(86, 1), Array(87, 1), Array(88, 1), Array(89, 1), Array(90, 1), Array(91, 1), _
        Array(92, 1), Array(93, 1), Array(94, 1), Array(95, 1), Array(96, 1), Array(97, 1), Array( _
        98, 1), Array(99, 1), Array(100, 1), Array(101, 1), Array(102, 1), Array(103, 1), Array(104 _
        , 1), Array(105, 1), Array(106, 1), Array(107, 1), Array(108, 1), Array(109, 1), Array(110, _
        1), Array(111, 1), Array(112, 1), Array(113, 1), Array(114, 1), Array(115, 1), Array(116, 1 _
        ), Array(117, 1), Array(118, 1), Array(119, 1), Array(120, 1), Array(121, 1), Array(122, 1) _
        , Array(123, 1), Array(124, 1), Array(125, 1), Array(126, 1), Array(127, 1), Array(128, 1), _
        Array(129, 1), Array(130, 1), Array(131, 1), Array(132, 1), Array(133, 1), Array(134, 1))

Il faudrait que je rajoute encore des "Array". Existe t il un autre moyens d'écrire cela ?


2em probleme la macros ne tient compte que de la 1er ligne du fichier...



Autre direction de recherche : macros pour "splitter" A1 et ne pas "splitter" le champ x, y et z
quelque chose du genre :
Code:
For n = 2 To Range("A65536").End(xlUp).Row
Code:
[COLOR=blue]   t = Split(Range("A" & n), ";")[/COLOR]
[COLOR=blue]   Range("A" & ligne) = t(0)[/COLOR]
[COLOR=blue]   Range("B" & ligne) = t(1)[/COLOR]
[COLOR=blue]   Range("C" & ligne) = t(2)[/COLOR]
[COLOR=blue]   ligne = ligne + 1[/COLOR]
[COLOR=blue]Next n[/COLOR]

Voila j'espere que quelqu'un pourras m'aider.

Merci et @+
 

Pièces jointes

  • test2.zip
    2 KB · Affichages: 48
  • test2.zip
    2 KB · Affichages: 48
  • test2.zip
    2 KB · Affichages: 49
Dernière édition:

fredh

XLDnaute Occasionnel
Re : Macro pour importer et formater et enregistrer fichier .csv

Bon apparement les colonnes que l'on garde sont ecrit Array(num de colonne, 1). celle que l'on supriment sont ecrit Array(num de colonne, 9).

Comment reduire l'ecriture afin de "formater" les colonnes en une seule fois ?
 
Dernière édition:

LPandre

XLDnaute Impliqué
Re : Macro pour importer et formater et enregistrer fichier .csv

Bonjour, voici une petite macro qui devrait supproimer tes colonnes vides.
Pour le reste ...


Sub Macro_colonne()

Dim vDerniereColonne As Long
Dim vcolonne As Long
vDerniereColonne = ActiveSheet.UsedRange.Columns.Count
For vcolonne = vDerniereColonne To 1 Step -1
If Application.CountA(Columns(vcolonne)) = 0 Then Columns(vcolonne).Delete
Next

End Sub
 

fredh

XLDnaute Occasionnel
Re : Macro pour importer et formater et enregistrer fichier .csv

Bonjour LPandre

Merci de repondre et merci pour la macros.
Je vais pouvoir l'utiliser pour autre chose. En effet je n'ai pas de colonnes vide mais trop de colonne par rapport a excel.
Je ne cherche donc pas a suprimez des colonnes vide mais a ne pas selectionné des colonnes "pleines".


Edit du 1er poste pour une meilleure comprehension du problemes
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 103
Messages
2 085 317
Membres
102 862
dernier inscrit
Emma35400