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

comment accéder à une cellule liée dans un fichier protégé fermé

4 réponses
Avatar
Eric Brue
Bonjour
Je tourne en rond dans l'historique du newsgroup...
Comment indiquer le mot de passe d'accès au fichier Oph03.xls dans la
procédure qui suit.
Cette procédure se situant dans une boucle, la fenêtre du mot de passe
s'ouvre environ 200 fois... je dois donc l'indiquer dans le code, mais
comment ?

Worksheets("Programme").Cells(dl, dc).Formula = _
"='U:\Bloc\Archives\[Oph03.xls]Octobre 5'!C" & sl & " & " & Chr$(34) & " " &
Chr$(34)

ou plus simplement, est il possible dans la formule ou par VBA d'indiquer le
password d'une fichier lié fermé ou est-on OBLIGE de l'ouvrir?
La chose devrait être possible puisqu'il suffit de l'indiquer dans la boite
de dialogue qui réclame le password pour accéder aux données sans ouvrir le
fichier...

Merci d'avance

--
Eric Brue
http://e.brue.free.fr

4 réponses

Avatar
Herdet
Bonsoir Eric,
Si c'est le classeur fermé qui est protégé, ce sera assez difficile de
passer à travers de la protection.
Par contre, si le classeur n'est pas protégé et que les feuilles sont
visibles (protégées ou non) tu peux utiliser les procédures suivantes pour
lire une valeur dans le classeur fermé.
Avec d'autres fonction du même accabit, on peut aussi lire des plages de
cellules, des tableaux nommés ou des feuilles entières de classeurs fermés.
Voir mon classeur rd-lireferme sur
http://www.excelabo.net/moteurs/download2.php
Cordialement
Robert Dezan
----------------------------------------------------------------------------
----------------
Sub Recup_Cellule_Valeur()
' renvoie la valeur d'une cellule donnée dans un classeur fermé (NON
PROTEGE)
' la feuille de recherche 'Source_feuille' peut être protégée ou non mais
NON MASQUEE
Source_NomComplet = "U:BlocArchivesOph03.xls"
Source_feuille = "Octobre 5"
i = 10 ' peut être une variable dans une boucle
j = 3 ' peut être une variable dans une boucle
Source_plage = Cells(i, j).Address ' ?? ==> "C" & s1 & " & " &
Chr$(34) & " " & Chr$(34)
MsgBox GetValueWithADO(Source_NomComplet, Source_feuille, Source_plage)
End Sub

Function GetValueWithADO(ByVal Classeur$, ByVal Feuille$, ByVal
CellAdresse$)
' renvoie la valeur d'une cellule donnée dans un classeur fermé (non
protégé)
' la feuille de recherche peut être protégée mais NON MASQUEE

Dim rcdSet
Dim strConn As String
Dim strCmd As String
Dim dummyBase As Range

Set rcdSet = CreateObject("ADODB.Recordset")

'prépare une "base de données" bidon pour la clause SELECT
'(une entête fictive et une ligne de données)
Set dummyBase = Range(CellAdresse).Resize(2)

'prépare les commandes ADO
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Classeur & ";" & _
"Extended Properties=""Excel 8.0;HDR=No;IMEX=1;"";"
strCmd = "SELECT * FROM [" & Feuille & "$" & dummyBase.Address(0, 0) & "]"

'va chercher l'info
rcdSet.Open strCmd, strConn, 0, 1, 1 'adOpenForwardOnly, adLockReadOnly,
adCmdText

'et la renvoie
GetValueWithADO = Application.Clean(rcdSet.GetString(NumRows:=1))

End Function
----------------------------------------------------------------------------
-----------------------

"Eric Brue" a écrit dans le message de news:

Bonjour
Je tourne en rond dans l'historique du newsgroup...
Comment indiquer le mot de passe d'accès au fichier Oph03.xls dans la
procédure qui suit.
Cette procédure se situant dans une boucle, la fenêtre du mot de passe
s'ouvre environ 200 fois... je dois donc l'indiquer dans le code, mais
comment ?

Worksheets("Programme").Cells(dl, dc).Formula = _
"='U:BlocArchives[Oph03.xls]Octobre 5'!C" & sl & " & " & Chr$(34) & " "
&

Chr$(34)

ou plus simplement, est il possible dans la formule ou par VBA d'indiquer
le

password d'une fichier lié fermé ou est-on OBLIGE de l'ouvrir?
La chose devrait être possible puisqu'il suffit de l'indiquer dans la
boite

de dialogue qui réclame le password pour accéder aux données sans ouvrir
le

fichier...

Merci d'avance

--
Eric Brue
http://e.brue.free.fr




Avatar
Frédéric Sigonneau
Bonsoir,

Je crains bien en effet qu'il ne soit pas possible d'éviter d'ouvrir le classeur
source dans ce cas. En effet, s'il est bien possible de fournir le mot de passe
sans ouvrir le fichier quand on force un calcul de la cellule cible, comme tu le
signales, la valeur source n'est pas récupérée pour autant (en tout cas, chez
moi, je récupère une valeur d'erreur #N/A).
Ceci dit, ouvrir le classeur source, mettre à jour les données et le refermer
peut se faire de façon transparente, et le mot de passe peut être saisi avec un
SendKeys (pas élégant mais ça marche..).
A adapter dans ton contexte :

Sub test()
Dim Mdp$
Mdp = "zaza"
Application.ScreenUpdating = False
SendKeys Mdp & "~"
Workbooks.Open "U:BlocArchivesOph03.xls"
ThisWorkbook.Sheets(1).Range("A1").Formula = _
"='[Oph03.xls]Octobre 5'!A1"
Workbooks("Oph03.xls").Close False
End Sub

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


Bonjour
Je tourne en rond dans l'historique du newsgroup...
Comment indiquer le mot de passe d'accès au fichier Oph03.xls dans la
procédure qui suit.
Cette procédure se situant dans une boucle, la fenêtre du mot de passe
s'ouvre environ 200 fois... je dois donc l'indiquer dans le code, mais
comment ?

Worksheets("Programme").Cells(dl, dc).Formula = _
"='U:BlocArchives[Oph03.xls]Octobre 5'!C" & sl & " & " & Chr$(34) & " " &
Chr$(34)

ou plus simplement, est il possible dans la formule ou par VBA d'indiquer le
password d'une fichier lié fermé ou est-on OBLIGE de l'ouvrir?
La chose devrait être possible puisqu'il suffit de l'indiquer dans la boite
de dialogue qui réclame le password pour accéder aux données sans ouvrir le
fichier...

Merci d'avance

--
Eric Brue
http://e.brue.free.fr


Avatar
Eric Brue
Merci beaucoup
Malheureusement, c'est bien le classeur fermé qui est protégé. En fait il
s'agit de récupérer les données d'une feuille dans 8 fichiers protégés par
mot de passe.
Je suis donc dans l'obligation de les ouvrir par VBA chacun les uns après
les autres mais encore fallait-il le savoir...
Merci encore
Eric

--

Eric BRÜE
http://e.brue.free.fr
"Herdet" a écrit dans le message de
news:
Bonsoir Eric,
Si c'est le classeur fermé qui est protégé, ce sera assez difficile de
passer à travers de la protection.
Par contre, si le classeur n'est pas protégé et que les feuilles sont
visibles (protégées ou non) tu peux utiliser les procédures suivantes pour
lire une valeur dans le classeur fermé.
Avec d'autres fonction du même accabit, on peut aussi lire des plages de
cellules, des tableaux nommés ou des feuilles entières de classeurs
fermés.

Voir mon classeur rd-lireferme sur
http://www.excelabo.net/moteurs/download2.php
Cordialement
Robert Dezan
--------------------------------------------------------------------------
--

----------------
Sub Recup_Cellule_Valeur()
' renvoie la valeur d'une cellule donnée dans un classeur fermé (NON
PROTEGE)
' la feuille de recherche 'Source_feuille' peut être protégée ou non
mais

NON MASQUEE
Source_NomComplet = "U:BlocArchivesOph03.xls"
Source_feuille = "Octobre 5"
i = 10 ' peut être une variable dans une boucle
j = 3 ' peut être une variable dans une boucle
Source_plage = Cells(i, j).Address ' ?? ==> "C" & s1 & " & " &
Chr$(34) & " " & Chr$(34)
MsgBox GetValueWithADO(Source_NomComplet, Source_feuille,
Source_plage)

End Sub

Function GetValueWithADO(ByVal Classeur$, ByVal Feuille$, ByVal
CellAdresse$)
' renvoie la valeur d'une cellule donnée dans un classeur fermé (non
protégé)
' la feuille de recherche peut être protégée mais NON MASQUEE

Dim rcdSet
Dim strConn As String
Dim strCmd As String
Dim dummyBase As Range

Set rcdSet = CreateObject("ADODB.Recordset")

'prépare une "base de données" bidon pour la clause SELECT
'(une entête fictive et une ligne de données)
Set dummyBase = Range(CellAdresse).Resize(2)

'prépare les commandes ADO
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Classeur & ";" & _
"Extended Properties=""Excel 8.0;HDR=No;IMEX=1;"";"
strCmd = "SELECT * FROM [" & Feuille & "$" & dummyBase.Address(0, 0) &
"]"


'va chercher l'info
rcdSet.Open strCmd, strConn, 0, 1, 1 'adOpenForwardOnly, adLockReadOnly,
adCmdText

'et la renvoie
GetValueWithADO = Application.Clean(rcdSet.GetString(NumRows:=1))

End Function
--------------------------------------------------------------------------
--


Avatar
Eric Brue
Merci
c'est à peu près ce que j'avais fait mais avec un inputbox, le mot de passe
étant le même pour tous les fichiers source à ouvrir.
Je n'avais par contre pas pensé à
Application.ScreenUpdating = False
qui est nettement plus élégant que le stroboscope lié à l'ouverture des
fichiers.
Merci encore
Eric

--

Eric BRÜE
http://e.brue.free.fr
"Frédéric Sigonneau" a écrit dans le message
de news:
Bonsoir,

Je crains bien en effet qu'il ne soit pas possible d'éviter d'ouvrir le
classeur

source dans ce cas. En effet, s'il est bien possible de fournir le mot de
passe

sans ouvrir le fichier quand on force un calcul de la cellule cible, comme
tu le

signales, la valeur source n'est pas récupérée pour autant (en tout cas,
chez

moi, je récupère une valeur d'erreur #N/A).
Ceci dit, ouvrir le classeur source, mettre à jour les données et le
refermer

peut se faire de façon transparente, et le mot de passe peut être saisi
avec un

SendKeys (pas élégant mais ça marche..).
A adapter dans ton contexte :

Sub test()
Dim Mdp$
Mdp = "zaza"
Application.ScreenUpdating = False
SendKeys Mdp & "~"
Workbooks.Open "U:BlocArchivesOph03.xls"
ThisWorkbook.Sheets(1).Range("A1").Formula = _
"='[Oph03.xls]Octobre 5'!A1"
Workbooks("Oph03.xls").Close False
End Sub

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !