Publicité
Offres partenaires
Actualités relatives

Un téléchargement pour les supprimer tous

Publié le 31 juillet 2004

Microsoft vient de mettre en ligne un patch destiné à éradiquer les virus et troyens suivants des machines qui en sont affectées : Mydoom.A, Mydoom.B, Mydoom.E, Mydoom.F, Mydoom.G, Mydoom.J, Mydoom.L, Mydoom.O, Zindos.A, Doomjuice.A, et Doomjuice.B. Une Lire la suite

Deux nouvelles failles pour Internet Explorer

Publié le 04 juillet 2006

Deux nouvelles failles ont été découvertes dans Internet Explorer. Pour l'instant, ces failles n'ont pas été exploitées, elles sont justes à l'état de preuve. Microsoft a reconnu l Lire la suite

Un ver pour AIM

Publié le 16 juin 2005

Pendant une heure et demie hier les utilisateurs du service de messagerie instantanée d’AOL, AIM, ont été la cible d’un nouveau ver. Celui-ci arrive sous forme d’un message provenant d’un de vos contacts, lui-même infecté, et contient un lien vers un f Lire la suite

Les Mac users ont l'esprit plus ouvert

Publié le 17 janvier 2008

Une étude de Mindset Media a révélé que les personnes ayant l’esprit ouvert ont plus de chance d’acheter un Mac. Lire la suite

Les derniers tests

Un dual core à 3,8 GHz pour 100 euros

Publié le 28 novembre 2008

Comment obtenir un dual core Intel à 3.8 GHz voir 4 GHz pour 100 € ? Grâce à la magie de l'overclocking, et aux quelques conseils prodigués dans ce guide ! Lire la suite

Windows 7 : premier point sur les performances

Publié le 26 novembre 2008

Microsoft a annoncé que Windows 7 serait plus rapide et consommerait moins de ressources que Windows Vista. Qu’en est-il de la première version massivement distribuée aux développeurs ? Peut-elle déjà tenir la comparaison face à Windows Vista ? Lire la suite

Quel récepteur TNT choisir ?

Publié le 24 novembre 2008

Avec l’arrivée massive de la TNT, il convient de ne pas se tromper lors du choix de son récepteur TNT. Que vous le vouliez compatible HD, avec ou sans disque dur ou équipé de fonctions annexes, suivez notre guide pour bien choisir votre récepteur TNT. Lire la suite

Les jeux VS la réalité, deuxième partie : le cinéma est-il un bon exemple ?

Publié le 24 novembre 2008

Après nous être attardés dans notre premier article sur l’évolution des jeux et personnages, la gestion des éclairages ainsi que l’effet de relief sur les surfaces, cette deuxième partie va nous permettre de faire le point sur les effets comme le motion b Lire la suite

Les téléchargements
  FORUM Tom's Hardware » Programmation » VB / VBA / VBS » vérifier si un fichier est déja ouvert
 

vérifier si un fichier est déja ouvert

Il y a 502 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici



Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : vérifier si un fichier est déja ouvert
 
Plus d'informations

Bonjour,
Je voudrais savoir comment vérifier qu'un fichier est ouvert.
En effet, j'aimerais lancer une macro d'export vers un fichier précis(D:\toto.xls) mais si celui est déja ouvert ou utilisé ma macro d'export ne fonctionne pas et mon logiciel plante

Le bur de savoir si ce fichier est ouvert est de pouvoir le fermer l'application Excel qui lui correspond (car fichier masqué) si l'utilisateur ouvre un autre fichier excel bah il aura un fenpere vide.

Merci de votre aide

Liens sponsorisés


Inscrivez-vous ou connectez-vous pour masquer ceci.

zeb
Profil : Modérateur libre

Utilise la fonction GetObject.
Ne t'ai-je pas déjà parlé de cette fonction ? ...... [:patch] ...... ;)


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

Bonsoir

Function VerifOuvertureClasseur(Fichier As String) As Boolean
Dim n As Integer
On Error Resume Next
n = FreeFile()
Open Fichier For Input Lock Read As #n
Close n
If Err.Number = 0 Then VerifOuvertureClasseur = False
If Err.Number = 70 Then VerifOuvertureClasseur = True
On Error GoTo 0
End Function


Message édité par kiki29 le 23-02-2008 à 04:52:09
zeb
Profil : Modérateur libre

Mais quelle horreur !!!!!!!!!! Kiki, ton code fonctionne, et tu réponds exactement à la question de darksoilt. C'est ça le pire.

Mais bon sang, apprenez à coder proprement. Quand on ouvre une session, un fichier, on en garde un descripteur pour pouvoir le fermer proprement.

Pour vérifier si Excel tient un fichier, on parcourt toutes les sessions pour trouver laquelle.

En plus, GetObject() le fait pour nous.


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

Eh oui cela fait bien ch... les mutawas


Message édité par kiki29 le 25-02-2008 à 07:04:25
zeb
Profil : Modérateur libre

:lol:

Me voilà catalogué 'gestapo du code' ? :(
kiki, un vrai mutawa aurait censuré ton code. :o


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

j'ai retrouvé l'origine de ce code, dans la FAQ de Developpez.com , donc va le leur dire, à mon avis ils ont un autre niveau que ce forum avec son mutawa ( police religieuse en Arabie Saoudite ).Tu peux me rayer des cadres, je quitte définitivement ce forum


Message édité par kiki29 le 26-02-2008 à 19:49:42
zeb
Profil : Modérateur libre

Tant pis pour toi, tant pis pour nous.
Bye. Bye.

Je le répète, un mutawa aurait non seulement supprimé ton message mais en plus, il t'aurait banni. Il ne me semble pas que j'ai fait l'un ou l'autre.

___________________________


Taper au petit bonheur la chance en espérant provoquer une erreur ou pas est une façon de programmer particulièrement crade.

Par ailleurs, VB possède de grosses lacunes. De nombreux cas doivent donc être traités par des astuces plus ou moins sales. La FAQ de développez.com propose de telles astuces et il n'est pas malsain de s'en inspirer, ni même de les exploiter telle quelles.

En revanche, quand une solution propre et efficace existe, c'est elle qu'il faut implémenter.

Coder propre, c'est un ensemble de principes qui permettent d'obtenir des applications efficientes, facile à maintenir, facile à débugger. Les virus et autres malwares ne prolifèrent que parce que les programmes sont vite faits, mal faits, sans aucune précaution, ni réflexion. Au niveau d'une petite macro en VBA, cela peut sembler anodin, c'est un tel état d'esprit que je ne peux m'empêcher de le signaler.

Citation :

Mais bon sang, apprenez à coder proprement


En m'insurgeant ainsi, je ne m'attaquais pas à Kiki en particulier, mais à la tendance générale. Si certains se sentent visés, qu'ils y réfléchissent plutôt que de fuir.


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

Dommage que kiki le prenne comme ca

Sinon j'ai essayé son code cela fonctionne

Code :
  1. If ouvert Then
  2. '    Workbooks("C:\Temp\e_analyse_croisée.xls" ).Close SaveChanges:=False
  3.     Set utilise = GetObject("C:\Temp\e_analyse_croisée.xls" ) utilise.Close
  4.     End If



le probleme c'est que mon classeur se ferme et pas mon appli
comment mettre le getobcject en lien avec appli
appli est déclaré comme suivant

Code :
  1. dim appli as Excel.application


Message édité par darkspoilt le 05-03-2008 à 16:21:49
zeb
Profil : Modérateur libre

Set utilise = GetObject("C:\Temp\e_analyse_croisée.xls" )


Comment as-tu déclaré ton objet utilise ?
[ ] Pas de déclaration, je n'utilise pas l'Option Explicit
[ ] Dim utilise As Variant
[ ] Dim utilise As Workbook

 

(Si jamais tu me coches la première case, je boycotte tes questions :fou: )

 

Dans les autre cas, voici un exercice :

Code :
  1. Dim utilise As Variant
  2. Stop
  3. Set utilise = GetObject("C:\Temp\e_analyse_croisée.xls" )
  4. Stop
 

Ouvre dans une autre session Excel le fichier e_analyse_croisée.
Puis exécuter ce petit code. Le debugger devrait s'arrêter sur la ligne 2.
Ajoute utilise aux espions. (Affichage > Fenêtre Espions)
Tu devrais voir une variable vide de type Variant.
Appuie sur F5, la ligne 3 s'exécute, puis le débugger s'arrête de nouveau, ligne 4. Observe ta variable utilise dans la fenêtre Espions. Elle est de type Workbook. On aurait donc pu commencer par là !! :)

 

Clique sur le + et parcours les propriétés de ton objet. Comme tout objet de type Workbook, utilise pointe vers l'instance d'Excel qui l'a chargé. Donc pour fermer :

Code :
  1. Dim xl_a_fermer As Excel.application
  2. Dim wk_a_fermer As Workbook
  3. Dim wb As Workbook
  4. Dim OnFerme As Boolean
  5. On Error Resume Next
  6. Set wk_a_fermer = GetObject("chemin/fichier.xls" )
  7. If IsEmpty(wk_a_fermer) Then MsgBox "Pas trouvé. Faut faire quelque chose là !"
  8. On Error Goto 0
  9. Set xl_a_fermer = wk_a_fermer.Application
  10. wk_a_fermer.Close
  11. ' // A priori
  12. OnFerme = True
  13. ' // Mais vérifier s'il ne reste pas un autre classeur ouvert dans cette instance d'Excel !!!!
  14. For Each wb In xl_a_fermer.Workbooks
  15.     Debug.Print wb.Name
  16.     ' // Il reste des trucs ouverts !!!
  17.     ' // Vérifier de quoi il s'agit (PERSO.XLS par exemple) et décider si on peut fermer ou pas
  18.     OnFerme = False
  19. Next
  20. If OnFerme Then xl_a_fermer.Quit


Message édité par zeb le 06-03-2008 à 17:24:34

---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

j'ai déclaré utilise comme suivant

Code :
  1. Dim utilise as Workbook



Je veux bien etre des fois crade mais il y a des limites

Sinon je ne sais pas pkoi mais il ne rentre pas ds ta boucle each

en tout cas c'était la ligne

Code :
  1. set appli = utilise.application



mais ta méthode each ne fonctionne pas ca ne veut pas rentrer ds la boucle j'essai de voir pkoi mais je ne voit pas


Message édité par darkspoilt le 06-03-2008 à 10:04:02
zeb
Profil : Modérateur libre

Code :
  1. Dim utilise as Variant
  2. Set utilise = GetObject("chemin/fichier.xls" )


Ce n'est pas forcément crade. Pour une fois.
Cela dépend du contexte.
Imagine que l'utilisateur choisisse un classeur nommé fichier.doc !
(Quel con cet utilisateur :pfff:)

Donc le fichier pourra être ouvert et on pourra ensuite vérifier qu'il s'agit bien d'un classeur Excel.

-----------------------

Une instance d'Excel peut contenir plusieurs classeurs.
S'il ne rentre pas dans la boucle, c'est que tout va bien, il n'y a avait que le classeur à fermer dans cette instance d'Excel.

En regardant mieux le code proposé, j'aperçois un ptit bug. Il faut sortir la ligne 19 de la boucle et la mettre avant la ligne 14. Ben, oui, sinon la variable n'est pas initialisée :/
(Quel con ce zeb :pfff:)


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

oui et remplacer wk_a_fermer par xl_a_fermer
dans la boucle car si tu as testé ca plante!! lol (j'ai fais la modif avant de lancer le prog) j'esssai de comprendre ce que j'écris :)


Message édité par darkspoilt le 06-03-2008 à 14:19:23
zeb
Profil : Modérateur libre

par xl_a_fermer, évidemment.

J'édite...


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations
n°37996
06-03-2008 à 14:17:28