Rapport de message :*
 

Re: Comment tester si un fichier excel est déjà ouvert dans une macro

Titre du sujet : Re: Comment tester si un fichier excel est déjà ouvert dans une macro
par Basket le 16/02/2011 09:16:51

Sub Maj_donnees()
'
' Maj_donnees Macro
' Macro enregistrée le 28/12/2010 par Olivier
'
' Touche de raccourci du clavier: Ctrl+j
'
   
'   Ouverture du fichier ci-dessous avec le no du fichier en paramètre récupéré
'   en cellule G2
'   fic = "\\naoned\sous-traitant\AdjustHR\03 - Fiche navette\FN 018\Suivi Fiche 018"
   
    Dim fic1 As String
    Dim fic2 As String
    Dim fic3 As String
    Dim fic4 As String
    Dim fic5 As String
    Dim fic  As String
    fic1 = "\\naoned\sous-traitant\AdjustHR\03 - Fiche navette\FN "
    fic2 = "Suivi Fiche "
    fic3 = "0"
    fic33 = "00"
    fic4 = "='[Suivi Fiche "
    fic5 = ".xls]Besoin'!"
    fic6 = ".xls"
    DATED = "R1C5"
    HEURED = "R1C6"
    NOFICHE = "R1C3"
    NOMD = "R3C3"
    CVREC = "R4C9"
    DATELIM = "R5C11"
    HEURELIM = "R5C12"
    CVDLIM = "R5C13"
    TJMO = "R1C14"
    TJMN = "R2C14"
    ACCUS = "R4C5"
    CV1 = "R7C1"
    CV1H = "R7C2"
    TYPEB = "R4C3"
    NBCVR = "R1C9"
    NBCVOK = "R2C9"
    NBCV48 = "R3C9"
    SLA = "R4C9"
    CVRET = "R1C12"
    ENT = "R3C12"
    RETOUR = "R4C12"
 
'   Détermination du nom du fichier à ouvrir
    fic = fic1 & Range(CStr("G2")) & "" & fic2 & Range(CStr("G2"))
    If Cells(2, 7).Value < 99 Then
      fic = fic1 & fic3 & Range(CStr("G2")) & "" & fic2 & fic3 & Range(CStr("G2"))
    End If
 
    If Cells(2, 7).Value < 10 Then
      fic = fic1 & fic33 & Range(CStr("G2")) & "" & fic2 & fic33 & Range(CStr("G2"))
    End If
 
' Test fichier ouvert
 
    If ClasseurEstOuvert(fic) Then
        MsgBox "Le fichier " & fic & " est ouvert." & vbLf & vbLf & "Arrêt de la procédure" & vbLf & vbLf & "Fermer le fichier et relancer"
    Else
 
        '   Ouverture du fichier
        Workbooks.Open Filename:=fic
   
        Windows("Suivi des besoins.xls").Activate
   
        '   Activation de la cellule pour mise à jour "Date de la demande"
        Range("B" + CStr(Range("G1"))).Select
        '   Constitution de la formule "='[Suivi Fiche 018.xls]Besoin'!R1C6" avec le 018 en paramètre
        formule = fic4 & Range(CStr("G2")) & fic5 & DATED
        If Cells(2, 7).Value < 99 Then
           formule = fic4 & fic3 & Range(CStr("G2")) & fic5 & DATED
        End If
        If Cells(2, 7).Value < 10 Then
           formule = fic4 & fic33 & Range(CStr("G2")) & fic5 & DATED
        End If
        ActiveCell.FormulaR1C1 = formule
   
        '   Activation de la cellule pour mise à jour "Heure de la demande"
        Range("C" + CStr(Range("G1"))).Select
        formule = fic4 & Range(CStr("G2")) & fic5 & HEURED
        If Cells(2, 7).Value < 99 Then
           formule = fic4 & fic3 & Range(CStr("G2")) & fic5 & HEURED
        End If
        If Cells(2, 7).Value < 10 Then
           formule = fic4 & fic33 & Range(CStr("G2")) & fic5 & HEURED
        End If
        ActiveCell.FormulaR1C1 = formule

        '   Activation de la cellule pour mise à jour "N° de Fiche"
        Range("E" + CStr(Range("G1"))).Select
        formule = fic4 & Range(CStr("G2")) & fic5 & NOFICHE
        If Cells(2, 7).Value < 99 Then
           formule = fic4 & fic3 & Range(CStr("G2")) & fic5 & NOFICHE
        End If
        If Cells(2, 7).Value < 10 Then
           formule = fic4 & fic33 & Range(CStr("G2")) & fic5 & NOFICHE
        End If
        ActiveCell.FormulaR1C1 = formule

        '   Activation de la cellule pour mise à jour "Nom du demandeur"
        Range("I" + CStr(Range("G1"))).Select
        formule = fic4 & Range(CStr("G2")) & fic5 & NOMD
        If Cells(2, 7).Value < 99 Then
           formule = fic4 & fic3 & Range(CStr("G2")) & fic5 & NOMD
        End If
        If Cells(2, 7).Value < 10 Then
           formule = fic4 & fic33 & Range(CStr("G2")) & fic5 & NOMD
        End If
        ActiveCell.FormulaR1C1 = formule
 
        '   Activation de la cellule pour mise à jour "CV Reçus sous 2 Jours"
        Range("J" + CStr(Range("G1"))).Select
        formule = fic4 & Range(CStr("G2")) & fic5 & CVREC
        If Cells(2, 7).Value < 99 Then
           formule = fic4 & fic3 & Range(CStr("G2")) & fic5 & CVREC
        End If
        If Cells(2, 7).Value < 10 Then
           formule = fic4 & fic33 & Range(CStr("G2")) & fic5 & CVREC
        End If
        ActiveCell.FormulaR1C1 = formule
 
        '   Activation de la cellule pour mise à jour "Date limite de traitement par Adjust"
        Range("K" + CStr(Range("G1"))).Select
        formule = fic4 & Range(CStr("G2")) & fic5 & DATELIM
        If Cells(2, 7).Value < 99 Then
           formule = fic4 & fic3 & Range(CStr("G2")) & fic5 & DATELIM
        End If
        If Cells(2, 7).Value < 10 Then
           formule = fic4 & fic33 & Range(CStr("G2")) & fic5 & DATELIM
        End If
        ActiveCell.FormulaR1C1 = formule

        '   Activation de la cellule pour mise à jour "Heure limite de traitement par Adjust"
        Range("L" + CStr(Range("G1"))).Select
        formule = fic4 & Range(CStr("G2")) & fic5 & HEURELIM
        If Cells(2, 7).Value < 99 Then
           formule = fic4 & fic3 & Range(CStr("G2")) & fic5 & HEURELIM
        End If
        If Cells(2, 7).Value < 10 Then
           formule = fic4 & fic33 & Range(CStr("G2")) & fic5 & HEURELIM
        End If
        ActiveCell.FormulaR1C1 = formule
   
        '   Activation de la cellule pour mise à jour "NB CV OK 48"
        Range("N" + CStr(Range("G1"))).Select
        formule = fic4 & Range(CStr("G2")) & fic5 & NBCV48
        If Cells(2, 7).Value < 99 Then
           formule = fic4 & fic3 & Range(CStr("G2")) & fic5 & NBCV48
        End If
        If Cells(2, 7).Value < 10 Then
           formule = fic4 & fic33 & Range(CStr("G2")) & fic5 & NBCV48
        End If
        ActiveCell.FormulaR1C1 = formule

        '   Activation de la cellule pour mise à jour "Accusé réception"
        Range("O" + CStr(Range("G1"))).Select
        formule = fic4 & Range(CStr("G2")) & fic5 & ACCUS
        If Cells(2, 7).Value < 99 Then
           formule = fic4 & fic3 & Range(CStr("G2")) & fic5 & ACCUS
        End If
        If Cells(2, 7).Value < 10 Then
           formule = fic4 & fic33 & Range(CStr("G2")) & fic5 & ACCUS
        End If
        ActiveCell.FormulaR1C1 = formule
   
        '   Activation de la cellule pour mise à jour "NB CV Reçus sous date limite de traitement"
        Range("P" + CStr(Range("G1"))).Select
        formule = fic4 & Range(CStr("G2")) & fic5 & CVDLIM
        If Cells(2, 7).Value < 99 Then
           formule = fic4 & fic3 & Range(CStr("G2")) & fic5 & CVDLIM
        End If
        If Cells(2, 7).Value < 10 Then
           formule = fic4 & fic33 & Range(CStr("G2")) & fic5 & CVDLIM
        End If
        ActiveCell.FormulaR1C1 = formule
   
        '   Activation de la cellule pour mise à jour "Heure Réception CV 1"
        Range("Q" + CStr(Range("G1"))).Select
        formule = fic4 & Range(CStr("G2")) & fic5 & CV1H
        If Cells(2, 7).Value < 99 Then
           formule = fic4 & fic3 & Range(CStr("G2")) & fic5 & CV1H
        End If
        If Cells(2, 7).Value < 10 Then
           formule = fic4 & fic33 & Range(CStr("G2")) & fic5 & CV1H
        End If
        ActiveCell.FormulaR1C1 = formule
   
        '   Activation de la cellule pour mise à jour "Type de besoin"
        Range("R" + CStr(Range("G1"))).Select
        formule = fic4 & Range(CStr("G2")) & fic5 & TYPEB
        If Cells(2, 7).Value < 99 Then
           formule = fic4 & fic3 & Range(CStr("G2")) & fic5 & TYPEB
        End If
        If Cells(2, 7).Value < 10 Then
           formule = fic4 & fic33 & Range(CStr("G2")) & fic5 & TYPEB
        End If
        ActiveCell.FormulaR1C1 = formule
   
        '   Activation de la cellule pour mise à jour "NB CV Reçu"
        Range("S" + CStr(Range("G1"))).Select
        formule = fic4 & Range(CStr("G2")) & fic5 & NBCVR
        If Cells(2, 7).Value < 99 Then
           formule = fic4 & fic3 & Range(CStr("G2")) & fic5 & NBCVR
        End If
        If Cells(2, 7).Value < 10 Then
           formule = fic4 & fic33 & Range(CStr("G2")) & fic5 & NBCVR
        End If
        ActiveCell.FormulaR1C1 = formule
   
        '   Activation de la cellule pour mise à jour "NB CV OK"
        Range("T" + CStr(Range("G1"))).Select
        formule = fic4 & Range(CStr("G2")) & fic5 & NBCVOK
        If Cells(2, 7).Value < 99 Then
           formule = fic4 & fic3 & Range(CStr("G2")) & fic5 & NBCVOK
        End If
        If Cells(2, 7).Value < 10 Then
           formule = fic4 & fic33 & Range(CStr("G2")) & fic5 & NBCVOK
        End If
        ActiveCell.FormulaR1C1 = formule
   
        '   Activation de la cellule pour mise à jour "NB CV RETENU"
        Range("U" + CStr(Range("G1"))).Select
        formule = fic4 & Range(CStr("G2")) & fic5 & CVRET
        If Cells(2, 7).Value < 99 Then
           formule = fic4 & fic3 & Range(CStr("G2")) & fic5 & CVRET
        End If
        If Cells(2, 7).Value < 10 Then
           formule = fic4 & fic33 & Range(CStr("G2")) & fic5 & CVRET
        End If
        ActiveCell.FormulaR1C1 = formule
   
        '   Activation de la cellule pour mise à jour "NB Entretien"
        Range("V" + CStr(Range("G1"))).Select
        formule = fic4 & Range(CStr("G2")) & fic5 & ENT
        If Cells(2, 7).Value < 99 Then
           formule = fic4 & fic3 & Range(CStr("G2")) & fic5 & ENT
        End If
        If Cells(2, 7).Value < 10 Then
           formule = fic4 & fic33 & Range(CStr("G2")) & fic5 & ENT
        End If
        ActiveCell.FormulaR1C1 = formule
   
        '   Activation de la cellule pour mise à jour "RETOUR"
        Range("W" + CStr(Range("G1"))).Select
        formule = fic4 & Range(CStr("G2")) & fic5 & RETOUR
        If Cells(2, 7).Value < 99 Then
           formule = fic4 & fic3 & Range(CStr("G2")) & fic5 & RETOUR
        End If
        If Cells(2, 7).Value < 10 Then
           formule = fic4 & fic33 & Range(CStr("G2")) & fic5 & RETOUR
        End If
        ActiveCell.FormulaR1C1 = formule

        ' Positionnement dans la cellule à gauche
        Range("A" + CStr(Range("G1"))).Select

        ' Fermeture du fichier
        fic = fic2 & Range(CStr("G2")) & fic6
        If Cells(2, 7).Value < 99 Then
           fic = fic2 & fic3 & Range(CStr("G2")) & fic6
        End If
        If Cells(2, 7).Value < 10 Then
           fic = fic2 & fic33 & Range(CStr("G2")) & fic6
        End If
        Workbooks(fic).Close
   
 End If
 
End Sub
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 votre système...
  Set objExcel = Nothing
 
End Function
 
Bonjour Guy,
Merci pour tes explications, tu trouveras ci joint le code VBA, si des instructions te choquent, n'hésite pas, c'est à aujourd'hui mon premier code VBA sans avoir eu de formation...
Cdlt
Olivier