Changer l'extension de fichier par VBA

pourquoi tu t’énerve!!LOL.
oué mais le problème c’est que je ne sait plus comment on fait le pas à pas!!puis on va dire que mon prof de dev ma surtout appris à faire par les MsgBox!!

j’ai réussit à exécuter pas à pas mais le problème c’est qu’il va de While à If puis EndIf.
mais il me dit rien!!

Quand tu es sur la ligne while, tu passes ta souris (sans cliquer) sur la variable, ca va te donner sa valeur, et tu regardes si elle répond à la condition

ok, donc lorsque j’était sur While, je n’avais rien qui s’affiché par contre si je glissé ma fléche sur le X du while alors la j’avais : X="".
voila.

Maintenant il faut que tu voies pourquoi tu as x=""
Regarde si tu n’as pas une faute dans la ligne où tu l’initialises
en principe, tu devrais avoir un truc du genre
x = dir("*.txt")

donc, j’ai vérifier j’avai oublié quelque chose dans le chemin, mais mtn j’ai un message d’erreur qui est le suivant :

Microsoft Office Access

Vous ne pouvez pas importer ce fichier.

OK

jvé regarder le pas à pas!!


donc en mode pas à pas , j'ai remarqué qu'il passe rentre dans le while, il se positionne ensuite sur la commande transferttext et il va directement sur le message d'erreur du code CAD : Err_Impor_Bpss_Ipms_Click: MsgBox err.Description ' <-- sur celui la Resume Exit_Impor_Bpss_Ipms_Click
lorsque je me positionne sur : acImportDelim --> il m'affiche : acImportDelim = 0 et lorsque je me positionne sur : acSpreadsheetTypeText --> il m'affiche : acSpreadsheetTypeText = Vide

acImportDelim = 0 c’est normal; c’est une constante qui a pour valeur zero
acSpreadsheetTypeText : tu lutilises comment, ce paramètre ? tu peux donner ta ligne complète ?

je te renvoi mon code :

Private Sub Impor_Bpss_Ipms_Click()
On Error GoTo Err_Impor_Bpss_Ipms_Click
     
    'Ajoute comme référence Microsoft Scripting Runtime
    Dim Fso As New FileSystemObject
    Dim Fi As File
    Dim NomFile As String
    Dim Rep As String
    Dim X As String
    If Dir("X:\Comptes Utilisateurs\stagebeluc\Loïc\*.ls0") > "" Then
        Rep = "X:\Comptes Utilisateurs\stagebeluc\Loïc\"
        For Each Fi In Fso.GetFolder(Rep).Files
            If UCase(Fso.GetExtensionName(Fi.Name)) = "LS0" Then
                NomFile = Mid(Fi.Name, 1, InStrRev(Fi.Name, "."))
                'Copie le fichier True = Ecrase si exsite
                Call Fi.Copy(Rep & NomFile & "txt", True)
            End If
        Next
        Set Fso = Nothing
        Set Fi = Nothing
        X = Dir("X:\Comptes Utilisateurs\stagebeluc\Loïc\*.txt") ' ou ce que tu veux exactement comme étendue
        While X <> ""
            DoCmd.TransferText acImportDelim, "ipms_icxs_pves_epms_iens_ha", "ipms_icxs_pves_epms_iens_ha.txt"
'        X = Dir()
        Wend
     Else
        MsgBox ("erreur")
    End If
     
Exit_Impor_Bpss_Ipms_Click:
    Exit Sub

Err_Impor_Bpss_Ipms_Click:
    MsgBox err.Description
    Resume Exit_Impor_Bpss_Ipms_Click
    
End Sub

mon message d’erreur es le suivant :

Set Fso = Nothing
Set Fi = Nothing
X = Dir(“X:\Comptes Utilisateurs\stagebeluc\Loïc*.txt”) ’ ou ce que tu veux exactement comme étendue
là tu vérifies que X n’est pas nul, sinon tu ne rentres pas dans la boucle; x contient le nom de fichier à importer
While X <> “”
DoCmd.TransferText acImportDelim, <le nom du format d’importation que tu as créé dans ta base, , X, true ou false selon que la première ligne contient ou non les noms de champ
X = Dir()
Wend

bonjour, donc j’ai essayé en modifiant ce que tu ma donné hier mais un problème apparait.
* lorsque je fais du pas à pas : il passe de la commande transfertext à MsgBox.Description
* lorsque je fais en direct : j’ai un message d’erreur qui apparait qui est le suivant :
The Microsoft Jet database engine could not find the object ‘ipms_icxs_pves_epms_iens_ha.txt’. Make sure the object exists and that you spell its name and the path name correctly.

voila!!je crois que tu sait tout!!

Il y a de grandes chances pour que le fichier n’existe pas, ou ne soit pas dans le répertoire courant.
Vérifie avec Curdir quel est ton répertoire par défaut:
après, tu as deux solutions

  • soit tu le modifies (par chdrive et chdir
  • soit tu modifies X pour qu’il contienne le nom du fichier sous sa forme complète en y rajoutant le répertoire
    X = curdir + “” + X

par la fonction CurDir, ça doit nous retourner le chemin d’accés d’ou se trouve la table ou d’ou se trouve les fichiers??

CurDir retourne le répertoire courant, mais avec VB/VBA il y a quelqeus problème connus avec ça, parfois c’est le dossier WIndows courant, mais ça peut aussi être le dossier depuis où l’exe a été exécuté, ou encore autre chos esi tu es en mode déboggage.

Mais CurDir n’est pas utile si tu donnes le chemin complet, JET ne se préoccupe pas du répertoire courant.

Donc là ça signifie que le fichier ‘ipms_icxs_pves_epms_iens_ha.txt’ n’existe pas.
Ou éventuellement qu’il y a un problème de droit d’accès, mais normalement ce serait un autre message d’erreur.

Curdir, ca donne le répertoire par défaut.
Ce n’est pas forcément le répertoire dans lequel se trouve ton programme. Par exemple, si tu utilises l’explorateur, curdir prend la valeur du dernier répertoire utilisé dans l’explorateur.
Donc il peut être sage de forcer la valeur du répertoire par défaut (par chdrive/chdir) soit à ton répertoire de data s’il est fixe, soit au répertoire dans lequel se trouve l’application (activeworkbook.path)

mon fichier --> ‘ipms_icxs_pves_epms_iens_ha.txt’ existe bien sous X:\Comptes Utilisateurs\stagebeluc\Loïc
donc jcomprend pas pourquoi il me dit que le fichier existe pas, C nul!!LOL.
je sait pas du tout ou se situe le problème, j’ai beau réfléchir!! enfin désespérons pas, on va y arrivé!!lol.

Est-ce que curdir te donne bien comme valeur
X:\Comptes Utilisateurs\stagebeluc\Loïc ?

EDIT :
y compris le X: !!
Edité le 21/06/2007 à 09:30

donc déja le ti bou de code pour voir si je l’ai bien mit :

While X <> ""
            Path = CurDir
            DoCmd.TransferText acImportDelim, Texte, "ipms_icxs_pves_epms_iens_ha", X, True
        X = Dir()
        Wend

et lorsque je suis en pas à pas, et ke je glisse mon curseur sur CurDir je n’est rien mais lorsque je glisse le curseur sur le Path il me mette : “V:” .

Il faut que tu regardes la valeur de Path UNE FOIS PASSE SUR LA LIGNE c’est à dire lorsque ta ligne d’xécution (jaune) est sur DoCmdTransfert., sinon ce n’est pas significatif.
Et si à ce moment là Path (donc curdir) te dit que tu es dans V:, tu vois bien qu’il faut changer pour aller dans X:

donc, c’est bien à cette endroit la!!donc ok je dois changer, ca ok je l’est bien vu mais en fet mes fichiers sont sou X:\ alors ke la base de donnée es sous C:\ (V:) donc lekel doi-je choisir??

Essaie alors de travailler en chemin complet pour le nom de ton fichier :
tu mets dans la variable X (voir plus haut) le path+le nom de fichier, comme ca tu n’auras pas à te préoccuper du répertoire courant