oui vous avez raison tous les deux
je suis aller voir un peu de ce coté il semblerait que la gestion soit une obligation avec la manipulation de cet object
je vais creuser![]()
Re
je creuse encore pour le isobject mais ca me parait obscure puisque tout les exemples que j'ai trouvé non pas le problème d'erreur sur l'existence de l'instance du classeur nommé en argument
en attendant j'ai trouvé autre chose
tester dans une autre instance de l'application Excel l'ouverture du fichier et voir si le readonly est a true ou false
un peu alambiqué mais intéressant tout de même
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Function ClasseurEstOuvert(strNomFichierComplet As String) As Boolean Set objExcel = New Excel.Application With objExcel ' L'instance d'Excel qui porte le fichier ne doit pas être visible .Visible = False .Workbooks.Open (strNomFichierComplet) ' Si le classeur est déjà ouvert cette propriété sera à True ClasseurEstOuvert = .Workbooks(1).ReadOnly .Quit End With ' Ne pas oublier de supprimer la référence à Excel ' sinon une autre instance fantôme hantera le système... Set objExcel = Nothing End Function
Je ne vois pas ce qui te gêne Patrick, l'instruction On Error Resume Next n'est active que dans la mini fonction,
elle ne s'applique pas à la procédure principale …
Une autre manière dans un message de février et encore une autre cette fois sans gestion d'erreur
si le nom de la feuille est aussi connu dans un autre d'avril …
Re
rien ne me gène MarcL
mais je part du principe que si on peut l'éviter on l'évite
alors je creuse aussi pour ma culture personnelle
et il n'est pas nécessaire de dire que je suis tenace![]()
![]()
Si la gestion des erreur est obligatoire, autant faire comme si le fichier était ouvert!
autre solution
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Function IsOpen(Name) As Boolean dim Wb IsOpen=true on error resume next set wb= Workbooks(Name) if err<>0 then IsOpen=false err.clear set wb=nothing on error goto 0 End Function
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 Type FOpen wb As Workbook msg As String IsOpen As Boolean End Type Sub test() Dim F As FOpen F = IsOpen("C:\MyTest", "Nouveau Feuille Microsoft Office Excel.xls") MsgBox F.msg End Sub Function IsOpen(Rep As String, striName As String) As FOpen Dim F As FOpen IsOpen.IsOpen = True If Right(Rep, 1) <> "\" Then Rep = Rep & "\" On Error Resume Next Set IsOpen.wb = Workbooks(striName) If Err = 0 Then IsOpen.msg = "Fichier déjà ouvert!": On Error GoTo 0: Exit Function Err.Clear Set IsOpen.wb = Workbooks.Open(Rep & striName) If Err = 0 Then IsOpen.msg = "Fichier a été ouvert!": On Error GoTo 0: Exit Function Err.Clear Set IsOpen.wb = Nothing IsOpen.msg = "Fichier introuvable!": IsOpen.IsOpen = False: On Error GoTo 0 End Function
Dernière modification par Invité ; 12/05/2014 à 10h34.
ohlala !
que de solutions !!
j'ai repris la première solution que vous m'avez apporté avec un test If tel que :
mes problématiques restantes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 If Box_BE_bud.Value = True Then ThisWorkbook.Activate Sheets("Commandes").Select fichierBEbud = Range("B6").Value & ".xlsm" cheminBEbud = Range("D6").Value ouvreBEbud = cheminBEbud & "\" & fichierBEbud MsgBox ThisWorkbook.Name For Each wb In Application.Workbooks If wb.Name = fichierBEbud Then ordre = "oui" Next wb If ordre = "oui" Then MsgBox "le classeur est deja ouvert" Else MsgBox "le classeur n'est pas ouvert" 'action a faire (reste de ta macro ) ChDir cheminBEbud Workbooks.Open Filename:=ouvreBEbud End If End If
- la gestion de l'erreur si le fichier n'existe pas ou n'est pas bien nommé...
vous m'avez conseillé d'éviter la gestion de l'erreur dans la macro. je pense que je vais laisser la macro seule déclencher l'erreur. en cliquant sur fin, l'utilisateur arrêtera l’exécution de la macro.
- je vais réaliser une boucle pour tester l'existence de plusieurs classeurs. en réalité, je passe par un UF pour l'ouverture des fichiers. dans le UF il y a 5 boutons incluant 4 boutons (check box) associés à un fichier et 1 bouton pour "tous". je veux que quand bouton1 est vraie, on teste l'ouverture du fichier et/ou on l'ouvre, puis on test si bouton2 est vraie... je vais me pencher désormais là dessus !
merci à tous pour votre collaboration. il est vrai que mon niveau excel est bien inférieur au votre et que j'ai du mal à suivre toutes les conversations ! mais merci bcp !!!
Modifie ceci
comme ceciIf ordre = "oui" Then
MsgBox "le classeur est deja ouvert"
Else
MsgBox "le classeur n'est pas ouvert"
'action a faire (reste de ta macro )
ChDir cheminBEbud
Workbooks.Open Filename:=ouvreBEbud
End If
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 If ordre = "oui" Then Windows("ouvreBEbud").activate Else ChDir cheminBEbud Workbooks.Open Filename:=ouvreBEbud End If
en effet, c'est plus logique ! ^^
Pour vérifier l'existence du fichier
If Dir(cheminBEbud & "\" & fichierBEbud, vbArchive) <> "" then 'Le fichier existe
youpiiii ! c'est parfait pour moi !!
merci beaucoup
je suis dans la création de ma boucle...
ci dessous le code que j'ai créé. il y a une erreur de compilation au niveau du "nombox" - qualificateur incorrecte.
comment dois-je nommer ce nombox si je veux qu'il correspondent au bouton du UF en changeant de nom. (c'est une variable qui est défini par les cellules de A6 à A9 dans ma feuille "commandes". le nom des boutons dans UF est identique à la valeur de la cellule A6 à A9...
est-ce un range, string, object ??
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 Dim cell, plage As Range Dim nombox As String Dim i As Integer Dim chemin, nomfichier, ouvrefichier As String Set plage = Range("A6:A9") For Each cell In plage i = cell.Row nombox = "Box_" & cell.Value If nombox.Value = True Then 'nombox.value est le nom de mon checkbox 1, puis checkbox2 défini en colonne A6 à A9 et prend une valeur différente... ThisWorkbook.Activate Sheets("Commandes").Select nomfichier = Range("B:" & i).Value & ".xlsm" chemin = Range("D:" & i).Value ouvrefichier = chemin & "\" & nomfichier MsgBox ThisWorkbook.Name For Each wb In Application.Workbooks If wb.Name = nomfichier Then ordre = "oui" Next wb If ordre = "oui" Then Windows("nomfichier").Activate Else MsgBox "le classeur n'est pas ouvert" If Dir(chemin & "\" & nomfichier, vbArchive) <> "" Then 'Le fichier existe MsgBox "le fichier existe dc on ouvre" ChDir chemin Workbooks.Open Filename:=ouvrefichier Else MsgBox "Le fichier " & nomfichier & " est introuvable ou n'existe pas !" & Chr(10) _ & "Veuillez vérifier l'existence du fichier, son nom et son chemin d'accès dans la feuille Commandes." _ , vbOKOnly + vbCritical, "ERREUR OUVERTURE FICHIER" End If End If End If Next cell
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager