oui mais soit il me met tous les fichier déjà ouvert soit (si j'enleve les not apres les if ) il ouvre à chaque fois Mensuel (soit en normal soit en lecture seule)
Version imprimable
oui mais soit il me met tous les fichier déjà ouvert soit (si j'enleve les not apres les if ) il ouvre à chaque fois Mensuel (soit en normal soit en lecture seule)
Citation:
Envoyé par bbil
oui j'ai vu il faut rajouter un ".xls" sur l'appel des fonction de test d'ouverture...Citation:
Envoyé par Nom
... j'ai édité et corrigé le code...Code:If Not FichierEstOuvert("C:\Mes documents\Angelo\Conception\Apac Noisy\Domaine Chèque\Mensuel.xls") Then
semble marché je vais faire des tests plus appronfondis pour voir
un truc m'echappe quand même :
dans
on a besoin de mettre le .xlsCode:If Not FichierEstOuvert("C:\Mes documents\Angelo\Conception\Apac Noisy\Domaine Chèque\Mensuel1.xls") Then
et pour
inutile :?: [/code]Code:
1
2
3 'Si le fichier 1 n'est pas ouvert je l'ouvre... Workbooks.Open ("C:\Mes documents\Angelo\Conception\Apac Noisy\Domaine Chèque\Mensuel1")
Vérifie parce que là tu m'étonnerais beaucoup. Cela voudrait dire que tu as toujours l'erreur 9 et donc que VBA a un pb ce que je ne crois pas.Citation:
non la il m'affiche à chaque fois le message Fichier utilisé par un autre utilisateur ou déjà ouvert pourtant rien n'est ouvert
Donc vérifie qu'excel n'est pas ouvert une deuxième fois... :!: sur ton propre poste
Tu dis
NB - Ce code fonctionne parfaitement chez moi
ben la fonction ...FichierEstOuvert essai d'ouvrir en lecture seule le fichier donné en paramétre...
pour l'ouverture du classeur Excel ... la fonciton Workbooks.Open .. ouvre le fichier en paramétre.. mais comme celui-ci est un fichier excel... celle-ci rajoute automatiquement l'extension .xls... si aucune extension n'est précisée...
je vais t'etonner alors car j'ai même redémarrer le pc, ouvert le fichier ou j'ai mis la macro que tu ma donner lancer la macro et pareilCitation:
Vérifie parce que là tu m'étonnerais beaucoup. Cela voudrait dire que tu as toujours l'erreur 9 et donc que VBA a un pb ce que je ne crois pas.
Donc vérifie qu'excel n'est pas ouvert une deuxième fois... sur ton propre poste
Tu dis
NB - Ce code fonctionne parfaitement chez moi
en + j'ai vonlontairement mis un mauvais chemin pour les fichiers et pareil il me dis même pas que le chemin est pas bon 8O
Ta question n'était pas sur le chemin mais sur l'ouverture d'un fichier déjà ouvert. S'il y a une erreur de chemin, le code d'erreur n'est pas 9 mais 1004 et ce n'était pas la question. :wink:
A+
salut ouskel'n'or .. est-tu sur que le dernier code que tu as posté et le bon ...
2 Choses la boucle for ..
c'est pas plutot 1 to 3...Code:For i = 1 To 1
au premier lancement tu n'as aucun fichier ouvert... donc Worbooks(NomFich).Activate provoque une erreur ( ? 9) .
:arrow: Message : Fichier utilisé...
:wink:
Bonjour tout le monde
J'ai une question par rapport à ton code Ouskel'n'or
En fait pourquoi n'y a t il pas besoin d'un "end if" est ce a cause de la gestion d'erreur qui le rends inutile ??Citation:
Envoyé par ouskel'n'or
PS je savais pas ou mettre ce post dite moi s'il n'est pas a sa place..
Vu que le posteur initial n'a plus daigné nous dire où en était son problème, il n'y a pas de mal à poser ta question ici.
Réponse:
Il ne faut pas de End If si l'action suit le Then sur la même ligne.
Je te remercie AlainTech la réponse était toute simple et peut permettre d'aléger le code, mais peut etre perd on en lisibilité ou plutot c'est une question d'habitude.
Encore merci et bonne continuation
Bien que, sans doute à cause de l'habitude, je trouve très lisible un "if ... then... LeTraitement" sur une même ligne, tu peux le mettre sur trois lignes
C'est pas gênant ;)Code:
1
2
3 if err <> 0 then Workbooks.Open Filename:=NomDuFichier endif
:oops: oublié de mettre délestageCitation:
Envoyé par AlainTech
finalement ce traitement m'ai plus utile j'ai changer de "stratégie " enfin on m'a fais changer et donc un seul utilisateur à la fois sera amené a ouvrir mes fichiers ...
Salut,
Le code de bouley est dérivé de ce code je pense:
https://support.microsoft.com/en-us/kb/291295
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 Sub TestFileOpened() ' Test to see if the file is open. If IsFileOpen("c:\Book2.xls") Then ' Display a message stating the file in use. MsgBox "File already in use!" ' ' Add code here to handle case where file is open by another ' user. ' Else ' Display a message stating the file is not in use. MsgBox "File not in use!" ' Open the file in Microsoft Excel. Workbooks.Open "c:\Book2.xls" ' ' Add code here to handle case where file is NOT open by another ' user. ' End If End Sub ' This function checks to see if a file is open or not. If the file is ' already open, it returns True. If the file is not open, it returns ' False. Otherwise, a run-time error occurs because there is ' some other problem accessing the file. Function IsFileOpen(filename As String) Dim filenum As Integer, errnum As Integer On Error Resume Next ' Turn error checking off. filenum = FreeFile() ' Get a free file number. ' Attempt to open the file and lock it. Open filename For Input Lock Read As #filenum Close filenum ' Close the file. errnum = Err ' Save the error number that occurred. On Error GoTo 0 ' Turn error checking back on. ' Check to see which error occurred. Select Case errnum ' No error occurred. ' File is NOT already open by another user. Case 0 IsFileOpen = False ' Error number for "Permission Denied." ' File is already opened by another user. Case 70 IsFileOpen = True ' Another error occurred. Case Else Error errnum End Select End Function
@+
Bonjour,
Avez vous essayé ce code, qui vérifie à l'ouverture du fichier s'il est en lecture seule ? à mettre dans THISWORKBOOK
Code:
1
2
3
4
5
6
7
8
9
10
11 Private Sub Workbook_Open() isreadonly End Sub Sub isreadonly() If ThisWorkbook.ReadOnly Then MsgBox "Vous ne pouvez ouvrir actuellement ce fichier" ThisWorkbook.Close False End If End Sub