VBA - Ouvrir fichier / Copier feuille / Fermer fichier

Bonjour à toutes et à tous,

Je souhaiterai obtenir votre aide sur un problème que je ne comprends pas :

J'ai deux fichiers : un "ARCHITECTURE GA RONDELET", sur celui ci je voudrais créer une MACRO qui me permette d'ouvrir mon second fichier "Exporter_l'arborescence.xls" et de copier les valeurs de son unique feuille vers le fichier d'origine "ARCHITECTURE GA RONDELET".

Pour le moment voici mon code :

Sub Mise_à_jour_Arborescence()

    'Défini Fichier comme variable (chemin du fichier)
    Dim Fichier As Variant

    'Message sélection arborescence
    MsgBox "Sélectionner l'emplacement de l'extraction de l'arborescence"

    'Affiche la boîte de dialogue "Ouvrir"
    Fichier = Application.GetOpenFilename("Tous les fichiers (*.*),*.*")

    'Si aucun fichier sélectionné fin de MACRO
    If Fichier = False Then Exit Sub

    'Application ouverture fichier
    Dim MonApplication As Object
    Set MonApplication = CreateObject("Shell.Application")

   'Ouverture du fichier à l'emplacement (Fichier)
    MonApplication.Open (Fichier)

   'Si pas d'ouverture fin de MACRO
    Set MonApplication = Nothing
    Exit Sub

   Windows("ARCHITECTURE GA MALBOSC.xlsm").Activate

    'Copier Arborescnence
    Windows("Exporter_l'arborescence.xls").Activate
    Cells.Select
    Selection.Copy

    'Coller Arborescence
    Windows("ARCHITECTURE GA MALBOSC.xlsm").Activate
    Sheets("ARBORESCENCE").Select
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    'Fermeture fichier Arborescence
    Application.DisplayAlerts = False
    Workbooks("Exporter_l'arborescence.xls").Close

End Sub

Le départ du Code fonctionne très bien, une boîte de dialogue s'ouvre, je sélectionne le fichier "Exporter_l'arborescence.xls", celui-ci s'ouvre, mais la copie ne s'effectue pas.

J'ai l'impression que le problème est à cause du temps d'ouverture du fichier, la MACRO continue d'avancer sans attendre l'ouverture du fichier. J'ai essayer de séparer le Code en deux MACRO pour attendre que le fichier soit ouvert, et là ça fonctionne.

Ma question étant comment le faire avec une seule MACRO ?

Je vous remercie par avance et reste disponible pour vous apportez toutes les informations nécessaires.

Bon été !

Bonjour,

Une proposition :

Sub Mise_à_jour_Arborescence()

    'Défini Fichier comme variable (chemin du fichier)
    Dim Fichier As Variant

    'Nom et emplacement du fichier
    Fichier = "C:\Documents\MonDossier\Exporter_l'arborescence.xls" 'Emplacement fichier à adapter

   'Ouverture du fichier à l'emplacement (Fichier)
    Workbooks.Open (Fichier) 'Devient le classeur actif
   With ActiveWorkbook
       .Sheets(1).Cells.Copy 'Copie des cellules de la feuille 1
       ThisWorkbook.Sheets("ARBORESCENCE").Range("A1").PasteSpecial Paste:=xlPasteValues 'Collage des valeurs dans ce classeur
       .Close False 'Fermeture du classeur "Exporter_l'arborescence"
   End With

End Sub

bonjour,

La macro corrigée (il y avait quelques erreurs dans les noms de fichiers) et optimisée.

Sub Mise_à_jour_Arborescence()
Dim Fichier As String
Dim MonApplication As Object
MsgBox "Sélectionner l'emplacement de l'extraction de l'arborescence"
Fichier = Application.GetOpenFilename("Tous les fichiers (*.*),*.*")
If Fichier = "" Then Exit Sub 'Si aucun fichier sélectionné fin de MACRO
   Do       'on boucle jusqu'à ce que le fichier soit chargé
   Workbooks.Open Filename:=Fichier, ReadOnly:=True
   DoEvents    'on attend un petit peu...
   Set MonApplication = CreateObject("Shell.Application")
   Loop Until Not MonApplication Is Nothing
   ActiveSheet.Cells.Copy
   'Coller Arborescence
   ThisWorkbook.Sheets("ARBORESCENCE").Range("A1").PasteSpecial Paste:=xlPasteValues, _
                        Operation:=xlNone, SkipBlanks:=False, Transpose:=False
   Application.DisplayAlerts = False
   Workbooks("Exporter_l'arborescence.xls").Close
End Sub

A+

Bonjour, déjà merci à vous deux pour votre temps !

La MACRO fonctionne je l'ai modifié à nouveau voici la dernière version :

Sub Mise_à_jour_Arborescence()

'Défini l'emplacement du fichier comme une variable
Dim Fichier As String

'Défini l'application pour ouvrir Excel ?
Dim MonApplication As Object

'Séléction du fichier arborescence
MsgBox "Sélectionner l'emplacement de l'extraction de l'arborescence"
Fichier = Application.GetOpenFilename("Tous les fichiers (*.*),*.*")

'Si aucun fichier sélectionné fin de MACRO
If Fichier = "" Then Exit Sub

'Ouverture du fichier avec une boucle pour ouverture complète (DO, ReadyOnly:=True, DoEvents)
Do       'début boucle
Workbooks.Open Filename:=Fichier, ReadOnly:=True
DoEvents    'on attend un petit peu...
Set MonApplication = CreateObject("Shell.Application")
Loop Until Not MonApplication Is Nothing  'fin boucle

'Séléctoon de la feuille et copie
ActiveSheet.Cells.Copy

'Coller Arborescence
ThisWorkbook.Sheets("ARBORESCENCE GA").Range("A1").PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=False

'Fermeture application
Application.DisplayAlerts = False
Workbooks("Exporter_l'arborescence.xls").Close

End Sub

Seulement il y a eu une modification sur celle d'origine à savoir :

"If Fichier = "" Then Exit Sub"

Initialement on avait "If Fichier = False Then Exit Sub"

Si je remet la ligne de code initiale la MACRO beug et n'aboutit pas, pouvez vous me dire pourquoi ?

Et je comprends plutôt bien votre démarche, mais j'ai du mal avec toute la partie "MonApplication, Create Object, Loop Until nor MonApplication Is Nothing". Tout ce qui doit correspondre à l'ouverture du fichier finalement, est il possible d'avoir une explication ?

D'avance merci, j'essaie de comprendre au maximum afin de m'améliorer, je suis sur que vous comprendrez.

Bien à vous

Bonjour,

Parce que que en toute logique "Fichier" est un String et un String ne peux pas être False.

Je sais bien que dans les aides de Microsoft on utilise False seulement dans les aides de Microsoft on n'utilise pas les déclarations de variables... Alors ben faites comme vous voulez ! Mébon quand vous buvez du vin (avec modération...) Vous parlez d'une bouteille ou d'un verre, n'est-ce pas ? vous n'utilisez pas un variant.

Moi en VBA je fais pareil, quand j'utilise un String je déclare un String... Je sais bien qu'il existe des String de différents modèle mébon...

Ceci dit pour différentes raisons dans des circonstances assez similaires on pourrait utiliser un Variant... Bon je vais pas vous faire un roman sur ce sujet... C'est un peu le problème quand vous ne savez pas de quel tonneau vient le vin ! Tonneau, cubi, Est-ce le nom du vin, du chateau, de la région, du vigneron ou du revendeur ?

Je veux dire par là qu'il existe de multiples manières de parler avec précision et le programmeur est très soucieux de ces petits détails... mais chacun fait comme bon lui semble. Du moment que le vin est bon !

A+

Rechercher des sujets similaires à "vba ouvrir fichier copier feuille fermer"