Passer numéro de fichier en argument [Résolu]

Signaler
Messages postés
152
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2016
-
Messages postés
152
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2016
-
Bonjour,

Pas très expérimenté en VB 6 car comme beaucoup, je l'utilise ponctuellement pour me simplifier la vie dans des macros, j'ai une question concernant le passage des numéros de fichiers ouverts en argument, d'une fonction à une autre.

<hr size="2" width="100%" />Admettons pour simplifier le contexte, que j'aie une fonction qui altère un fichier, déjà ouvert; dont le numéro est reçu en argument:
Function ModifierFichier(ByVal hFichierTexte AsObject)AsInteger
    Dim iNbModifications AsInteger
    Dim strBufferLigne AsString

    iNbModifications = 0
    strBufferLigne =""

    Do UntilEOF(hFichierTexte)
        Line Input #hFichierTexte, strBufferLigne
        ...'traitement ligne par ligne
        iNbModifications = iNbModifications + 1
    Loop
    ModifierFichier = iNbModifications
End Function
<hr size="2" width="100%" />Dans le corps de ma macro principale, je souhaite pouvoir appeler ma précédente fonction avec n'importe quel fichier ouvert:
Sub ModifierTout()
    Dim hFichierTexte AsObject
    Dim iNbModifications AsInteger

    hFichierTexte = FreeFile()
    Open("C:\Documents and Settings\foo.txt")ForInputAs#hFichierTexte
    'Application.Cursor = xlWait
    iNnModifications = ModifierFichier(hFichierTexte)
    'Application.Cursor = xlDefault
    Close #hFichierTexte
End Sub
<hr size="2" width="100%" />
Mais écrit comme ça, l'exécution provoque une erreur "propriété ou méthode non gérée par cet objet". J'ai sans doute fait une confusion entre hFichierTexte et #hFichierTexte, ou alors le passage des argument ByRef au lieu de ByVal. Si quelqu'un a une idée pour m'éclairer suite à ce mail coloré ? À moins que ce que je ne souhaite faire soit techniquement impossible en VB.

Merci d'avance.

2 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
34
salut,

tout en haut de ton code, ajoutes OPTION EXPLICIT

çà sert à relever les erreurs de variables non déclarées
on voit de suite la faute de frappe ici :

iNnModifications




ensuite FreeFile renvoie un INTEGER, pas un OBJECT

le chemin ne doit pas être entre parenthèses

pour le reste, c'est à peu près bon ;)
ce qui donne :






Function 
ModifierFichier(
ByVal 
hFichierTexte
As Integer
)
As Long

    ModifierFichier =  0
    Dim strBufferLigne As String

    strBufferLigne = ""

    Do Until EOF(hFichierTexte)
        Line Input #hFichierTexte, strBufferLigne
        Debug.Print strBufferLigne
        'traitement
ligne par ligne
        ModifierFichier = ModifierFichier + 1
    Loop
End Function

<hr size="2" width="100%" />

Sub 
ModifierTout()

    Dim hFichierTexte As Integer
    Dim iNbModifications As Long

    hFichierTexte = FreeFile()
    Open "C:\Documents and Settings\foo.txt" For Input As #hFichierTexte
    'Application.Cursor = xlWait
    iNbModifications = ModifierFichier(hFichierTexte)
    'Application.Cursor = xlDefault
    Close #hFichierTexte
End Sub





<small>
[../code.aspx?ID=39466 Coloration VB6, VBA,
VBS]
</small>






NB : attention, MACRO = VBA , pas VB6
catégorie du forum modifiée

<hr size ="2" width="100%" />
Messages postés
152
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2016

Merci beaucoup pour ton aide. Et désolé de mettre trompé de catégorie pour poster mon message.

Bonne soirée.