Erreur 55:fichier deja ouvert

Signaler
-
 Utilisateur anonyme -
voici mon code mais je crois qu'il y a une erreur quelque part:
Private Sub supprimer_Click()
Dim nom, a, b As String
Dim f, f1 As Integer
nom = InputBox("donner le nom du medecin que vous voulez supprimez")
f = FreeFile
Open "C:\Users\saif\Desktop\projet VB\medecins.doc" For Input As #f
Do While Not EOF(f)
Input #f, a
If a = nom Then
Line Input #f, a
End If
Loop
Close #f
f1 = FreeFile
Open "C:\Users\saif\Desktop\projet VB\medecins.doc" For Input As #f
Open "C:\Users\saif\Desktop\projet VB\med.doc" For Output As #f1
Do While Not EOF(f)
Line Input #f, b
If Not b = a Then
Print #f1, b
End If
Loop
Close #f1
Close #f
Open "C:\Users\saif\Desktop\projet VB\medecins.doc" For Output As #f
Open "C:\Users\saif\Desktop\projet VB\med.doc" For Input As #f1
Do While Not EOF(f1)
Line Input #f1, a
Print #f, a
Loop
Close #f1
Close #f
End Sub
c'est pour supprimer un medecin en fonction de son nom
voici un apercu du fichier medecins.doc
Ben Fraj Rim, dermatologue ,Paris, 60
merci de m'aider le vite possible ,j'en est besoin pour mon projet le maredi

10 réponses

Messages postés
14764
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
26 janvier 2021
151
Bonjour,

Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).

Sinon, sans précision de la ligne, j'estime que à un moment F et F1 ont la même valeur, à regarder en pas à pas.

v----Signature--------v----------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Bonjour, NHenry,
Non. FreeFile, sous VB6, n'attribue jamais un numéro déjà attribué à un fichier non encore fermé (donc non encore disponible).
Son erreur est forcément en amont du code qu'il montre.
Par ailleurs et surtout, je vois qu'il ouvre des .doc avec l'instruction Open (qui ne peut ouvrir valablement que des fichiers texte ! et je ne veux pas croire qu'il a changé en .doc des fichiers .txt )
Il est assez vraisemblable qu'il n'est pas sous VB6 et qu'il cherche à ouvrir un fichier Word sur lequel Il travaille !
Ou alors qu'il est réellement sous VB6 et qu'il pilote Word depuis VB6 et qu'il cherche à modifier le fichier qu'il pilote, ce qui revient au même !
Dans un cas comme dans l'autre, sa démarche d'ouverture, de lecture et d'écriture par l'instruction Open d'un fichier Word est littéralement insensée.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
merci pour tous vos réponses mais le problème ,c'est que dans mon projet ,il faut impérativement utiliser des fichiers .doc donc je sais plus quoi faire mais pour votre informations ,l'affichage marche très bien mon bug ,c'est dans la suppression d'un medecin
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Pas bonjour non plus.

Bon. Tes fichiers .DOC sont-ils des fichiers Word ou bien des fichiers de type texte appelé maladroitement avec l'extension .DOC ?

Sur quelle ligne génère t-il cette erreur ?

Input# ou Line Input# ne sont pas du tout la même chose.
Comme tu utilises les deux, es-tu sur de ton coup ?
Avec "Input #f, a", que récupères-tu dans ta variable 'a' ?
Si le test qui suit, 'a = nom' est :
- vrai : Tu lis une ligne entière. Que récupères-tu ? le reste de la ligne ?
- faux : Tu ne lis pas la ligne entière et, au prochain cycle, tu refais un "Input #f, a" : Qu'obtiens-tu dans ta variables 'a' ?
Ca doit être assez bizarre ...

If Not b = a Then
Je te conseille fortement les parenthèses
If Not (b = a) Then
ou le changement de comparateur
If b <> a Then

Dans ce genre de test, les minuscules et majuscules risquent d'avoir une importance : Y as-tu pensé ?

Rappel : méthode de débobogage :
- F9 sur une ligne de code; elle change de couleur
Le programme s'y arrêtera au prochain passage.
Lors de l'arrêt, survole avec la souris tes variables pour visualiser leur contenu, ou va dans la fenêtre de debogage (Ctrl-G) et tape
? maVariable
pour qu'elle s'inscrive dans la fenêtre.
- F8 (VB6) ou F10 (.Net) pour avancer d'une ligne de code
- F5 pour continuer normalement

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on le partage (Socrate)
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
l'affichage marche très bien

L'affichage ? Quel "affichage" ? Je n'en vois aucun dans le code que tu montres !
J'ai vraiment de plus en plus l'impression qu'il y a là une très grande confusion

Commence par nous préciser si tu développes en VB6 ou en VBA (Visual Basic for Application de Office)
Et si en VB6 : comment tu "pilotes" Word.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Messages postés
14764
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
26 janvier 2021
151
Bonjour,

Concernant ma remarque sur FreeFile, c'est à cause des lignes :
Close #f
f1 = FreeFile

Le fait de fermer F permet à F1 d'avoir la même valeur.

v----Signature--------v----------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Ah oui, bien vu, Nicolas.
J'ai pas tilté. En effet, c'est bien ça.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Je "vois" le coup, mais ai vraiment l'impression de ce que son vrai problème est bien plus fondamental.
Attendons la suite.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
'Correction: pour que FreeFile fonctionne
f = FreeFile
Open "C:\Users\saif\Desktop\projet VB\medecins.doc" For Input As #f
f1 = FreeFile
Open "C:\Users\saif\Desktop\projet VB\med.doc" For Output As #f1

Bonjour,

Pourquoi utiliser le FreeFile?
Open "C:\Users\saif\Desktop\projet VB\medecins.doc" For Input As #1
Open "C:\Users\saif\Desktop\projet VB\med.doc" For Output As #2

Close #1 'pour fermer le premier
'et
Close #2 'pour le deuxième
 


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique