Fermer un Excel depuis lien dans une Cellule

Bonjour à tous,

Je suis en galère sur un bout de code et je sollicite donc votre aide. Je cherche via une macro exécutée dans un fichier "1" à fermer un fichier "2" dont le lien complet (ThisWorkbook.Path & "\" & ThisWorkbook.Name) est dans le Range("A2"à du fichier "1"

J'ai essayé plein de solutions mais sans succès, par exemple:

    'Définition des objets
    Set ExcelApp = CreateObject("Excel.Application")
    ExcelApp.Visible = True 'Mettre True pour rendre Excel visible
    Set ExcelDoc = ExcelApp.Workbooks(Range("A2")).Close  'Ferme le document Excel

    'Réinitialisation des objets
    Set ExcelApp = Nothing
    Set ExcelDoc = Nothing

J'ai tenté avec Cells, avec un nom donné à la cellule, avec la création d'une variable, en mettant .close avant le lien etc... mais rien ne fonctionne.

Merci pour votre aide.

Bonjour Heelflip

Si j'ai bien compris, vous vous compliquez la vie

Vous êtes déjà dans Excel, il est totalement inutile d'instancier un nouvel objet "Application"
Il me semble que tu avais déjà abordé le sujet

Sub Test()
  Dim Wbk2 As Workbook
  Dim sPathFic As String
  ' Récupérer le chemin complet
  sPathFic = ThisWorkbook.Sheets("MaFeuille").Range("A2")
  ' Déclarer et ouvrir l'objet Workbook
  Set Wbk2 = Workbooks.Open(sPathFic)
  ' On peut travailler sur le 2ème classeur
  MsgBox "Valeur A1 de ma 1ère feuille de cmon classeur 2 = " & Wbk2.Sheets(1).Range("A1")
  ' Et on le ferme
  Wbk2.Close SaveChanges:=False
  ' On libère la variable objet
  Set Wbk2 = Nothing
End Sub

A+

Bonjour Bruno,

En effet, mais j'ai encore du mal avec les Objets. C'est quelque choses qui fonctionne dans mes codes mais que je ne maitrise pas vraiment... Mais c'est vrai que je ne devrais pas rouvrir l'application

J'ai un doute sur le code que tu m'as donné. je me suis peut-être mal exprimé, voici les étapes de mon code

1 - Fichier 1 -> Exécute une Macro 1 -> Fonctionne

2 - Macro 1 -> Récupère lien du fichier 1 -> Fonctionne

3 - Macro 1 -> Ouvre un fichier 2 et colle dans ce fichier le lien du fichier 1 -> Fonctionne

4 - Macro 1 -> Fait appel à une Macro 2 dans le fichier 2 -> Fonctionne

5 - Macro 2 -> Ferme le fichier 1 grâce au lien qui a été copié en étape 3 -> Mon bout de code qui ne fonctionne pas.

Cordialement.

Bonsoir Heelflip, BrunoM45,

Dans le cas de la fermeture fichier(s). Le lien du fichier Excel est facultatif.

En effet, lorsqu'on débute l'application Excel le premier fichier ouvert Excel aura l'index 1, le deuxième fichier Excel ouvert aura l'index 2.

Donc Workbooks(1).Close SaveChanges:=False Si l'on souhaite fermer le 1ier fichier ouvert que le fichier 1 ou 2 soit le fichier actif sélectionné.

Ou Workbooks(2).Close SaveChanges:=False Si l'on souhaite fermer le 2ieme fichier ouvert, idem quelque soit le fichier en cours.

Salut X Cellus,

Je ne avais pas, très bonne info merci , mais Quid d'autre fichiers Excel ouverts ? C'est un code pour le boulot donc possible que les collègues aient d'autres fichiers ouverts avant d'ouvrir celui qui a la macro, l'index 1/2 ne sera qu'en fonction de la macro pour pour l’ensemble des fichiers Excel ?

Cordialement.

J'ai effectué le test c'est nickel si pas d'autre Excel ouvert, mais si un fichier a été ouvert avant cela ne fonctionne plus, donc ce n'est pas une solution viable étant donné que je ne peux pas contrôler l'activité de mes collègues.

Par contre ta réponse m'a donné l'idée de juste mettre le nom du fichier au lieu d'y mettre tout le lien et cela fonctionne parfaitement. J'ai donc fait:

Workbooks(Range("A2").Value).Close SaveChanges:=False

Dans la cellule A2 est noté le nom du fichier. Je pars parfois trop loin dans le code au lieu de simplifier la chose...

Merci à vous deux en tout cas

Rechercher des sujets similaires à "fermer lien"