VBA ne pas pouvoir ouvrir fichier si celui-ci ouvert ailleurs

Résolu/Fermé
Pavek - 21 juin 2016 à 18:16
 Pavek - 22 juin 2016 à 22:12
Bonjour tout le monde,

Je vous expose mon problème :

J'ai un premier fichier fichier (1). Dedans, y a un bouton qui lance une macro. Cette macro ouvre un autre fichier (2). J'aimerais qu'on ne puisse pas ouvrir ce fichier (2) depuis la macro du fichier (1) si ce fichier (2) est déjà ouvert sur un autre poste, par un autre utilisateur... Et pourquoi pas afficher un message d'erreur.

Voici le code pour l'instant qui permet simplement d'ouvrir le fichier ou de l'activer :

On Error Resume Next
Workbooks("Fichier (2)").Activate
If Err.Number <> 0 Then
Application.Workbooks.Open "X:\...\Fichier (2).xlsm"
End If
On Error GoTo 0

Merci d'avance pour votre temps!
A voir également:

2 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
21 juin 2016 à 18:46
0
Bonjour,

Et bien,ça ne répond pas exactement à ma question... Je voulais qu'au moment où j'appuie sur le bouton, j'ai l'outil capture d'excel qui se lance (pour que je puisse sélectionner ce que je veux) et qu'après avoir fait ma sélection, la photo se colle à un endroit précis, aux bonnes dimensions... et c'était au moment de lancer l'outil capture d'excel qu'il y a un problème

Alors il y a la possibilité d'utiliser l'outil appareil photo, mais ça ne permet pas de faire des capture ailleurs que sur l'excel

Un morceau de code proposé, mais qui permet de faire une capture d'écran (et non seulement juste une zone voulu)

Et sinon je ne sais pas utilisé les 2 autres programmes... Mais je ne pense que ce soit la façon la plus simple...

Mais finalement je m'en suis accommodé, je me place dans une cellule, je clique sur l'outil capture d'excel, je capture, l'image se colle, je clique sur un bouton qui lance une macro qui redimensionne et place l'image comme je veux

Donc merci infiniment pour ton temps
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
21 juin 2016 à 22:04
Bonjour,

en tout cas ça ne donne pas envie de passer du temps pour t'aider si toi tu n'es même pas prêt à offrir 30s pour faire un retour et dire merci...
eric
0
Pavek > eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024
21 juin 2016 à 22:09
A vrai dire j'ai dis merci, mais je n'ai pas fini de plancher sur le sujet... Mais bien évidement que je remercie énormément tout ceux qui prennent de leur temps pour m'aider!
0
thev Messages postés 1852 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 23 avril 2024 681
Modifié par thev le 21/06/2016 à 20:13
Bonjour,

Vous pouvez utiliser cette fonction

 
Function IsWorkBookOpen(Nom_fichier As String) As Boolean

Dim no_fichier As Long

On Error Resume Next
no_fichier = FreeFile()
Open Nom_fichier For Binary Access Read Lock Read Write As #no_fichier
If Err.Number = 0 Then
IsWorkBookOpen = False
Else
IsWorkBookOpen = True
End If
Close no_fichier

End Function

--
 
0
Ah merci beaucoup thev!

Je vais essayer ça. Faut bien que j'écrive ce code dans un module du fichier (2) (celui qui ne doit pas s'ouvrir s'il est déjà ouvert chez un autre utilisateur) ?
0
Ça marche parfaitement bien!

Cependant, ça ne fonctionne pas si la fonction est dans le fichier à ouvrir... Je vous explique : si le fichier est déjà ouvert et que je l'ouvre, j'ai l'information comme quoi le fichier est déjà ouvert et si je veux l'ouvrir en lecture seule. Mais si j'ouvre le fichier (2) avec la macro du fichier (1), le fichier s'ouvre automatiquement et se met en lecture seule (pas de message). Mais j'ai réussi à adapter ce code pour contrer cela

Donc maintenant, je suis informé à chaque que le fichier est déjà ouvert : "voulez ouvrir le fichier en lecture seule : Annuler ou Oui". Quand je clique sur annuler, ça n'ouvre pas le fichier mais continuer à exécuter le code qui sui dans le fichier (1), ce qui créer donc des erreurs ... j'ai donc du gérer ces erreurs

Au final le résultat est bon, c'est ce que je voulais!

Mille merci thev!
0