Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Access > VBA Access

VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.

Réponse
 
Outils de la discussion
Vieux 04/09/2008, 17h43   #1 (permalink)
Invité de passage
 
Date d'inscription: juillet 2008
Messages: 7
Par défaut Import des données depuis un fichier texte sans délimiteur et gestion des zones vides

bonjour, je travailles à la mise en place d'un Back Up Service avec des fichiers d'entré txt sans délimitateur.
l'explication sur le lien suivant fonctionne parfaitement.
http://access.developpez.com/sources...#FichierDirect

le problème est que lorsqu'il manque une donnée dans le fichier source cela plante.

Est il possible de remplacer une valeur nulle ou manquante par une donnée type comptatible dans le code et d'aller ensuite chercher cette données temporaire pour la mettre en anomalie.

ci dessous le contenu de lien.


Importer des données depuis un fichier texte qui ne possède pas de délimiteur
[haut]


Cet exemple de code permet d'importer des données depuis un fichier texte. La caractéristique de ce fichier texte est que les enregistrements sont mis les uns à la suite des autres sans séparateur. Nous ne connaissons que la taille des différents champs.

Un exemple de fichier texte :

0001WARIN Christophe0002BALTAZARD Marie
0004DUPONT Jacques 0005PIERRE Louis 0006HUGUES Hugo
0007PARQ Patrice
Pour importer un tel fichier, nous allons créer une table correspondante avec les mêmes champs, à savoir :

• Un champ Numero de type entier.
• Un champ Nom de type texte.
• Un champ Prénom de type texte

Puis dans un module, nous allons créer un type Enregistrement qui correspondra à une occurence dans notre fichier texte.
Private Type enregistrement
Num As String * 4 'Numero sur 4 caractères
Nom As String * 10 'Nom sur 10 caractères
Prenom As String * 10 'prenom sur 10 caractères
End Type
Puis une procédure pour lire le fichier en accés direct :
Public Sub lireFichier(chemin As String)
On Error GoTo err
Dim Fichier As Integer, numenr As Long
Dim Client As enregistrement
Dim NbErreur As Long
Dim Stopper as boolean
stopper = False
'recupere un numero de fichier libre
Fichier = FreeFile
'Ouvre le fichier
Open chemin For Random As Fichier Len = Len(Client)
numenr = 1
'parcours le fichier
While Not EOF(Fichier) And Not stopper
Get 1, numenr, Client
'si l'enregistrement n'est pas vide
With Client
If .Nom <> "" Then
'inserer dans la table
NbErreur = NbErreur + Insererdanstable(CLng(.Num), _
.Nom, .Prenom, stopper)
End If
End With
'augmente le numero de l'enregistrement à lire
numenr = numenr + 1
Wend

'Affiche le resume
MsgBox "Insertion terminée avec : " & _
NbErreur & " erreur(s)", vbInformation, _
"Insertion..."
GoTo fin
err:
'si erreur avertit l'utilisateur
MsgBox "Echec" & vbCrLf & vbCrLf & _
err.Description, vbCritical, "Insertion..."
fin:
'Ferme le fichier
Close Fichier
End Sub
L'ouverture se fait en mode direct grâce à l'instruction Open for random. Ensuite, il faut passer à la même instruction la longueur en octet d'un enregistrement. Cela correspond à la longueur de la variable Client. Enfin, il faut lire chaque enregistrement grâce à l'instruction Get en passant le numéro de l'enregsitrement en question (NumEnr), jusqu'à atteindre la fin du fichier (fonction EOF).

Dans l'instruction Get, le premier paramètre correspond à l'octet de l'enregistrement concerné à lire. En général, on s'interresse à la globalité des données. La lecture commence donc à l'octet 1. Le second est, comme nous l'avons dit plus haut, le numéro de l'enregistrement. Enfin le troisième est une variable qui va recevoir les données.

Il faut ensuite rajouter une procédure qui enregistrera les données dans notre base de données :

Private Function Insererdanstable(VNumero As Long, _
VNom As String, VPrenom As String,ByRef Stopper as Boolean ) As Long
On Error GoTo err
Dim SQL As String
'Créer la requête d'insertion
SQL = "INSERT INTO Tbl_Client (Numero,nom,prenom) VALUES " & _
"(" & VNumero & "," & AjouterQuote(VNom) & "," & _
AjouterQuote(VPrenom) & ")"
CurrentDb.Execute SQL
Exit Function
err:
Insererdanstable = 1
MsgBox "impossible d'insérer : " & vbcrl & _
VNumero & vbCrLf & _
VNom & vbCrLf & _
VPrenom & vbCrLf & vbCrLf & _
err.Description, vbCritical, "Insertion"
If MsgBox("voulez vous continuer ?", vbQuestion + vbYesNo, _
"Insertion") = vbNo Then stopper = True
End Function

Private Function AjouterQuote(Chaine As String) As String

'enleve les caractère nuls
Chaine = Replace(Chaine, Chr(0), "")
'Ajoute " de chaque coté de la chaine et
'double les guillemets à l'intérieur de
'la chaine et elimine les espaces
AjouterQuote = Chr(34) & Trim$(Replace(Chaine, Chr(34), _
Chr(34) & Chr(34))) & Chr(34)
End Function
En cas d'erreur d'insertion, un message demande à l'utilisateur s'il veut continuer. Si il répond Non, le booléen Stopper est fixé à true ce qui aura pour effet de faire sortir le programme de la boucle de lecture ici :

While Not EOF(Fichier) And Not stopper
Pour comprendre d'avantage le fonctionnement, je vous invite à télecharger le fichier zip qui contient l'ensemble de l'application.
ARTAMYS est déconnecté   Envoyer un message privé Réponse avec citation
NEWS ACCESSF.A.Q AccessF.A.Q VBATutorielsSourcesOutilsLivresAccess TVAccess 2007

Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Access > VBA Access



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide


Fuseau horaire GMT +1. Il est actuellement 00h41.


Publiez vos articles, tutoriels et cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones. Nous contacter
Copyright 2000-2009 www.developpez.com - Legal informations