Momone21
Messages postés23Date d'inscriptiondimanche 17 avril 2005StatutMembreDernière intervention 4 décembre 2006
-
22 nov. 2006 à 00:57
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 2015
-
22 nov. 2006 à 15:37
bonjour
j'ai un problème avec mon code, quand je clique sur valider toutes mes
texbox s'enregistre dans un fichier texte mais j'aimerai que mes texbox
s'incrive l'une après l'autre avec comme séparation ";"
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 22 nov. 2006 à 15:37
Re
Le vbCrLf va dans sSéparateur8 puisque c'est la dernière donnée de la fiche. (et pas deux fois ; comme tu l'as fait)
Pour les espaces, tu n'as pas le choix, c'est le format du fichier séquentiel qui veut ça.
Je vois deux solutions :
- Triturage avant l'import Excel :
Suffit de remplacer les doubles espaces par des simples dans tout le fichier (soit avec un petit programme en VB soit avec des utilitaires comme "RemplaceVite"
Attention : dans ce cas, le fichier ne sera plus relisible par ton appli VB puisque tu changes la structure des données
Donc, il vaudra mieux en faire une copie et travailler sur la copie.
- Triturage après l'import Excel
Genre : Edition, Remplacer, double-espace par simple-espace et le répéter tant qu'il y a des substitutions.
Tu peux aussi enregistrer cette manip sous une macro que tu lanceras après l'importation.
Mais reflechis à ton projet :
D'après ce que j'ai compris, tu as créé une appli VB pour la saisie et tu veux pouvoir lire les données sous Excel.
Donc, il faut que ton fichier "source" reste intact et ce n'est (à mon avis) pas lui qu'il faut fournir à Excel.
Pourquoi ne pas créer une routine "Export des données pour Excel" dans ton appli ?
Il te suffira de relire chaque fiche de ton fichier "source" et d'écrire les données épurées dans un autre fichier, compatible avec Excel.
Pour info : Si tu déclares une chaine "As String * 10", les fonctions Trim, LTrim ou RTrim ne fonctionneront pas car, de toute façon, la chaine doit avoir 10 caractères. Il faut donc transférer chaque item dans une autre chaine "As String" simple avant de pouvoir travailler sur sa longueur.
Dernière recommandation :
Tout ceci ne fonctionnera pas si le caractère ; apparait dans un de tes champs !
Alors, si tu crées une moulinette, n'oublie de mettre entre " les données des champs qui contiennent le symbole ; et qui fausseraient l'importation sous Excel (décalage de cellules)
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Champion du monde de boule de cristal - 2005 Le savoir est la seule matière qui s'accroit quand on
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 22 nov. 2006 à 03:24
Salut
En fait, tu as choisi d'utiliser un fichier à acces séquentiel.
C'est pratique car tu peux accéder directement à une fiche en précisant son numéro, mais pas très économique en taille puisque, même si un champ est vide, il représentera quand même une zône d'espaces sur le disque.
Les données sont donc formatées dans le fichier : chaque donnée à une longueur fixe, donc chaque enregistrement aussi.
Si tu veux récupérer tes données avec un séparateur, il faut que tu prépares une moulinette qui lira chaque fiche et enregistrera les champs qui la compose avec ce séparateur. C'est assez facile à faire et le traitement devrait être rapide.
Mais ça veut dire qu'il faudra que tu lances ce 'traducteur' à chaque fois que tu voudras remonter ces données sur Excel (c'est ma boule de cristal qui me l'a dit)
Une autre solution peut consister à modifier la structure de ta fiche (on verra après les problèmes) :
Tous les champs qui composent ta fiche sont de type String
En insérant un champ bidon de 1 caractère entre chaque champ, tu pourras y faire apparaitre ton symbole ';'
Exemple :
Type ContactStruc
strSex As String * 10
sSéparateur1 As String * 1
strNom As String * 20
sSéparateur2 As String * 1
strPrenom As String * 20
sSéparateur3 As String * 1
strTel As String * 15
sSéparateur4 As String * 1
strMail As String * 25
sSéparateur5 As String * 1
strService As String * 40
sSéparateur6 As String * 1
strSurnom As String * 300
sSéparateur7 As String * 1
strVisuel As String * 40
sSéparateur8 As String * 2
End Type
Il te suffit de vérifier que, à chaque fois, chaque sSéparateur contient bien un ';'
Pour le dernier sSéparateur8, il devra faire 2 octets car, en fin de fiche, je pense que tu voudras insérer un retour à la ligne vbCrLf.
Maintenant, le problème :
Si ton fichier contient déjà des données, tu ne pourras pas le relire avec cette nouvelle structure car on y a ajouté des caractères. Les fiches se trouveraient toutes décalées.
Deux solutions :
- Soit tu crées un petit programme rapide qui relit le fichier avec l'ancien format et qui réécrit un nouveau fichier avec le nouveau format (moulinette rapide à faire)
- Soit tu retires 1 caractère à chaque champ qui précède les séparateurs (2 pour le dernier)
Exemple :
Type ContactStruc
strSex As String * 9
sSéparateur1 As String * 1
strNom As String * 19
sSéparateur2 As String * 1
. . .
sSéparateur7 As String * 1
strVisuel As String * 38
sSéparateur8 As String * 2
End Type
Bien sûr, l'inconvénient c'est que tes données risquent d'être altérées (puisque tu vas emputer chaque champ)
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Champion du monde de boule de cristal - 2005 Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)