Fonction GetObject

Bonjour,

J'essaie de faire des manipulations sur deux fichiers wbdonnee que j'associe au fichier actif dans lequel se situe la macro, au moment de l'exécution de la macro et le fichier wbProjection que j'associe via la fonction GetObject sans pour autant l'ouvrir.

J'aimerais pouvoir aller chercher des données dans un fichier et les transférer dans l'autre en alternant d'un fichier à l'autre. J'ai beau utiliser la ligne de commande wbDonnee.activate par exemple (aurait pu tout autant être wbProjection.activate), ces lignes de commande ne fonctionnent pas et n'activent pas le fichier demandé.

Set wbDonnee = ActiveWorkbook

Set wbProjection = GetObject("C:\...chemin...\Modèle_Prévision rendement de projet.xltx")

'1- TRAITEMENT

wbDonnee.Activate

wbDonnee.Sheets(1).Activate

MsgBox "Dossier actif: " & ActiveWorkbook.Name & vbNewLine & _

"Feuille active: " & ActiveSheet.Name

wbDonnee.Sheets(1).Rows(2).Select

Y a-t-il une autre façon de procéder pour pouvoir choisir et activer un fichier ?

Merci de votre aide.

Bonjour,

Difficile de bien comprendre ton objectif ...

D'où te vient l'idée que tu as un problème avec GetObject ...???

Au lieu de pré-supposer que GetObject est la solution à ton problème ...

Il vaudrait mieux que tu explicites clairement ton objectif ...

Merci de ta réponse.

En fait, je présume que ça venait de la fonction GetObject du fait qu'il associe un objet Workbook à un fichier qui n'est pas ouvert.

Bref, j'ai beau écrire wbDonnee.activate, cette commande n'active pas le fichier en question. Comment faire pour s'assurer que les commandes subséquente s'effectueront à partir de ce fichier ?

En espérant être plus clair.

Pour être plus clair, j'ai mis un Msgbox pour qu'il m'indique quel workbook est actif et quelle feuille. Même si j'ai inscrit préalablement la commande wbDonnee.activate, ce n'est pas ce fichier qui est actif. Pourquoi ? Y a-t-il une autre commande pour le rendre actif ?

J'ai eu le même problème dans une autre macro et j'ai contourné le problème en associant le fichier voulu en dernier. Ça a fonctionné mais c'est plutôt hasardeux !

Bonjour,

J'ai eu le même problème dans une autre macro et j'ai contourné le problème en associant le fichier voulu en dernier. Ça a fonctionné mais c'est plutôt hasardeux !

Manifestement ... tu as déjà la solution ...

Bonjour,

J'ai beau utiliser la ligne de commande wbDonnee.activate par exemple (aurait pu tout autant être wbProjection.activate), ces lignes de commande ne fonctionnent pas et n'activent pas le fichier demandé.

C'est logique. En utilisant la fonction "GetObject", vous créez une 2ème instance de l'application Excel qui ne contient pas le fichier où s'exécute votre code = ThisWorkbook. Vous avez donc :

set XL1 = ThisWorkBook.Application (première application Excel)
set XL2 = wbProjection.Application (deuxièmee application Excel)

Si vous voulez utiliser wbProjection dans XL1, il faut alors le préfixer par l'application dont il dépend : XL2.wbProjection.

Merci. Si je comprends bien, en utilisant la fonction GetObject, j'ouvre une nouvelle fenêtre Excel, il faudrait donc à chaque fois que je réfère à quelle fenêtre ou application il s'agit pour référer à mes objets Workbook wbProjection ou wbDonnee.

Et dans votre exemple, comment dois-je définir XL1 et XL2 ? De quel type ?

Dim XL1 as ...workbook ? ou autre type ?

Dim XL2 as ...

ou Public XL1 as

Public XL2 as...

Merci pour votre réponse. Je pourrais faire le test par la suite et vous en donner des nouvelles.

Bonjour Thev,

J'ai déclaré des variables XL1 et XL2 comme étant Excel.Application;

J'ai associé wbDonnee à XL1.Application et wbProjection à XL2.Application;

En exécutant la macro pas à pas, j'obtiens une erreur 438 à la ligne de commande XL1.wbDonnee.activate

J'ai joins un pdf de l'extrait de la macro pour une meilleur compréhension, je l'espère.

Merci à l'avance pour le suivi.

Bonjour,

Je n' avais pas vérifié ma réponse. Au final, la fonction "GetObject" ouvre le fichier dans la même application Excel mais pour que le processus d'activation fonctionne, il faut que le fichier soit visible et donc ajouter une instruction :

    Set wbDonnee = ActiveWorkbook
    Set wbProjection = GetObject("C:\...chemin...\Modèle_Prévision rendement de projet.xltx") 
    wbProjection.Windows(1).Visible = True

Merci. L'erreur ne s'applique plus. Par contre, si l'objectif était que le fichier lié par GetObject ne soit pas visible pour ne pas permettre d'y voir les données par l'utilisateur, ça ne le permet pas.

J'ai essayé de faire une instruction du genre pour voir l'effet.

wbDonnee.Application.ScreenUpdating = False

wbDonnee.Windows(1).visible = true

wbDonnee.Application.ScreenUpdating = true

wbDonnee.Windows(1).visible = true

La 2ième instruction Visible n'a pas remis en avant-plan le fichier wbDonnee dont j'avais minimisé la fenêtre, malgré que le ScreenUdating ait été remis en fonction.

Bref, je progresse tout de même. Merci pour ton aide.

Rechercher des sujets similaires à "fonction getobject"