Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

testez l'ouverture d'un fichier

6 réponses
Avatar
eric.zzzz
Bonjour,
J'ai un bouton de controle qui me permet de cr=E9er un fichier Excel
(macro "Transf=E9rerFeuilleCalcul"sur clic). le probl=E8me c'est que si on
appuie une 2=B0 fois sur ce bouton, les nouvelles donn=E9es vont venir
s'=E9crire sur le 1er fichier.
J'ai fait : Private Sub Form_Load()
On Error Resume Next
Kill "D:\Baf\*.XLS"
Mais je constate que c'est loin d'etre suffisant ...
Comment faire pour tester si des fichiers excel sont ouverts et
demander =E0 l'utilisateur de les fermer avant de faire un kill...? (je
suis preneur de toutes propositions...)
merci d'avance
Eric

6 réponses

Avatar
3stone
Salut,

J'ai un bouton de controle qui me permet de créer un fichier Excel
(macro "TransférerFeuilleCalcul"sur clic). le problème c'est que si on
appuie une 2° fois sur ce bouton, les nouvelles données vont venir
s'écrire sur le 1er fichier.
J'ai fait : Private Sub Form_Load()
On Error Resume Next
Kill "D:Baf*.XLS"
Mais je constate que c'est loin d'etre suffisant ...
Comment faire pour tester si des fichiers excel sont ouverts et
demander à l'utilisateur de les fermer avant de faire un kill...? (je
suis preneur de toutes propositions...)


Il y a ceci, à l'aide des API :
http://www.mvps.org/accessfr/apis/api0007.htm


ou alors par automation...

On Error Resume Next
Set Excel_Application = GetObject(, "Excel.Application")
If Err.Number = 0 Then
Msgbox "Excel déjà ouvert..."
...
exit sub
else
Set Excel_Application = CreateObject("Excel.Application")
End If
Err.Clear

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
eric.zzzz
On 12 mar, 03:03, "3stone" wrote:
Salut,

J'ai un bouton de controle qui me permet de créer un fichier Excel
(macro "TransférerFeuilleCalcul"sur clic). le problème c'est que si on
appuie une 2° fois sur ce bouton, les nouvelles données vont venir
s'écrire sur le 1er fichier.
J'ai fait : Private Sub Form_Load()
On Error Resume Next
  Kill "D:Baf*.XLS"
Mais je constate que c'est loin d'etre suffisant ...
Comment faire pour tester si des fichiers excel sont ouverts et
demander à l'utilisateur de les fermer avant de faire un kill...? (je
suis preneur de toutes propositions...)

Il y a ceci, à l'aide des API :http://www.mvps.org/accessfr/apis/api0007 .htm

ou alors par automation...

On Error Resume Next
Set Excel_Application = GetObject(, "Excel.Application")
If Err.Number = 0 Then
        Msgbox "Excel déjà ouvert..."
        ...
        exit sub
else
    Set Excel_Application = CreateObject("Excel.Application")
End If
Err.Clear

--
A+
Pierre (3stone) Access MVP
Perso:http://www.3stone.be/
MPFA:http://www.mpfa.info/ (infos générales)


Je ne sais pas ce que signifie "Err.Number = 0", mais qu'Excel soit
fermé ou ouvert, la condition if est toujours vérifié, autrement dit,
j'ai toujours le message "Excel déjà ouvert..."
J'ai fait F1 sur Err.Number, mais je n'ai pas compris...

Avatar
eric.zzzz
On 12 mar, 03:03, "3stone" wrote:
Salut,
ou alors par automation...

On Error Resume Next
Set Excel_Application = GetObject(, "Excel.Application")
If Err.Number = 0 Then
        Msgbox "Excel déjà ouvert..."
        ...
        exit sub
else
    Set Excel_Application = CreateObject("Excel.Application")
End If
Err.Clear


J'ai trouvé cette solution...(j'espère qu'elle s'avérera être bonne)
Dim MyFile
MyFile = Dir("D:BafFic1.XLS")
If MyFile = "Fic1.xls" Then
MsgBox "Supprimer Excel dans D:Baf...", vbOKOnly
Exit Sub
End If

Avatar
Michel_D
Bonjour,
On 12 mar, 03:03, "3stone" wrote:
Salut,

J'ai un bouton de controle qui me permet de créer un fichier Excel
(macro "TransférerFeuilleCalcul"sur clic). le problème c'est que si on
appuie une 2° fois sur ce bouton, les nouvelles données vont venir
s'écrire sur le 1er fichier.
J'ai fait : Private Sub Form_Load()
On Error Resume Next
Kill "D:Baf*.XLS"
Mais je constate que c'est loin d'etre suffisant ...
Comment faire pour tester si des fichiers excel sont ouverts et
demander à l'utilisateur de les fermer avant de faire un kill...? (je
suis preneur de toutes propositions...)

Il y a ceci, à l'aide des API :http://www.mvps.org/accessfr/apis/api0007..htm

ou alors par automation...

On Error Resume Next
Set Excel_Application = GetObject(, "Excel.Application")
If Err.Number = 0 Then
Msgbox "Excel déjà ouvert..."
...
exit sub
else
Set Excel_Application = CreateObject("Excel.Application")
End If
Err.Clear

--
A+
Pierre (3stone) Access MVP
Perso:http://www.3stone.be/
MPFA:http://www.mpfa.info/ (infos générales)


Je ne sais pas ce que signifie "Err.Number = 0", mais qu'Excel soit
fermé ou ouvert, la condition if est toujours vérifié, autrement dit,
j'ai toujours le message "Excel déjà ouvert..."
J'ai fait F1 sur Err.Number, mais je n'ai pas compris...


Hum, je pense qu'il devait y avoir une instance Excel ouverte mais
invisible, pour être sur il faut utiliser le gestionnaire des taches
ou un utilitaire du style "process explorer"


Avatar
3stone
Salut,

[..]
ou alors par automation...

On Error Resume Next
Set Excel_Application = GetObject(, "Excel.Application")
If Err.Number = 0 Then
Msgbox "Excel déjà ouvert..."
...
exit sub
else
Set Excel_Application = CreateObject("Excel.Application")
End If
Err.Clear


Je ne sais pas ce que signifie "Err.Number = 0", mais qu'Excel soit
fermé ou ouvert, la condition if est toujours vérifié, autrement dit,
j'ai toujours le message "Excel déjà ouvert..."
J'ai fait F1 sur Err.Number, mais je n'ai pas compris...

---

On Error Resume Next
- dit de passer à la ligne suivante en cas d'erreur...

Set Excel_Application = GetObject(...)
- retourne une erreur si Excel n'est *pas* démarré

mais... le exit sub est de trop ;-)

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)

Avatar
eric.zzzz
On 12 mar, 19:01, Michel_D
wrote:
Hum, je pense qu'il devait y avoir une instance Excel ouverte mais
  invisible, pour être sur il faut utiliser le gestionnaire des taches
  ou un utilitaire du style "process explorer"-


Effectivement, le processus EXCEL.EXE était tjrs présent dans la liste
des taches. En le terminant (avec CTrl+alt+Suppr), le code n'entrait
pas dans la boucle IF ...