Ouvrir un fichier.Erreur 13 ??!

SylvainPG

XLDnaute Nouveau
Bonjour le forum!

Je doit faire une application capable de creer un fichier...
Je me suis donc renseigné et j'ai fait la sub suivante sachant que l'argument me provient d'une textbox.

Prb: Ce code plante au niveau de l'appel à la méthode fso.CreateTextFile et me renvoie l'erreur 13 (incompatibilité de type...)


Sub create_txt(ByVal nom_fichier As String)

Dim fso As Scripting.FileSystemObject
Dim obj_fichier As Scripting.File

Set fso = CreateObject("Scripting.FileSystemObject")

If Not fso.FileExists(nom_fichier) Then
Set obj_fichier = fso.CreateTextFile(nom_fichier, False)
MsgBox "le fichier " & nom_fichier & " a bien été créé"
Else:
MsgBox "Le fichier " & nom_fichier & " existe déja"
End If

End Sub


Merci de votre aide!!

Sylvain
 

PMO2

XLDnaute Accro
Re : Ouvrir un fichier.Erreur 13 ??!

Bonjour,

Vous nous dites que le paramètre passé provient d'une TextBox aussi ai-je envisagé le cas d'une TextBox dans un formulaire et le cas d'une TextBox dans la feuille (ou le document).
J'ai fait les essais des 2 cas, aussi bien dans un classeur Excel que dans un document Word. Je n'ai pas remarqué d'anomalie.

Je joins le dossier de mes essais. Pourriez-vous, à partir d'eux, faire des tests chez vous ?

Cordialement.

PMO
Patrick Morange
 

SylvainPG

XLDnaute Nouveau
Re : Ouvrir un fichier.Erreur 13 ??!

Bonjour Patrick,

Effectivement ta sub fonctionnne bien et ne me renvoie pas cette fameuse erreur 13...

Seul différence avec mon code :
Le fameux Option Explicit que je n'utilise pas (par mauvaise habitude)... Mais l'erreur 13 ne sort pas d'ici.

Par contre lorsque tu as déclaré les deux variable fso et obj_fichier, tu ne leur à pas préciser le type de variable..

Voici ta déclaration:

Dim fso 'As Scripting.FileSystemObject
Dim obj_fichier 'As Scripting.File


Voici la mienne:

Dim fso As Scripting.FileSystemObject
Dim obj_fichier As Scripting.File


Ma question est la suivante:
Pourquoi en déclarant la variable obj_fichier as Scripting.File, la ligne Set obj_fichier = fso.CreateTextFile(nom_fichier, False) renvoie l'erreur 13???

En tout cas merci de ton aide Patrick!!

Sylvain
 

PMO2

XLDnaute Accro
Re : Ouvrir un fichier.Erreur 13 ??!

Bonjour,

Si on déclare
Dim fso
Dim obj_fichier
on est en mode Late Binding (liaison tardive) ce qui permet de ne pas typer explicitement les variables qui,
telles qu'elles sont déclarées, sont considérées comme Variant supportant n'importe quel type de donnée (type Object dans notre cas).
D'autre part, cela évite de faire référence à une bibliothèque d'objets.
Le code que j'ai proposé est dans ce mode.
Code:
Sub create_txt(ByVal nom_fichier As String)
Dim fso
Dim obj_fichier
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FileExists(nom_fichier) Then
  Set obj_fichier = fso.CreateTextFile(nom_fichier, False)
  MsgBox "le fichier " & nom_fichier & " a bien été créé"
Else
  MsgBox "Le fichier " & nom_fichier & " existe déjà"
End If
End Sub


Si on déclare
Dim fso As Scripting.FileSystemObject
Dim obj_fichier As Scripting.TextStream
on est en mode Early Binding (liaison précoce). On est obligé de faire référence à la bibliothèque d'objets
Microsoft Scripting Runtime (C:\WINDOWS\system32\scrrun.dll chez moi)
L'avantage est de pouvoir consulter les propriétés et méthodes des objets dans l'Explorateur d'objets.
On a donc ce code
Code:
Sub create_txt(ByVal nom_fichier As String)
Dim fso As Scripting.FileSystemObject
Dim obj_fichier As Scripting.TextStream 'modification pmo
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FileExists(nom_fichier) Then
  Set obj_fichier = fso.CreateTextFile(nom_fichier, False)
  MsgBox "le fichier " & nom_fichier & " a bien été créé"
Else
  MsgBox "Le fichier " & nom_fichier & " existe déjà"
End If
End Sub
L'erreur 13 survient à la suite d'une mauvaise déclaration de
Dim obj_fichier As Scripting.File
qui doit être
Dim obj_fichier As Scripting.TextStream

Si vous allez dans l'Explorateur d'objets et que vous cherchez la méthode CreateTextFile
vous pourrez voir qu'il s'agit d'une fonction dont la valeur de retour est de type TextStream
Function CreateTextFile(FileName As String, [Overwrite As Boolean = Vrai], [Unicode As Boolean = Faux]) As TextStream
Membre de Scripting.FileSystemObject
Créer un fichier comme TextStream


Cordialement.

PMO
Patrick Morange
 

Discussions similaires

Statistiques des forums

Discussions
314 626
Messages
2 111 294
Membres
111 093
dernier inscrit
Yvounet