problème format cellule - VB/VBA/VBS - Programmation
Marsh Posté le 04-02-2013 à 12:36:51
Bonjour ! Normalement il est possible d'ouvrir directement un .csv sans devoir passer par .TextToColumns,
voir l'aide de Workbooks.Open ou via l'enregistreur de macros en ouvrant manuellement le fichier …
Si cela ne résoud pas ton problème, il faudra envisager soit de faire modifier le .csv source,
soit de mettre la colonne en texte au lieu de numérique, soit de programmer autre chose …
Marsh Posté le 04-02-2013 à 12:49:24
Tout d'abord merci de m'avoir répondu
En fait, Classeur permet à l'utilisateur de sélectionner le fichier csv qu'il veut ouvrir grace à une macro dans le workbook_Open. le but est d'ouvrir un fichier qui automatise l'enregistrement d'un fichier csv en xls. Donc j'ai une fonction qui permet à l'utilisateur de choisir le fichier à ouvrir
Marsh Posté le 04-02-2013 à 12:57:53
pour télécharger les 2 fichiers : http://www.terafiles.net/v-186014.html
En fait, ce n'est pas toujours le même fichier qui est ouvert, donc l'utilisateur doit pouvoir choisir celui qu'il veut.
Marsh Posté le 04-02-2013 à 13:09:43
Le problème est à la ligne 9 de TOP50TP.csv
Le programme principal est dans le ThisWorkbook (Workbook_Open() )
Les fonctions sont dans le module
Marsh Posté le 04-02-2013 à 13:38:12
J'ai essayé ça, mais ça ne marche pas ...
Code :
|
Marsh Posté le 04-02-2013 à 14:21:25
Pour transformer manuellement la cellule 1,93E+15 en 1930000000000000,
il suffit juste d'insérer comme premier caractère ' (l'apostrophe) …
Y-en-a beaucoup des comme cela ?
Marsh Posté le 04-02-2013 à 14:24:53
Ben en fait, on m'a donné deux rapport de ce type, et il n'y a qu'une seule erreur de ce type.
Mais le truc, c'est que je dois transformer la cellule avant de trier en colonne... donc comment faire pour retrouver l'occurrence? parce que le code que j'ai marqué ci-dessus ne fonctionne pas, donc il chercher mais ne trouve pas l'occurrence (vu qu'il ne me met pas d'erreur)
Marsh Posté le 04-02-2013 à 14:28:40
Une solution serait de faire une recherche sur "E+", non ? (voir Find)
Sinon je regarde 2 possibilités pour un "contrôle" dès l'ouverture, à suivre …
Marsh Posté le 04-02-2013 à 14:29:17
si je ne modifie pas la cellule avant de modifier la mise en page (mettre en colonne), il me supprime une grosse partie de la ligne, comme vous pouvez le voir grâce à l'url du fichier.zip
Marsh Posté le 04-02-2013 à 14:31:15
j'ai mis en commentaire la modification de la mise en page pour que vous puissiez voir la tête du fichier quand ma macro l'ouvre. Vous pouvez enlevez ces commentaires dans la fonction separerColonne dans le module
Marsh Posté le 04-02-2013 à 14:33:13
Ben la recherche sur le E+, je l'ai faite avec un LIKE
Code :
|
mais comme vous pouvez le voir, ma cellule est scindée : le 1 est dans la cellule A9, et le reste dans B9...
Marsh Posté le 04-02-2013 à 15:01:54
Salut, j'ai pas accès à ton fichier (proxytaf) donc je ne pourrai t'aider de manière complète que ce soir.
En attendant, si tu n'utilises pas .Find, tu peux utiliser:
VBA.InStr(Start [l'index auquel tu commences à chercher la valeur], String1 [la chaîne dans laquelle tu cherches], String 2 [la chaîne que tu cherches dans ton String 1])
Code :
|
Par contre pour Like, si je ne m'abuse, ça ne prend pas en compte les *.
Marsh Posté le 04-02-2013 à 15:05:02
non je viens d'essayer, mais il ne me trouve pas ma valeur...
Marsh Posté le 04-02-2013 à 15:07:49
Si tu fais un Debug.Print de Cell.Value avant ton If il t'affiche bien la bonne valeur de la bonne cellule?
Marsh Posté le 04-02-2013 à 15:18:00
J'ai presque fini ... Cette histoire de format ne peut se trouver que dans la 3ème colonne ou pas ?
Marsh Posté le 04-02-2013 à 15:45:11
Tu as la fenêtre Immediate? (en VO)
Sinon CTRL+G pour l'afficher depuis l'éditeur, ça te permet de tester des lignes de codes et d'afficher le résultat des debug.print
Marsh Posté le 04-02-2013 à 15:51:55
Fais CTRL+G depuis l'éditeur VBA, si tu l'as pas d'ouverte ça va l'ouvrir, si elle est ouverte ça t’amèneras dedans.
Mets dedans
Toto = "lalala"
Debug.Print Toto
C'est très pratique pour tester des trucs!
Marsh Posté le 04-02-2013 à 15:56:25
ReplyMarsh Posté le 04-02-2013 à 15:57:58
ReplyMarsh Posté le 04-02-2013 à 15:58:30
il me met ça dans le ctrl+G :
I;QRH;1;"93E+15;0.01;0.00701"
alors que ça devrait être :
I;QRH;1,93E+15;0.01;0.00701
Marsh Posté le 04-02-2013 à 15:59:31
du coup, il me sépare le 1 du 93E+15, alors que c'est une seule valeur. Valeur qui soit dit en passant, devra être sous format texte : 1930000000000000
Marsh Posté le 04-02-2013 à 16:36:26
Voici l'une des 2 solutions :
Code :
|
Il y a juste à adapter la ligne n°3 pour l'ouverture du fichier …
Marsh Posté le 04-02-2013 à 16:39:09
Je suis désolée, mais je ne comprends rien à ton code ...
Pourrais-tu me le détailler un peu? qu'est-ce que le split? #N? à quoi correspondent tes variables?...
Marsh Posté le 04-02-2013 à 16:50:32
Ce code fonctionne bien chez moi avec le fichier test ‼ En dehors de Split, je n'ai utilisé que le B-A-BA du BASIC …
Là je suis occupé, commencer par regarder l'aide VBA de Split, Open for, etc … débroussaillerait les interrogations.
Ensuite s'il reste des zones d'ombres, je répondrai volontiers - plus tard - aux points particuliers …
Marsh Posté le 04-02-2013 à 16:57:53
le 1 et le 93E+15 sont toujours, séparés... mais j'ai toutes les données
Marsh Posté le 04-02-2013 à 17:04:54
Pas chez moi ‼ Dans mon test, je suis parti d'une feuille vierge, donc chaque cellule est en format standard …
Quelle version d'Excel ? (Moi c'est la 2003, parfois j'ai accès à une version 2007)
Marsh Posté le 05-02-2013 à 09:55:07
De toute manière, s'il n'y a pas de message d'erreur à la compilation …
Edit : mon séparateur décimal dans Excel est la virgule.
Ne voyant rien de spécifique à la version 2003 mais ne me rappelant plus des soucis de la version 2002,
voici la deuxième solution :
Code :
|
Comme dans la première version, il y a juste à adapter la ligne n°3 pour l'ouverture du fichier …
Edit : modification de la ligne n°19 pour blinder au cas où …
Marsh Posté le 05-02-2013 à 10:51:29
oki merci celui là à l'air de fonctionner je vous tiens au courant!
Marsh Posté le 05-02-2013 à 10:57:46
alors il marche parfaitement sur le fichier que j'ai mis en lien, je n'ai plus qu'à l'adapter pour mon vrai fichier
Marsh Posté le 05-02-2013 à 11:05:07
En dehors d'un souci de séparateur décimal, dans la première version la ligne n°30 force Excel
à réinterpréter la cellule, ce qu'il fait au passage en modifiant son affichage en format scientifique.
Peut-être que la 2002 n'est pas dotée de cette IA, vérification facile en mettant un point d'arrêt sur la ligne n°31 …
Bien que le code de la deuxième version soit plus long, ce dernier est plus performant dans le cas de gros fichiers car
c'est plus rapide de traiter en amont un tableau en mémoire que de scanner des cellules d'une feuille de calcul d'Excel !
Lorsqu'il n'y a pas le choix, l'alternative plus rapide est d'utiliser la méthode Find juste sur la plage de cellules à vérifier …
Marsh Posté le 04-02-2013 à 10:23:30
Bonjour,
C'est un peu compliqué, donc désolée si c'est mal expliqué et n'hésitez pas à poser des questions, je vais essayer de faire au mieux.
J'ai :
- un fichier excel : Classeur1.xls
- un fichier csv : Top50.csv
dans mon Classeur1, j'ai une macro qui me permet d'ouvrir (après sélection du fichier) Top50.csv.
Lorqu'on ouvre Top50.csv normalement, les données sont séparées dans des colonnes distinctes.
Lorsque je l'ouvre à l'aide de Classeur1.xls, les données sont séparées par des ";", et non triées dans des colonnes.
Mais là n'est pas le problème. J'ai enregistré une macro pour remettre ces données dans des colonnes, et elle fonctionne habituellement (elle marche avec d'autres fichiers csv).
Mais dans Top50.csv, il y a une valeur qui est sous format numérique au lieu de texte :
c'est 1 930 000 000 000 000, qui apparait sous la forme de 1,93E+15
Cette valeur devrait être "1930000000000000" sous format texte, et non sous format numérique... Du coup, lorsque je convertis les données afin de les trier dans des colonnes, il me supprime une grosse partie de la ligne qui contient cette donnée, et remplace 1,93E+15 par 1...
Je ne vois pas vraiment ce que je peux faire...
Voici le code pour mettre les données en colonne :
merci à ceux qui me répondront