Variable non reconnue si autre instance d'Excel

Le
rmillerlcxl
Bonjour,

Pour une raison quelconque … que sur un seul poste … car po=
ur tous les autres depuis toujours ça fonctionne … la variable=
wbk2 n'est pas reconnue. Peut-être manque t'il une composante dans Ex=
cel? J'ai fait une réparation et je me suis assuré que toutes les=
composantes étaient installées. Il s'agit de Office 2010.

Par exemple Var_SheetRegroup (à la dernière ligne ci-dessous) ret=
ourne "vide" alors que ça devrait retourner "REGROUPEMENTS".

IL me faut préciser que la macro a pour objectif d'ouvrir un 2ème=
classeur et d'aller porter des valeurs dans des feuilles et cellules du 2=
ème classeur.

Mais … lorsque c'est Excel 2007 ou 2010 et que l'usager indique cet=
te option … If ThisWorkbook.Sheets(Feuil1.Name).Range("CN_ParamSync=
hXLFS").Value = 1 Then … la macro a aussi l'objectif d'ouvrir le =
2ème classeur dans une autre instance d'Excel. Le problème surgit=
seulement dans cette situation. Si le 2ème classeur est ouvert dans l=
a même instance d'Excel … pas de problèmes.

Voici le code que j'utilise. Sauriez-vous le pourquoi ou encore comment le =
code pourrait être modifié afin de contourner le problème? M=
erci à l'avance.

'************************************************************************

'Établissement des variables
Dim FSO As Object, f As Object, A As Integer
Dim i As Integer, aFile As String
Set FSO = CreateObject("Scripting.FileSystemObject")
aFile = ThisWorkbook.Sheets(Feuil7.Name).Range("CN_ValidXLEFFilePathName"=
).Value

Dim MotDePasse As String
MotDePasse = ThisWorkbook.Sheets(Feuil7.Name).Range("CN_ValidXLEFPwd").Va=
lue
Dim MyXL2 As Object
Dim wbk2 As Object
'Dim wbk2 As Workbook
Dim Wk As Workbook
Var_Opened = ""
Var_MyXL2Open = ""

'Si pas ouvertdonc doit l'ouvrir
'Ouvre le fichier dans une nouvelle instance Excel.
Var_Opened = 2

If ThisWorkbook.Sheets(Feuil1.Name).Range("CN_ParamSynchXLFS").Value = 1 =
Then ‘Si doit ouvrir dans une autre instance d’Excel
Set objExcel = New Excel.Application
With objExcel
'objExcel.Application.ScreenUpdating = False
objExcel.Visible = True 'Rend la nouvelle instance Excel visible =
vers la fin
Set wbk2 = objExcel.Workbooks.Open(f, , , , MotDePasse)
DoEvents
'Doit aussi permettre si en lecture seule (2014-02-24)
End With
Set MyXL2 = wbk2.Parent 'Récupération de l'application qui =
gère actuellement test 2
Var_MyXL2Open = 1

Else ‘Si doit ouvrir dans la même instance d’Excel

Application.ScreenUpdating = False
Set wbk2 = Workbooks.Open(f, , , , MotDePasse)
Set MyXL2 = wbk2.Parent 'Récupération de l'application qui =
gère actuellement test 2
DoEvents
End If

'Prend le bon nom de la feuille selon la langue
On error resume next
Var_SheetRegroup = wbk2.Sheets("GROUPING").Name
Var_SheetRegroup = wbk2.Sheets("REGROUPEMENTS").Name
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Michd
Le #26486089
Bonjour,
En regardant ton code rapidement, tu as une condition "SI". Si le classeur dans l'autre instance est
déjà ouvert, tu n'as pas la création de la nouvelle instance et tu n'as pas d'objet représentant
l'autre instance. La ligne de code "Set MyXL2 = wbk2.Parent" ne 'exécute pas. Par conséquent, cette
variable "wbk2" n'a pas été initialée dans la section de l’"Else" de ta condition "SI".
MichD
Michd
Le #26486096
Bonjour,
Voici un petit exemple de code...Tu complètes le code selon ce que tu désires accomplir!
'Dans le haut d'un module STANDARD
Public MyXL2 As Workbook
'---------------------------------------------------------------
Sub test()
Dim ObjExcel As Application, aFile As String
Dim MotDePasse As String, FSO As Object
With Feuil7
aFile = .Range("CN_ValidXLEFFilePathName").Value
MotDePasse = .Range("CN_ValidXLEFPwd").Value
End With
Set FSO = CreateObject("Scripting.FileSystemObject")
'En déclarant la variable dans le haut du classeur comme Public
'ta variable MyXl2 va être disponible jusqu'au moment où tu
'fermeras le classeur avec cette ligne de code
'MyXl2.Close True or false 'selon que tu veux sauvegarder
'les modifications ou non.
If MyXL2 Is Nothing Then
Set ObjExcel = New Application
Set MyXL2 = ObjExcel.Open("Chemin & Nom Fu fichier")
ObjExcel.Visible = True
End If
'à partir de la variable Objet MyXl2, tu peux accéder
'au classeur que tu viens d'ouvrir sans aucun problème.
End Sub
'---------------------------------------------------------------
MichD
Michd
Le #26486232
Correction :
Set MyXL2 = ObjExcel.Open("Chemin & Nom Fu fichier")
devrait se lire :
Set MyXL2 = ObjExcel.Workbooks.Open("Chemin & Nom Fu fichier")
MichD
Michd
Le #26488229
Cette référence "ATPVBAEN.XLAM" n'a rien à voir avec les déclarations des constantes ou des
variables. Cependant, il faut noter que ces variables ou constantes ne sont pas accessibles à
l'extérieur du classeur où elles sont déclarées. Cela est vrai depuis au moins la version Excel 1997
et ce jusqu'à la version 2016.
Si tu fais référence à autre chose, précise ta question.
MichD
Publicité
Poster une réponse
Anonyme