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
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 ?
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???
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