Test si Fichier Excel ouvert

cs_syl2 Messages postés 49 Date d'inscription lundi 19 mai 2003 Statut Membre Dernière intervention 7 juillet 2005 - 19 août 2004 à 14:27
cs_syl2 Messages postés 49 Date d'inscription lundi 19 mai 2003 Statut Membre Dernière intervention 7 juillet 2005 - 20 août 2004 à 15:11
Bonjour à tous,

je suis en train de réaliser une application VBA Access qui consiste à extraire des données de ma base pour générer des tableaux dynamiques dans Excel.

Quand je clique sur mon bouton sur mon formulaire, je voudrais tester si le fichier Excel est déjà lancé ... En effet, si c le cas, cela ne posera pas de problèmes si c n'est dans le cas où l'utilisateur change l'onglet ... Les valeurs récupérés ne correspondront donc plus à l'onglet actif, et quand je récupère mes valeurs de mes cellules cela posera un gros pb :).

J'ai implémenté le code suivant :

Public Function IsFileOpen(Filename As String)
    On Error Resume Next
    Set wbWorld = appWorld.Workbooks(Filename)
    If Err <> 0 Then
        MsgBox "le classeur n'est pas ouvert"
    Else
        MsgBox "le classeur est ouvert"
    End If
    Set wbWorld = Nothing
End Function


mais dans tt les cas il passe dans le Else, que mon fichier soit lancé ou non ...

Avez vous une idée ?

Merci par avance

Slyv

4 réponses

Zigarn Messages postés 106 Date d'inscription mardi 13 juillet 2004 Statut Membre Dernière intervention 26 janvier 2005
19 août 2004 à 16:54
Essaie plutot le test :
If Err = (code d'erreur de tentative d'utilisation d'un fichier non ouvert) Then
  MsgBox "Fermé"
Else
  MsgBox "Ouvert"
End If

-------------------------------------------------
Débutant ... mais pas pour longtemps !
0
cs_syl2 Messages postés 49 Date d'inscription lundi 19 mai 2003 Statut Membre Dernière intervention 7 juillet 2005 1
19 août 2004 à 20:28
Salut,

le truc c que c pas un problème que le fichier soit ouvert et ceci ne sera pas une erreur ...

Je peux tout à fait écrire dans mon fichier Excel s'il est ouvert ou fermé ... mais moi je veux savoir si le fichier est ouvert pour après afficher un message pour dire de fermer le fichier avant d'effectuer mon traitement. Tout simplement car si le fichier reste ouvert et que l'utilisateur joue avec les onglets, cela sera un problème au niveau de la récupé&ration des valeurs de cellules

++
0
Zigarn Messages postés 106 Date d'inscription mardi 13 juillet 2004 Statut Membre Dernière intervention 26 janvier 2005
20 août 2004 à 10:11
Ce que je veux dire, c'est qu'au lieu de tester la non présence d'erreur, testes plutôt l'erreur que tu cherche.
Public Function IsFileOpen(Filename As String) As Boolean
IsFileOpen = False 'C'est une fonction : il faut bien renvoyer une valeur
On Error Resume Next
appWorld.Workbooks(Filename).Activate
If (Err = 9) Then 'Erreur "L'indice n'appartient pas à la sélection."
MsgBox "le classeur n'est pas ouvert"
Else
MsgBox "le classeur est ouvert"
IsFileOpen = True
End If
End Function 

-------------------------------------------------
Débutant ... mais pas pour longtemps !
0
cs_syl2 Messages postés 49 Date d'inscription lundi 19 mai 2003 Statut Membre Dernière intervention 7 juillet 2005 1
20 août 2004 à 15:11
Salut,

Le problème que je rencontre, c'est que si mon fichier est ouvert, je peux avoir des erreurs, mais je ne le saurais qu'au moment du traitement .... Si l'utilisateur ne fait pas l'idiot, cela marchera parfaitement ... Mais comme de base, un développeur doit se placer dans la peau de l'utilisateur Landa qui connait rien, ben il faut gérer

je fais des différences entre mes colonnes et donc si la cellule A48 par exemple est en chaine de caractères sur l'onglet toto et que le traitement récupère cette cellule ... cela posera un gros problème, alors qu'en traitement normal, la colonne A48 sur l'onglet tata est bien en numérique

Donc comme c un problème qui peut uniquement être rencontré durant le traitement, j'aimerais éviter de faire 1 fois le traitement, renvoyer l'erreur de type : Type incohérent car il essayera de récupérer une string dans un entier, et ensuite d'afficher l'info à l'utilisateur en cas d'erreur.
0
Rejoignez-nous