OVH Cloud OVH Cloud

Problème de format de fichier séquentiel

7 réponses
Avatar
Jess
Bonjour =E0 tous,

Voil=E0, depuis que mois je liais une table avec un fichier=20
texte avec un VbCrlf pour chaque ligne... mais voil=E0 que=20
le fournisseur =E0 chang=E9 de plateforme et maintenant ne=20
fait qu'un VbLf... alors Access 97 et notepad interpr=EAtent=20
le fichier comme un fichier contenant qu'une ligne.

Il faut donc que je remplace les VbLf par des VbCrlf. =20
Pour se faire j'ouvre le fichier et je mets dans une=20
chaine de charact=E8re, utilise la fonction "replace", et=20
reg=E9nrer le fichier.

Le probl=E8me c'est que pour une raison quelquonque la=20
fonction "replace" est pas diponible sur mon Access 97. =20
J'ai beau essay=E9 d'activer le "msvbvm60.dll" dans les=20
r=E9f=E9rences mais il m'affiches toujours : "Nom de module,=20
de projet ou de biblioth=E8que d'objets d=E9j=E0 utilis=E9".

J'ai essay=E9 de construire une fonction de replace... par=20
contre elle est terriblement lente.

Quelqu'un pourrais m'aider pour trouver une solution afin=20
que je puisse avoir acc=E8s =E0 la fonction replace?

J'ai aussi pens=E9 =E0 faire une d=E9claration implicite li=E9 =E0=20
la DLL dans mon module de "replace"mais cela n'a pas=20
march=E9... je crois que je ne suis pas tout =E0 fait =E0 l'aise=20
=E0 ce niveau l=E0...

Merci

7 réponses

Avatar
Guy DETIENNE
Salut ;O)

Voici la fonction Replace que j'utilise. De là à dire qu'elle est plus
rapide que la tienne...

Function Replace(ByVal Expression As String, ByVal Find As String, ByVal
ReplaceWith As String) As String

Dim Temp As String
Dim P As Long

Temp = Expression
P = InStr(Temp, Find)

Do While P > 0
Temp = Left$(Temp, P - 1) & ReplaceWith & Mid$(Temp, P +
Len(Find))
P = InStr(P + Len(ReplaceWith), Temp, Find, 1)
Loop

Replace = Temp

End Function


Guy

--
__________________________________
Tchao.net: L'informatique à votre dimension
www.tchao.net
Pour toute réponse, retirer le .nospam de l'adresse mail
ou cliquez ici http://cerbermail.com/?6nQ9U2fpkD

"Jess" a écrit dans le message de
news:045a01c3b06b$55417bd0$
Bonjour à tous,

Voilà, depuis que mois je liais une table avec un fichier
texte avec un VbCrlf pour chaque ligne... mais voilà que
le fournisseur à changé de plateforme et maintenant ne
fait qu'un VbLf... alors Access 97 et notepad interprêtent
le fichier comme un fichier contenant qu'une ligne.

Il faut donc que je remplace les VbLf par des VbCrlf.
Pour se faire j'ouvre le fichier et je mets dans une
chaine de charactère, utilise la fonction "replace", et
regénrer le fichier.

Le problème c'est que pour une raison quelquonque la
fonction "replace" est pas diponible sur mon Access 97.
J'ai beau essayé d'activer le "msvbvm60.dll" dans les
références mais il m'affiches toujours : "Nom de module,
de projet ou de bibliothèque d'objets déjà utilisé".

J'ai essayé de construire une fonction de replace... par
contre elle est terriblement lente.

Quelqu'un pourrais m'aider pour trouver une solution afin
que je puisse avoir accès à la fonction replace?

J'ai aussi pensé à faire une déclaration implicite lié à
la DLL dans mon module de "replace"mais cela n'a pas
marché... je crois que je ne suis pas tout à fait à l'aise
à ce niveau là...

Merci
Avatar
Jess
en effet elle est légèrement plus rapide... par contre...
ce n'est pas aussi rapide que la vrai fonction replace de
VB.

Je crois qu'il faut absolument que j'utilise cette
fonction... quelque peux m'aider afin de faire déclaration
implicite?

Merci

-----Message d'origine-----
Salut ;O)

Voici la fonction Replace que j'utilise. De là à dire
qu'elle est plus

rapide que la tienne...

Function Replace(ByVal Expression As String, ByVal Find
As String, ByVal

ReplaceWith As String) As String

Dim Temp As String
Dim P As Long

Temp = Expression
P = InStr(Temp, Find)

Do While P > 0
Temp = Left$(Temp, P - 1) & ReplaceWith &
Mid$(Temp, P +

Len(Find))
P = InStr(P + Len(ReplaceWith), Temp, Find, 1)
Loop

Replace = Temp

End Function


Guy

--
__________________________________
Tchao.net: L'informatique à votre dimension
www.tchao.net
Pour toute réponse, retirer le .nospam de l'adresse mail
ou cliquez ici http://cerbermail.com/?6nQ9U2fpkD

"Jess" a écrit dans
le message de

news:045a01c3b06b$55417bd0$
Bonjour à tous,

Voilà, depuis que mois je liais une table avec un fichier
texte avec un VbCrlf pour chaque ligne... mais voilà que
le fournisseur à changé de plateforme et maintenant ne
fait qu'un VbLf... alors Access 97 et notepad interprêtent
le fichier comme un fichier contenant qu'une ligne.

Il faut donc que je remplace les VbLf par des VbCrlf.
Pour se faire j'ouvre le fichier et je mets dans une
chaine de charactère, utilise la fonction "replace", et
regénrer le fichier.

Le problème c'est que pour une raison quelquonque la
fonction "replace" est pas diponible sur mon Access 97.
J'ai beau essayé d'activer le "msvbvm60.dll" dans les
références mais il m'affiches toujours : "Nom de module,
de projet ou de bibliothèque d'objets déjà utilisé".

J'ai essayé de construire une fonction de replace... par
contre elle est terriblement lente.

Quelqu'un pourrais m'aider pour trouver une solution afin
que je puisse avoir accès à la fonction replace?

J'ai aussi pensé à faire une déclaration implicite lié à
la DLL dans mon module de "replace"mais cela n'a pas
marché... je crois que je ne suis pas tout à fait à l'aise
à ce niveau là...

Merci


.



Avatar
Guy DETIENNE
Salut ;O)

Dans Access 97, la fonction Replace n'était pas encore intégrée au VBA.
Seulement à partir de la version 2000.
Je ne vois pas comment tu pourrais faire appel à cette fonction ailleurs.
Selon moi, c'est la seule façon d'y parvenir.
Optimise peut-être la fonction que je t'ai envoyé. Je sais, c'est facile à
dire ;O)

Bonne chance.

Guy

--
__________________________________
Tchao.net: L'informatique à votre dimension
www.tchao.net
Pour toute réponse, retirer le .nospam de l'adresse mail
ou cliquez ici http://cerbermail.com/?6nQ9U2fpkD

"Jess" a écrit dans le message de
news:01ee01c3b073$4ffd8c10$
en effet elle est légèrement plus rapide... par contre...
ce n'est pas aussi rapide que la vrai fonction replace de
VB.

Je crois qu'il faut absolument que j'utilise cette
fonction... quelque peux m'aider afin de faire déclaration
implicite?

Merci

-----Message d'origine-----
Salut ;O)

Voici la fonction Replace que j'utilise. De là à dire
qu'elle est plus

rapide que la tienne...

Function Replace(ByVal Expression As String, ByVal Find
As String, ByVal

ReplaceWith As String) As String

Dim Temp As String
Dim P As Long

Temp = Expression
P = InStr(Temp, Find)

Do While P > 0
Temp = Left$(Temp, P - 1) & ReplaceWith &
Mid$(Temp, P +

Len(Find))
P = InStr(P + Len(ReplaceWith), Temp, Find, 1)
Loop

Replace = Temp

End Function


Guy

--
__________________________________
Tchao.net: L'informatique à votre dimension
www.tchao.net
Pour toute réponse, retirer le .nospam de l'adresse mail
ou cliquez ici http://cerbermail.com/?6nQ9U2fpkD

"Jess" a écrit dans
le message de

news:045a01c3b06b$55417bd0$
Bonjour à tous,

Voilà, depuis que mois je liais une table avec un fichier
texte avec un VbCrlf pour chaque ligne... mais voilà que
le fournisseur à changé de plateforme et maintenant ne
fait qu'un VbLf... alors Access 97 et notepad interprêtent
le fichier comme un fichier contenant qu'une ligne.

Il faut donc que je remplace les VbLf par des VbCrlf.
Pour se faire j'ouvre le fichier et je mets dans une
chaine de charactère, utilise la fonction "replace", et
regénrer le fichier.

Le problème c'est que pour une raison quelquonque la
fonction "replace" est pas diponible sur mon Access 97.
J'ai beau essayé d'activer le "msvbvm60.dll" dans les
références mais il m'affiches toujours : "Nom de module,
de projet ou de bibliothèque d'objets déjà utilisé".

J'ai essayé de construire une fonction de replace... par
contre elle est terriblement lente.

Quelqu'un pourrais m'aider pour trouver une solution afin
que je puisse avoir accès à la fonction replace?

J'ai aussi pensé à faire une déclaration implicite lié à
la DLL dans mon module de "replace"mais cela n'a pas
marché... je crois que je ne suis pas tout à fait à l'aise
à ce niveau là...

Merci


.



Avatar
Raymond [mvp]
Bonjour Guy et jess.

Il y a une solution par une DLL vb6.
si jess a le vb6, il faut créer une DLL activex avec mode d'exécution
autonome.
cette dll a une seule ligne, la fonction replace.
on référence la dll dans acess97 et on l'utilise normalement comme tout
objet de classe du type
Dim R As New Remplacer
Private Sub Commande14_Click()
Me.Destination = R.Execute(Me.Destination, "A", "B")
End Sub

ce n'est peut-être pas plus rapide mais tellement plus pratique et lorsqu'on
passe en 2000 on remplace R.Execute par Replace.

Si Jess n'a pas le vb6 et s'il veut la dll, je l'améliorerai avec le
positionnement et je la mettrai sur mon site.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour une meilleure
efficacité de tes interventions sur MPFA


"Guy DETIENNE" a écrit dans le message de
news:u%
Salut ;O)

Dans Access 97, la fonction Replace n'était pas encore intégrée au VBA.
Seulement à partir de la version 2000.
Je ne vois pas comment tu pourrais faire appel à cette fonction ailleurs.
Selon moi, c'est la seule façon d'y parvenir.
Optimise peut-être la fonction que je t'ai envoyé. Je sais, c'est facile
à

dire ;O)

Bonne chance.

Guy



Avatar
Guy DETIENNE
Salut Raymond,

Mais il lui faudra dès lors le runtime VB6 pour pouvoir utiliser cette DLL
ActiveX. Bon, tu me diras qui ne l'a pas ?

Guy

--
__________________________________
Tchao.net: L'informatique à votre dimension
www.tchao.net
Pour toute réponse, retirer le .nospam de l'adresse mail
ou cliquez ici http://cerbermail.com/?6nQ9U2fpkD

"Raymond [mvp]" a écrit dans le message de
news:%
Bonjour Guy et jess.

Il y a une solution par une DLL vb6.
si jess a le vb6, il faut créer une DLL activex avec mode d'exécution
autonome.
cette dll a une seule ligne, la fonction replace.
on référence la dll dans acess97 et on l'utilise normalement comme tout
objet de classe du type
Dim R As New Remplacer
Private Sub Commande14_Click()
Me.Destination = R.Execute(Me.Destination, "A", "B")
End Sub

ce n'est peut-être pas plus rapide mais tellement plus pratique et
lorsqu'on

passe en 2000 on remplace R.Execute par Replace.

Si Jess n'a pas le vb6 et s'il veut la dll, je l'améliorerai avec le
positionnement et je la mettrai sur mon site.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour une meilleure
efficacité de tes interventions sur MPFA


"Guy DETIENNE" a écrit dans le message de
news:u%
Salut ;O)

Dans Access 97, la fonction Replace n'était pas encore intégrée au VBA.
Seulement à partir de la version 2000.
Je ne vois pas comment tu pourrais faire appel à cette fonction
ailleurs.


Selon moi, c'est la seule façon d'y parvenir.
Optimise peut-être la fonction que je t'ai envoyé. Je sais, c'est
facile


à
dire ;O)

Bonne chance.

Guy







Avatar
Raymond [mvp]
Bonjour Jess.

je n'ai pas de poste avec 97 tout seul.
référence ma dll .
qu'est-ce quelle donne ?
si marche pas copie la dll vb6 sans rien faire d'autre mais au bon endroit.
qu'est-ce quelle donne ?
à suivre .....
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour une meilleure
efficacité de tes interventions sur MPFA


"Jess" a écrit dans le message de
news:0a0501c3b29c$cbd23860$
Bonjour Raymond,

Je sais que la fonction replace est dans le
dll "msvbvm60.dll"... j'Ai essayé de l'inclure dans les
référence mais il m'affiche toujours : "Nom de module,
de projet ou de bibliothèque d'objets déjà utilisé".

Je ne m'y connais pas trop en ce qui concerne la création
de dll activeX en mode de création autonome.

Je sais qu'il est possible de déclarer des function
existante dans certaine dll... comme je fait déjà afin de
télécharger des fichier à partir d'un serveur ftp.... tel
que la suivante...

Public Declare Function FtpGetFile Lib "wininet.dll"
Alias "FtpGetFileA" _
(ByVal hFtpSession As Long, ByVal lpszRemoteFile As
String, _
ByVal lpszNewFile As String, ByVal fFailIfExists As
Boolean, _
ByVal dwFlagsAndAttributes As Long, ByVal dwFlags As
Long, _
ByVal dwContext As Long) As Boolean

ca marche à merveille... par contre je ne sais pas comment
je pourrais faire la meme chose pour le msvbvm60.dll.

Je tiens à souligner que VB6 est installé sur la majorité
des postes ici... donc je ne vois pas de problème mise à
part mon manque de conaissance...

Alors Raymond... j'aurais besoin d'aide svp...

Merci beaucoup.
Avatar
Jess
Bonjour... j'ai trouvé un algorythm INCROYABLEMENT
perfomant sur le site suivant... de remplace ou "replace"

http://www.xbeat.net/vbspeed/cod_Replace09.htm


-----Message d'origine-----
Bonjour Jess.

je n'ai pas de poste avec 97 tout seul.
référence ma dll .
qu'est-ce quelle donne ?
si marche pas copie la dll vb6 sans rien faire d'autre
mais au bon endroit.

qu'est-ce quelle donne ?
à suivre .....
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour une meilleure
efficacité de tes interventions sur MPFA


"Jess" a écrit dans
le message de

news:0a0501c3b29c$cbd23860$
Bonjour Raymond,

Je sais que la fonction replace est dans le
dll "msvbvm60.dll"... j'Ai essayé de l'inclure dans les
référence mais il m'affiche toujours : "Nom de module,
de projet ou de bibliothèque d'objets déjà utilisé".

Je ne m'y connais pas trop en ce qui concerne la création
de dll activeX en mode de création autonome.

Je sais qu'il est possible de déclarer des function
existante dans certaine dll... comme je fait déjà afin de
télécharger des fichier à partir d'un serveur ftp.... tel
que la suivante...

Public Declare Function FtpGetFile Lib "wininet.dll"
Alias "FtpGetFileA" _
(ByVal hFtpSession As Long, ByVal lpszRemoteFile As
String, _
ByVal lpszNewFile As String, ByVal fFailIfExists As
Boolean, _
ByVal dwFlagsAndAttributes As Long, ByVal dwFlags As
Long, _
ByVal dwContext As Long) As Boolean

ca marche à merveille... par contre je ne sais pas comment
je pourrais faire la meme chose pour le msvbvm60.dll.

Je tiens à souligner que VB6 est installé sur la majorité
des postes ici... donc je ne vois pas de problème mise à
part mon manque de conaissance...

Alors Raymond... j'aurais besoin d'aide svp...

Merci beaucoup.


.