Ne pas avoir de message si on ouvre une 2eme fois un fichier

gourdin

XLDnaute Impliqué
Bonsoir,

Soit dans "fichier1.xls" une macro qui ouvre "fichier2.xls" et réalise des actions dans ce fichier.

Si le fichier2.xls est déjà ouvert et que je lance la macro je ne souhaite pas que le message "le fichier2.xls est déjà ouvert etc..." apparaisse et donc que la macro n'ouvre pas une deuxième fois ce fichier mais réalise néanmoins les actions dans ce fichier

Merci
 
G

Guest

Guest
Re : Ne pas avoir de message si on ouvre une 2eme fois un fichier

Bonsoir,

Code:
Sub TrucMachin()
    If GetClasseur("fichier2.xls") Is Nothing Then
        'J'ouvre le classeur
    End If
    'Je lance la macro
End Sub
Function GetClasseur(StrNomFichier As String) As Workbook
    On Error Resume Next
    Set GetClasseur = Workbooks(StrNomFichier)
End Function

A+
 

Lermiton

XLDnaute Nouveau
Re : Ne pas avoir de message si on ouvre une 2eme fois un fichier

Bonsoir gourdin

Une solution avec la fonction "FichierOuvert" :
Code:
Sub Macro_du_Fichier1()
    If FichierOuvert("Fichier2.xls") = False Then
        ' Placer ici la ligne ouvrant le fichier 2
    End If
    
Rem     Faire suivre par les actions à exécuter sur le fichier 2

End Sub

Function FichierOuvert(NomFichier As String) As Boolean
    Dim i As Integer
    FichierOuvert = False
    For i = 1 To Workbooks.Count
        If Workbooks(i).Name = NomFichier Then
            FichierOuvert = True
            Exit For
        End If
    Next
End Function

Bonne nuit

Oups... Hasco a fait plus vite et plus court que moi !
 
Dernière édition:

gourdin

XLDnaute Impliqué
Re : Ne pas avoir de message si on ouvre une 2eme fois un fichier

Bonjour,

J'ai essayé d'adapter vos 2 codes à ma macro initiale mais mes compétences sont dépassées.

C'est pourquoi je me permet de vous soummettre un bout de code (simplifié) de ma macro initiale

Cette macro ouvre par double clic le fichier2.xls et donne un message d'erreur si le fichier n'a pas été trouvé. Cette macro fonctionne très bien (merci le forum).

Je souhaite donc ajouter la possibilité que lorsque le fichier2.xls est déjà ouvert il n'y ait pas de message d'excel "fichier déjà ouvert etc.."

Ci-après mon code macro :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

Dim monfichier As String
monfichier = ThisWorkbook.Path & "\fichier2.xls"

If Dir(monfichier, vbDirectory) = "" Then
MsgBox "ERREUR"

Exit Sub

Else
Workbooks.Open Filename:=monfichier
End If

End Sub


Merci,

NB : si besoin je peux joindre un document avec les 2 fichiers et la macro
 
Dernière édition:

Lermiton

XLDnaute Nouveau
Re : Ne pas avoir de message si on ouvre une 2eme fois un fichier

Bonjour le forum

Ton code appelle les remarques suivantes, gourdin :

1 : Tâche désormais d'utiliser la balise "code" (le bouton "#" de la barre d'outils des messages) pour communiquer ton code, c'est plus facile à lire.

2 : la ligne
Code:
If Dir(monfichier, vbDirectory) = "" Then
comporte une erreur : "monfichier" n'est pas un dossier (un "Directory"), il faut écrire :
Code:
If Dir(MonFichier, vbNormal) = "" Then
et cette ligne ne fait que vérifier que le fichier à ouvrir existe bien, elle ne vérifie pas s'il est déjà ouvert.

3 : Ton code ne tient pas compte de ce que Hasco et moi-même t'avons proposé pour éviter le message Excel si "Fichier2" est déjà ouvert. Utilise donc l'une des fonctions que nous t'avons proposées. Mais pour cela, il faut que la variable "monfichier" ne désigne que le nom du fichier (avec son extension ".xls") et non pas son chemin d'accès complet.

4 : pour éviter que le double clic ne fasse double effet en éditant la cellule dans laquelle on clique, il faut ajouter la commande "Cancel = True"

Au final, et en utilisant la fonction de Hasco (plus concise que la mienne), ça donnerait ceci :
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim MonFichier As String
Dim Dossier As String

Cancel = True

Dossier = ThisWorkbook.Path & "\"
MonFichier = "fichier2.xls"

If Dir(Dossier & MonFichier, vbNormal) = "" Then
    MsgBox MonFichier & " est introuvable dans " & Dossier, 16, "FICHIER MANQUANT"
    Exit Sub
ElseIf GetClasseur(MonFichier) Is Nothing Then
    Workbooks.Open Filename:=Dossier & MonFichier
Else
    MsgBox MonFichier & " est déjà ouvert", 64, "FICHIER DEJA OUVERT"
End If

End Sub

Function GetClasseur(StrNomFichier As String) As Workbook
    On Error Resume Next
    Set GetClasseur = Workbooks(StrNomFichier)
End Function

Bonne après-midi.
 

Discussions similaires

Réponses
16
Affichages
989

Statistiques des forums

Discussions
312 490
Messages
2 088 879
Membres
103 981
dernier inscrit
vinsalcatraz