Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Variable non reconnue si autre instance d'Excel

4 réponses
Avatar
rmillerlcxl
Bonjour,

Pour une raison quelconque =E2=80=A6 que sur un seul poste =E2=80=A6 car po=
ur tous les autres depuis toujours =C3=A7a fonctionne =E2=80=A6 la variable=
wbk2 n'est pas reconnue. Peut-=C3=AAtre manque t'il une composante dans Ex=
cel? J'ai fait une r=C3=A9paration et je me suis assur=C3=A9 que toutes les=
composantes =C3=A9taient install=C3=A9es. Il s'agit de Office 2010.

Par exemple Var_SheetRegroup (=C3=A0 la derni=C3=A8re ligne ci-dessous) ret=
ourne "vide" alors que =C3=A7a devrait retourner "REGROUPEMENTS".

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

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

Voici le code que j'utilise. Sauriez-vous le pourquoi ou encore comment le =
code pourrait =C3=AAtre modifi=C3=A9 afin de contourner le probl=C3=A8me? M=
erci =C3=A0 l'avance.

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

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

Dim MotDePasse As String
MotDePasse =3D 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 =3D ""
Var_MyXL2Open =3D ""

'Si pas ouvert...donc doit l'ouvrir
'Ouvre le fichier dans une nouvelle instance Excel.
Var_Opened =3D 2

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

Else =E2=80=98Si doit ouvrir dans la m=C3=AAme instance d=E2=80=99Excel

Application.ScreenUpdating =3D False
Set wbk2 =3D Workbooks.Open(f, , , , MotDePasse)
Set MyXL2 =3D wbk2.Parent 'R=C3=A9cup=C3=A9ration de l'application qui =
g=C3=A8re actuellement test 2
DoEvents
End If

'Prend le bon nom de la feuille selon la langue
On error resume next
Var_SheetRegroup =3D wbk2.Sheets("GROUPING").Name
Var_SheetRegroup =3D wbk2.Sheets("REGROUPEMENTS").Name

4 réponses

Avatar
Michd
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
Avatar
Michd
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
Avatar
Michd
Correction :
Set MyXL2 = ObjExcel.Open("Chemin & Nom Fu fichier")
devrait se lire :
Set MyXL2 = ObjExcel.Workbooks.Open("Chemin & Nom Fu fichier")
MichD
Avatar
Michd
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