Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Sub TestOuvert
For Each WB In Workbooks
If WB.Name = FichierAOuvrir Then
MsgBox (FichierAOuvrir & ' est déjà ouvert.' & Chr(10) _
& 'Fermer le si vous voulez faire un nouveau traitement.' & Chr(10) _
& Chr(10) & 'La routine est arrètée.')
DejaOuvert = True
GoTo LaFin
End If
Next WB
LaFin:
End Sub
Ce code peut être insérer dans n'importe quelle macro.
j ai inséré le code dans ma macro mais ca ne compile pas !!!
Sub planning_desautels()
Application.ScreenUpdating = False
Sub TestOuvert()
FichierAOuvrir = ActiveWorkbook.Name
For Each WB In Workbooks
If WB.Name = FichierAOuvrir Then
;MsgBox (FichierAOuvrir & ' est déjà ouvert.' & Chr(10) _
&n bsp; & 'Fermer le si vous voulez faire un nouveau traitement.' & Chr(10) _
&n bsp; & Chr(10) & 'La routine est arrètée.')
DejaOuvert = True
;GoTo LaFin
End If
Next WB
C'est normal.
Je vois dans les quelques lignes des trucs assez bizarres. Il doit y avoir embrouille avec mon copier/coller.
De plus, un seul 'Sub quelque chose ()' est suffisant.
Si tu veux insérer ce traitement dans une procédure existante, fais le sans les deux lignes 'Sub TestOuvert()' ni 'End Sub' juste après 'LaFin:'.
D'ailleurs en parlant de ça. Ce renvoi à la fin est fait pour qu'aucune action ne soit exécutée si on s'apperçoit que le fichier est déjà ouvert.
L'étiquette 'LaFin:' doit donc être juste avant 'End Sub' qui par définition est la dernière ligne d'un programme.
On peut remplacer 'Goto LaFin' par 'Exit Sub' qui aura pour effet d'arrêter le 'Sub' en cours.
La ligne 'DejaOuvert=True' ne sert à rien ici. Elle me servait juste à renseigner une variable qui est untilisée dans d'autres procédures de mon projet. Tu peux supprimer.
Maintenant ce code peut être appeler indépendamment.
Pour l'appeler depuis un autre programme, il suffit, dans cet autre programme, d'inscrire la ligne 'TestOuvert' à l'endroit où on veut voir ce traitement s'exécuter.
J'espère avoir réussi à apporter des précisions et pas trop de noeuds de cerveau.
Abel
Code:
Sub TestOuvert ()
For Each WB In Workbooks
If WB.Name = FichierAOuvrir Then MsgBox (FichierAOuvrir & ' est déjà ouvert.' & Chr(10) _
& 'Fermer le si vous voulez faire un nouveau traitement.' & Chr(10) _
& Chr(10) & 'La routine est arrètée.')
Exit SubEnd If
Next WB
End Sub
debutant je te propose le code ci dessous, et la demonstration dans le fichier joint pour ta demande que j'espère avoir bien saisie .
Code:
Option Explicit
Function Ouvert(ByVal NomFichier$) As Boolean 'Ti
Dim Wbk As Workbook
On Error GoTo fin
Set Wbk = Workbooks(NomFichier)
Ouvert = True
fin:
End Function
Sub test()
Dim Wbk As Workbook, Nom$, Chemin$
Chemin = ThisWorkbook.Path & '/'
Nom = InputBox('Indiquer le nom du classeur a ouvrir')
If Nom = '' Then Exit Sub
If Ouvert(Nom) = False Then Workbooks.Open Chemin & Nom & '.xls'
End Sub
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.