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

Demande de mot de passe pour accès ODBC

7 réponses
Avatar
Stan37
Bonjour,

Je suis récemment passé d'Excel2000 à Excel2003, et il semble bien que la
gestion des mot de passe lié à des accès ODBC (sur SQL Server) ait changé.
Maintenant le mot de passe est demandé à chaque fois que je veux actualiser
les données (une fois par session), alors que jusqu'alors, dans la mesure où
j'ai choisi l'option "sauver le mot de passe" dans la source de données, il
n'était jamais plus demandé.
Comment pourrais-je retrouver le fonctionnement précédent.

Merci par avance pour votre aide.
Claude Barbier

7 réponses

Avatar
FFO
Salut à toi

j'utilise beaucoup cette fonctionnalité pour ramener des données Oracle dans
Excel

Je n'ai jamais à montrer pate blanche et ce j'utilise dans une macro pour
celà les lignes de commande :

sqlChaine = "Select * from Table"
ChaineConn = "ODBC;DSN=Nom de la base;UID=Instance
Oracle;PWD=Pasword;Database=Nom de la base"
ActiveSheet.QueryTables.Add(Connection:=ChaineConn,
Destination:=Range("A1"), Sql:=sqlChaine).Refresh

et j'ai paramétré dans le fichier "Source de données (ODBC)" (Panneau de
configuration) l'itème correspondant à l'identique à savoir :

Data Source Name : Nom de la base
Description : Nom de la base
Service Name : Nom de la base
UserID : Instance Oracle

Il suffit de créer autant de macro que d'instance Oracle différente en
adaptant ces paramètres

Aucun souci de fonctionnement
J'espère pour toi qu'il en sera de même !!!!


Bonjour,

Je suis récemment passé d'Excel2000 à Excel2003, et il semble bien que la
gestion des mot de passe lié à des accès ODBC (sur SQL Server) ait changé.
Maintenant le mot de passe est demandé à chaque fois que je veux actualiser
les données (une fois par session), alors que jusqu'alors, dans la mesure où
j'ai choisi l'option "sauver le mot de passe" dans la source de données, il
n'était jamais plus demandé.
Comment pourrais-je retrouver le fonctionnement précédent.

Merci par avance pour votre aide.
Claude Barbier



Avatar
Stan37
Merci pour ton aide, elle pourra constituer un palliatif le cas échéant,
cependant jusqu'à présent j'utilise une façon différente qui m'évite de faire
figurer le password dans le code VB :
1) Je créé une vue dans la base de données (SQL Server)
2) Dans Excel, je crée une source de donnée qui pointe sur la base et je
coche "Enregistrer l'idendité et le mot de passe de l'utilisateur"
3) Dans une feuille Excel, j'utilise "Données/Données externe/créer une
requete" qui m'ouvre l'assistant requete, je sélectionne la source créée et
je peux ensuite selectionner les colonnes que je veux importer dans Excel.

Ensuite, jusqu'alors le fichier Excel devenait "autoporteur", il pouvait
être utilisé sur n'importe quel PC sans avoir à connaître le mot de passe, en
outre je peux mettre facilement à jour le code VB de l'outil sans risque
d'écraser le passwd ou le nom de la base qui diffèrent selon les utilisateurs
(il y a plusieurs bases).
La seule ligne de VB utilisée est la suivante :
' Extraction
Selection.QueryTable.Refresh BackgroundQuery:úlse

Le problème c'est que maintenant lorsque les utilisateur executent ce code,
Excel 2k3 sort en erreur "Echec de l'autorisation". Si je fais un
"Actualiser" dans la feuille concernée, Excel me demande le mot de passe, du
moins la première fois, mais si je ferme et que je le réouvre il le redemande.

En fait j'ai donc déjà un premier palliatif qui consiste, pour les
utilisateurs, à faire un "Actualiser les données" dans chaque onglet qui
importe des données, cela permet de saisir le mot de passe, ensuite
l'utilisateur peux dérouler x fois les macros VB sans PB, à condition de ne
pas sortir d'Excel.

J'aimerais toutefois revenir au fonctionnement constaté avec Excel2000, soit
pas de mot de passe dans le code VB, et execution du code sans demande de mot
de passe.
(que ce soit par VB ou par le menu "actualiser").

Merci encore pour ton aide.



Bonjour,

Je suis récemment passé d'Excel2000 à Excel2003, et il semble bien que la
gestion des mot de passe lié à des accès ODBC (sur SQL Server) ait changé.
Maintenant le mot de passe est demandé à chaque fois que je veux actualiser
les données (une fois par session), alors que jusqu'alors, dans la mesure où
j'ai choisi l'option "sauver le mot de passe" dans la source de données, il
n'était jamais plus demandé.
Comment pourrais-je retrouver le fonctionnement précédent.

Merci par avance pour votre aide.
Claude Barbier



Avatar
FFO
Rebonjours à toi

j'utilise aussi cette procédure et décline effectivement à chaque fois mon
identité en saisissant le mot de passe approprié

J'ai avec l'enregistreur de macro obtenu les lignes suivantes avec cette
procédure :

With ActiveSheet.QueryTables.Add(Connection:= _
"ODBC;DSN=Nom de la base;UID=Instance de la
base;PWD=Password;DBQ=Nom de la
base;DBA=W;APA=T;FEN=T;QTO=T;FRC;FDL;LOB=T;RST=T;FRL=F;MTS=F;CSR=F;PFC;TLO=0;" _
, Destination:=Range("A1"))
.CommandText = Array( _
"SELECT TL_VEG_TVA_FT.OCCID, TL_VEG_TVA_FT.OCCUNIQUE,
TL_VEG_TVA_FT.ZONE_VEGAS, TL_VEG_TVA_FT.CODE_TYPE_FISC,
TL_VEG_TVA_FT.C_TVA_FT" & Chr(13) & "" & Chr(10) & "FROM REF.TL_VEG_TVA_FT
TL_VEG_TVA_FT" _
)
.Name = "Lancer la requête à partir de Nom de la base"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:úlse
End With

Si je relance la macro j'obtiens le résultat sans saisie de mot de passe

Tu peux t'inspirer de cette méthode pour dans une macro réaliser le code
approprié
rajoute la commande : PWD=Password tel que décrit dans la macro ci-dessus

Ce code pourra être éxécuté par le biais d'une simple macro ou intégré dans
le ThisWorkbook déclenché à l'ouverture du document avec le code modifiée
ainsi :

Private Sub Workbook_Open()
Sheets("Feuil1").Cells.Clear
With ActiveSheet.QueryTables.Add(Connection:= _
"ODBC;DSN=Nom de la base;UID=Instance de la
base;PWD=Password;DBQ=Nom de la
base;DBA=W;APA=T;FEN=T;QTO=T;FRC;FDL;LOB=T;RST=T;FRL=F;MTS=F;CSR=F;PFC;TLO=0;" _
, Destination:=Range("A1"))
.CommandText = Array( _
"SELECT TL_VEG_TVA_FT.OCCID, TL_VEG_TVA_FT.OCCUNIQUE,
TL_VEG_TVA_FT.ZONE_VEGAS, TL_VEG_TVA_FT.CODE_TYPE_FISC,
TL_VEG_TVA_FT.C_TVA_FT" & Chr(13) & "" & Chr(10) & "FROM REF.TL_VEG_TVA_FT
TL_VEG_TVA_FT" _
)
.Name = "Lancer la requête à partir de Nom de la base"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:úlse
End With
End Sub

Tu pourras Verrouiller le Thisworkbook (click droit/Propriétés de
VBAProject onglet Protection) et ainsi d'interdire sa lecture et notamment le
mot de passe

Je pense que cette solution devrait te convenir



Merci pour ton aide, elle pourra constituer un palliatif le cas échéant,
cependant jusqu'à présent j'utilise une façon différente qui m'évite de faire
figurer le password dans le code VB :
1) Je créé une vue dans la base de données (SQL Server)
2) Dans Excel, je crée une source de donnée qui pointe sur la base et je
coche "Enregistrer l'idendité et le mot de passe de l'utilisateur"
3) Dans une feuille Excel, j'utilise "Données/Données externe/créer une
requete" qui m'ouvre l'assistant requete, je sélectionne la source créée et
je peux ensuite selectionner les colonnes que je veux importer dans Excel.

Ensuite, jusqu'alors le fichier Excel devenait "autoporteur", il pouvait
être utilisé sur n'importe quel PC sans avoir à connaître le mot de passe, en
outre je peux mettre facilement à jour le code VB de l'outil sans risque
d'écraser le passwd ou le nom de la base qui diffèrent selon les utilisateurs
(il y a plusieurs bases).
La seule ligne de VB utilisée est la suivante :
' Extraction
Selection.QueryTable.Refresh BackgroundQuery:úlse

Le problème c'est que maintenant lorsque les utilisateur executent ce code,
Excel 2k3 sort en erreur "Echec de l'autorisation". Si je fais un
"Actualiser" dans la feuille concernée, Excel me demande le mot de passe, du
moins la première fois, mais si je ferme et que je le réouvre il le redemande.

En fait j'ai donc déjà un premier palliatif qui consiste, pour les
utilisateurs, à faire un "Actualiser les données" dans chaque onglet qui
importe des données, cela permet de saisir le mot de passe, ensuite
l'utilisateur peux dérouler x fois les macros VB sans PB, à condition de ne
pas sortir d'Excel.

J'aimerais toutefois revenir au fonctionnement constaté avec Excel2000, soit
pas de mot de passe dans le code VB, et execution du code sans demande de mot
de passe.
(que ce soit par VB ou par le menu "actualiser").

Merci encore pour ton aide.



Bonjour,

Je suis récemment passé d'Excel2000 à Excel2003, et il semble bien que la
gestion des mot de passe lié à des accès ODBC (sur SQL Server) ait changé.
Maintenant le mot de passe est demandé à chaque fois que je veux actualiser
les données (une fois par session), alors que jusqu'alors, dans la mesure où
j'ai choisi l'option "sauver le mot de passe" dans la source de données, il
n'était jamais plus demandé.
Comment pourrais-je retrouver le fonctionnement précédent.

Merci par avance pour votre aide.
Claude Barbier





Avatar
Stan37
Merci pour ta réponse FFO, cela me semble une très bonne piste.


Rebonjours à toi

j'utilise aussi cette procédure et décline effectivement à chaque fois mon
identité en saisissant le mot de passe approprié

J'ai avec l'enregistreur de macro obtenu les lignes suivantes avec cette
procédure :

With ActiveSheet.QueryTables.Add(Connection:= _
"ODBC;DSN=Nom de la base;UID=Instance de la
base;PWD=Password;DBQ=Nom de la
base;DBA=W;APA=T;FEN=T;QTO=T;FRC;FDL;LOB=T;RST=T;FRL=F;MTS=F;CSR=F;PFC;TLO=0;" _
, Destination:=Range("A1"))
.CommandText = Array( _
"SELECT TL_VEG_TVA_FT.OCCID, TL_VEG_TVA_FT.OCCUNIQUE,
TL_VEG_TVA_FT.ZONE_VEGAS, TL_VEG_TVA_FT.CODE_TYPE_FISC,
TL_VEG_TVA_FT.C_TVA_FT" & Chr(13) & "" & Chr(10) & "FROM REF.TL_VEG_TVA_FT
TL_VEG_TVA_FT" _
)
.Name = "Lancer la requête à partir de Nom de la base"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:úlse
End With

Si je relance la macro j'obtiens le résultat sans saisie de mot de passe

Tu peux t'inspirer de cette méthode pour dans une macro réaliser le code
approprié
rajoute la commande : PWD=Password tel que décrit dans la macro ci-dessus

Ce code pourra être éxécuté par le biais d'une simple macro ou intégré dans
le ThisWorkbook déclenché à l'ouverture du document avec le code modifiée
ainsi :

Private Sub Workbook_Open()
Sheets("Feuil1").Cells.Clear
With ActiveSheet.QueryTables.Add(Connection:= _
"ODBC;DSN=Nom de la base;UID=Instance de la
base;PWD=Password;DBQ=Nom de la
base;DBA=W;APA=T;FEN=T;QTO=T;FRC;FDL;LOB=T;RST=T;FRL=F;MTS=F;CSR=F;PFC;TLO=0;" _
, Destination:=Range("A1"))
.CommandText = Array( _
"SELECT TL_VEG_TVA_FT.OCCID, TL_VEG_TVA_FT.OCCUNIQUE,
TL_VEG_TVA_FT.ZONE_VEGAS, TL_VEG_TVA_FT.CODE_TYPE_FISC,
TL_VEG_TVA_FT.C_TVA_FT" & Chr(13) & "" & Chr(10) & "FROM REF.TL_VEG_TVA_FT
TL_VEG_TVA_FT" _
)
.Name = "Lancer la requête à partir de Nom de la base"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:úlse
End With
End Sub

Tu pourras Verrouiller le Thisworkbook (click droit/Propriétés de
VBAProject onglet Protection) et ainsi d'interdire sa lecture et notamment le
mot de passe

Je pense que cette solution devrait te convenir



Merci pour ton aide, elle pourra constituer un palliatif le cas échéant,
cependant jusqu'à présent j'utilise une façon différente qui m'évite de faire
figurer le password dans le code VB :
1) Je créé une vue dans la base de données (SQL Server)
2) Dans Excel, je crée une source de donnée qui pointe sur la base et je
coche "Enregistrer l'idendité et le mot de passe de l'utilisateur"
3) Dans une feuille Excel, j'utilise "Données/Données externe/créer une
requete" qui m'ouvre l'assistant requete, je sélectionne la source créée et
je peux ensuite selectionner les colonnes que je veux importer dans Excel.

Ensuite, jusqu'alors le fichier Excel devenait "autoporteur", il pouvait
être utilisé sur n'importe quel PC sans avoir à connaître le mot de passe, en
outre je peux mettre facilement à jour le code VB de l'outil sans risque
d'écraser le passwd ou le nom de la base qui diffèrent selon les utilisateurs
(il y a plusieurs bases).
La seule ligne de VB utilisée est la suivante :
' Extraction
Selection.QueryTable.Refresh BackgroundQuery:úlse

Le problème c'est que maintenant lorsque les utilisateur executent ce code,
Excel 2k3 sort en erreur "Echec de l'autorisation". Si je fais un
"Actualiser" dans la feuille concernée, Excel me demande le mot de passe, du
moins la première fois, mais si je ferme et que je le réouvre il le redemande.

En fait j'ai donc déjà un premier palliatif qui consiste, pour les
utilisateurs, à faire un "Actualiser les données" dans chaque onglet qui
importe des données, cela permet de saisir le mot de passe, ensuite
l'utilisateur peux dérouler x fois les macros VB sans PB, à condition de ne
pas sortir d'Excel.

J'aimerais toutefois revenir au fonctionnement constaté avec Excel2000, soit
pas de mot de passe dans le code VB, et execution du code sans demande de mot
de passe.
(que ce soit par VB ou par le menu "actualiser").

Merci encore pour ton aide.



Bonjour,

Je suis récemment passé d'Excel2000 à Excel2003, et il semble bien que la
gestion des mot de passe lié à des accès ODBC (sur SQL Server) ait changé.
Maintenant le mot de passe est demandé à chaque fois que je veux actualiser
les données (une fois par session), alors que jusqu'alors, dans la mesure où
j'ai choisi l'option "sauver le mot de passe" dans la source de données, il
n'était jamais plus demandé.
Comment pourrais-je retrouver le fonctionnement précédent.

Merci par avance pour votre aide.
Claude Barbier







Avatar
Stan37
Finalement, voivci la solution que j'ai trouvée, je charge en VB, la string
de connection avant de rafraichir l'onglet, les données de connexion sont
dans une feuille du classeur qui pet être protégée si nécessaire.

'Preparation de la string de connection "connect"
server = Range("Base").Cells(2, 2)
base = Range("Base").Cells(3, 2)
login = Range("Base").Cells(4, 2)
password = Range("Base").Cells(5, 2)
connect = "ODBC;DRIVER=SQL Server;SERVER=" & server & _
";UID=" & login & _
";PWD=" & password & _
";APP=Microsoft® Query;;DATABASE=" & base
Worksheets("Brut").QueryTables(1).Connection = connect

' Refresh
Selection.QueryTable.Refresh BackgroundQuery:úlse



Merci pour ta réponse FFO, cela me semble une très bonne piste.


Rebonjours à toi

j'utilise aussi cette procédure et décline effectivement à chaque fois mon
identité en saisissant le mot de passe approprié

J'ai avec l'enregistreur de macro obtenu les lignes suivantes avec cette
procédure :

With ActiveSheet.QueryTables.Add(Connection:= _
"ODBC;DSN=Nom de la base;UID=Instance de la
base;PWD=Password;DBQ=Nom de la
base;DBA=W;APA=T;FEN=T;QTO=T;FRC;FDL;LOB=T;RST=T;FRL=F;MTS=F;CSR=F;PFC;TLO=0;" _
, Destination:=Range("A1"))
.CommandText = Array( _
"SELECT TL_VEG_TVA_FT.OCCID, TL_VEG_TVA_FT.OCCUNIQUE,
TL_VEG_TVA_FT.ZONE_VEGAS, TL_VEG_TVA_FT.CODE_TYPE_FISC,
TL_VEG_TVA_FT.C_TVA_FT" & Chr(13) & "" & Chr(10) & "FROM REF.TL_VEG_TVA_FT
TL_VEG_TVA_FT" _
)
.Name = "Lancer la requête à partir de Nom de la base"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:úlse
End With

Si je relance la macro j'obtiens le résultat sans saisie de mot de passe

Tu peux t'inspirer de cette méthode pour dans une macro réaliser le code
approprié
rajoute la commande : PWD=Password tel que décrit dans la macro ci-dessus

Ce code pourra être éxécuté par le biais d'une simple macro ou intégré dans
le ThisWorkbook déclenché à l'ouverture du document avec le code modifiée
ainsi :

Private Sub Workbook_Open()
Sheets("Feuil1").Cells.Clear
With ActiveSheet.QueryTables.Add(Connection:= _
"ODBC;DSN=Nom de la base;UID=Instance de la
base;PWD=Password;DBQ=Nom de la
base;DBA=W;APA=T;FEN=T;QTO=T;FRC;FDL;LOB=T;RST=T;FRL=F;MTS=F;CSR=F;PFC;TLO=0;" _
, Destination:=Range("A1"))
.CommandText = Array( _
"SELECT TL_VEG_TVA_FT.OCCID, TL_VEG_TVA_FT.OCCUNIQUE,
TL_VEG_TVA_FT.ZONE_VEGAS, TL_VEG_TVA_FT.CODE_TYPE_FISC,
TL_VEG_TVA_FT.C_TVA_FT" & Chr(13) & "" & Chr(10) & "FROM REF.TL_VEG_TVA_FT
TL_VEG_TVA_FT" _
)
.Name = "Lancer la requête à partir de Nom de la base"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:úlse
End With
End Sub

Tu pourras Verrouiller le Thisworkbook (click droit/Propriétés de
VBAProject onglet Protection) et ainsi d'interdire sa lecture et notamment le
mot de passe

Je pense que cette solution devrait te convenir



Merci pour ton aide, elle pourra constituer un palliatif le cas échéant,
cependant jusqu'à présent j'utilise une façon différente qui m'évite de faire
figurer le password dans le code VB :
1) Je créé une vue dans la base de données (SQL Server)
2) Dans Excel, je crée une source de donnée qui pointe sur la base et je
coche "Enregistrer l'idendité et le mot de passe de l'utilisateur"
3) Dans une feuille Excel, j'utilise "Données/Données externe/créer une
requete" qui m'ouvre l'assistant requete, je sélectionne la source créée et
je peux ensuite selectionner les colonnes que je veux importer dans Excel.

Ensuite, jusqu'alors le fichier Excel devenait "autoporteur", il pouvait
être utilisé sur n'importe quel PC sans avoir à connaître le mot de passe, en
outre je peux mettre facilement à jour le code VB de l'outil sans risque
d'écraser le passwd ou le nom de la base qui diffèrent selon les utilisateurs
(il y a plusieurs bases).
La seule ligne de VB utilisée est la suivante :
' Extraction
Selection.QueryTable.Refresh BackgroundQuery:úlse

Le problème c'est que maintenant lorsque les utilisateur executent ce code,
Excel 2k3 sort en erreur "Echec de l'autorisation". Si je fais un
"Actualiser" dans la feuille concernée, Excel me demande le mot de passe, du
moins la première fois, mais si je ferme et que je le réouvre il le redemande.

En fait j'ai donc déjà un premier palliatif qui consiste, pour les
utilisateurs, à faire un "Actualiser les données" dans chaque onglet qui
importe des données, cela permet de saisir le mot de passe, ensuite
l'utilisateur peux dérouler x fois les macros VB sans PB, à condition de ne
pas sortir d'Excel.

J'aimerais toutefois revenir au fonctionnement constaté avec Excel2000, soit
pas de mot de passe dans le code VB, et execution du code sans demande de mot
de passe.
(que ce soit par VB ou par le menu "actualiser").

Merci encore pour ton aide.



Bonjour,

Je suis récemment passé d'Excel2000 à Excel2003, et il semble bien que la
gestion des mot de passe lié à des accès ODBC (sur SQL Server) ait changé.
Maintenant le mot de passe est demandé à chaque fois que je veux actualiser
les données (une fois par session), alors que jusqu'alors, dans la mesure où
j'ai choisi l'option "sauver le mot de passe" dans la source de données, il
n'était jamais plus demandé.
Comment pourrais-je retrouver le fonctionnement précédent.

Merci par avance pour votre aide.
Claude Barbier









Avatar
Stan37
Finalement, la solution est très simple, il suffit de cocher la case «
enregistrer le mot de passe » dans les propriétés de la plage de données
externes.




Finalement, voivci la solution que j'ai trouvée, je charge en VB, la string
de connection avant de rafraichir l'onglet, les données de connexion sont
dans une feuille du classeur qui pet être protégée si nécessaire.

'Preparation de la string de connection "connect"
server = Range("Base").Cells(2, 2)
base = Range("Base").Cells(3, 2)
login = Range("Base").Cells(4, 2)
password = Range("Base").Cells(5, 2)
connect = "ODBC;DRIVER=SQL Server;SERVER=" & server & _
";UID=" & login & _
";PWD=" & password & _
";APP=Microsoft® Query;;DATABASE=" & base
Worksheets("Brut").QueryTables(1).Connection = connect

' Refresh
Selection.QueryTable.Refresh BackgroundQuery:úlse



Merci pour ta réponse FFO, cela me semble une très bonne piste.


Rebonjours à toi

j'utilise aussi cette procédure et décline effectivement à chaque fois mon
identité en saisissant le mot de passe approprié

J'ai avec l'enregistreur de macro obtenu les lignes suivantes avec cette
procédure :

With ActiveSheet.QueryTables.Add(Connection:= _
"ODBC;DSN=Nom de la base;UID=Instance de la
base;PWD=Password;DBQ=Nom de la
base;DBA=W;APA=T;FEN=T;QTO=T;FRC;FDL;LOB=T;RST=T;FRL=F;MTS=F;CSR=F;PFC;TLO=0;" _
, Destination:=Range("A1"))
.CommandText = Array( _
"SELECT TL_VEG_TVA_FT.OCCID, TL_VEG_TVA_FT.OCCUNIQUE,
TL_VEG_TVA_FT.ZONE_VEGAS, TL_VEG_TVA_FT.CODE_TYPE_FISC,
TL_VEG_TVA_FT.C_TVA_FT" & Chr(13) & "" & Chr(10) & "FROM REF.TL_VEG_TVA_FT
TL_VEG_TVA_FT" _
)
.Name = "Lancer la requête à partir de Nom de la base"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:úlse
End With

Si je relance la macro j'obtiens le résultat sans saisie de mot de passe

Tu peux t'inspirer de cette méthode pour dans une macro réaliser le code
approprié
rajoute la commande : PWD=Password tel que décrit dans la macro ci-dessus

Ce code pourra être éxécuté par le biais d'une simple macro ou intégré dans
le ThisWorkbook déclenché à l'ouverture du document avec le code modifiée
ainsi :

Private Sub Workbook_Open()
Sheets("Feuil1").Cells.Clear
With ActiveSheet.QueryTables.Add(Connection:= _
"ODBC;DSN=Nom de la base;UID=Instance de la
base;PWD=Password;DBQ=Nom de la
base;DBA=W;APA=T;FEN=T;QTO=T;FRC;FDL;LOB=T;RST=T;FRL=F;MTS=F;CSR=F;PFC;TLO=0;" _
, Destination:=Range("A1"))
.CommandText = Array( _
"SELECT TL_VEG_TVA_FT.OCCID, TL_VEG_TVA_FT.OCCUNIQUE,
TL_VEG_TVA_FT.ZONE_VEGAS, TL_VEG_TVA_FT.CODE_TYPE_FISC,
TL_VEG_TVA_FT.C_TVA_FT" & Chr(13) & "" & Chr(10) & "FROM REF.TL_VEG_TVA_FT
TL_VEG_TVA_FT" _
)
.Name = "Lancer la requête à partir de Nom de la base"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:úlse
End With
End Sub

Tu pourras Verrouiller le Thisworkbook (click droit/Propriétés de
VBAProject onglet Protection) et ainsi d'interdire sa lecture et notamment le
mot de passe

Je pense que cette solution devrait te convenir



Merci pour ton aide, elle pourra constituer un palliatif le cas échéant,
cependant jusqu'à présent j'utilise une façon différente qui m'évite de faire
figurer le password dans le code VB :
1) Je créé une vue dans la base de données (SQL Server)
2) Dans Excel, je crée une source de donnée qui pointe sur la base et je
coche "Enregistrer l'idendité et le mot de passe de l'utilisateur"
3) Dans une feuille Excel, j'utilise "Données/Données externe/créer une
requete" qui m'ouvre l'assistant requete, je sélectionne la source créée et
je peux ensuite selectionner les colonnes que je veux importer dans Excel.

Ensuite, jusqu'alors le fichier Excel devenait "autoporteur", il pouvait
être utilisé sur n'importe quel PC sans avoir à connaître le mot de passe, en
outre je peux mettre facilement à jour le code VB de l'outil sans risque
d'écraser le passwd ou le nom de la base qui diffèrent selon les utilisateurs
(il y a plusieurs bases).
La seule ligne de VB utilisée est la suivante :
' Extraction
Selection.QueryTable.Refresh BackgroundQuery:úlse

Le problème c'est que maintenant lorsque les utilisateur executent ce code,
Excel 2k3 sort en erreur "Echec de l'autorisation". Si je fais un
"Actualiser" dans la feuille concernée, Excel me demande le mot de passe, du
moins la première fois, mais si je ferme et que je le réouvre il le redemande.

En fait j'ai donc déjà un premier palliatif qui consiste, pour les
utilisateurs, à faire un "Actualiser les données" dans chaque onglet qui
importe des données, cela permet de saisir le mot de passe, ensuite
l'utilisateur peux dérouler x fois les macros VB sans PB, à condition de ne
pas sortir d'Excel.

J'aimerais toutefois revenir au fonctionnement constaté avec Excel2000, soit
pas de mot de passe dans le code VB, et execution du code sans demande de mot
de passe.
(que ce soit par VB ou par le menu "actualiser").

Merci encore pour ton aide.



Bonjour,

Je suis récemment passé d'Excel2000 à Excel2003, et il semble bien que la
gestion des mot de passe lié à des accès ODBC (sur SQL Server) ait changé.
Maintenant le mot de passe est demandé à chaque fois que je veux actualiser
les données (une fois par session), alors que jusqu'alors, dans la mesure où
j'ai choisi l'option "sauver le mot de passe" dans la source de données, il
n'était jamais plus demandé.
Comment pourrais-je retrouver le fonctionnement précédent.

Merci par avance pour votre aide.
Claude Barbier











Avatar
FFO
Rebonjours à toi

Où celà se trouve t'il

Merci de la précision


Finalement, la solution est très simple, il suffit de cocher la case «
enregistrer le mot de passe » dans les propriétés de la plage de données
externes.




Finalement, voivci la solution que j'ai trouvée, je charge en VB, la string
de connection avant de rafraichir l'onglet, les données de connexion sont
dans une feuille du classeur qui pet être protégée si nécessaire.

'Preparation de la string de connection "connect"
server = Range("Base").Cells(2, 2)
base = Range("Base").Cells(3, 2)
login = Range("Base").Cells(4, 2)
password = Range("Base").Cells(5, 2)
connect = "ODBC;DRIVER=SQL Server;SERVER=" & server & _
";UID=" & login & _
";PWD=" & password & _
";APP=Microsoft® Query;;DATABASE=" & base
Worksheets("Brut").QueryTables(1).Connection = connect

' Refresh
Selection.QueryTable.Refresh BackgroundQuery:úlse



Merci pour ta réponse FFO, cela me semble une très bonne piste.


Rebonjours à toi

j'utilise aussi cette procédure et décline effectivement à chaque fois mon
identité en saisissant le mot de passe approprié

J'ai avec l'enregistreur de macro obtenu les lignes suivantes avec cette
procédure :

With ActiveSheet.QueryTables.Add(Connection:= _
"ODBC;DSN=Nom de la base;UID=Instance de la
base;PWD=Password;DBQ=Nom de la
base;DBA=W;APA=T;FEN=T;QTO=T;FRC;FDL;LOB=T;RST=T;FRL=F;MTS=F;CSR=F;PFC;TLO=0;" _
, Destination:=Range("A1"))
.CommandText = Array( _
"SELECT TL_VEG_TVA_FT.OCCID, TL_VEG_TVA_FT.OCCUNIQUE,
TL_VEG_TVA_FT.ZONE_VEGAS, TL_VEG_TVA_FT.CODE_TYPE_FISC,
TL_VEG_TVA_FT.C_TVA_FT" & Chr(13) & "" & Chr(10) & "FROM REF.TL_VEG_TVA_FT
TL_VEG_TVA_FT" _
)
.Name = "Lancer la requête à partir de Nom de la base"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:úlse
End With

Si je relance la macro j'obtiens le résultat sans saisie de mot de passe

Tu peux t'inspirer de cette méthode pour dans une macro réaliser le code
approprié
rajoute la commande : PWD=Password tel que décrit dans la macro ci-dessus

Ce code pourra être éxécuté par le biais d'une simple macro ou intégré dans
le ThisWorkbook déclenché à l'ouverture du document avec le code modifiée
ainsi :

Private Sub Workbook_Open()
Sheets("Feuil1").Cells.Clear
With ActiveSheet.QueryTables.Add(Connection:= _
"ODBC;DSN=Nom de la base;UID=Instance de la
base;PWD=Password;DBQ=Nom de la
base;DBA=W;APA=T;FEN=T;QTO=T;FRC;FDL;LOB=T;RST=T;FRL=F;MTS=F;CSR=F;PFC;TLO=0;" _
, Destination:=Range("A1"))
.CommandText = Array( _
"SELECT TL_VEG_TVA_FT.OCCID, TL_VEG_TVA_FT.OCCUNIQUE,
TL_VEG_TVA_FT.ZONE_VEGAS, TL_VEG_TVA_FT.CODE_TYPE_FISC,
TL_VEG_TVA_FT.C_TVA_FT" & Chr(13) & "" & Chr(10) & "FROM REF.TL_VEG_TVA_FT
TL_VEG_TVA_FT" _
)
.Name = "Lancer la requête à partir de Nom de la base"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:úlse
End With
End Sub

Tu pourras Verrouiller le Thisworkbook (click droit/Propriétés de
VBAProject onglet Protection) et ainsi d'interdire sa lecture et notamment le
mot de passe

Je pense que cette solution devrait te convenir



Merci pour ton aide, elle pourra constituer un palliatif le cas échéant,
cependant jusqu'à présent j'utilise une façon différente qui m'évite de faire
figurer le password dans le code VB :
1) Je créé une vue dans la base de données (SQL Server)
2) Dans Excel, je crée une source de donnée qui pointe sur la base et je
coche "Enregistrer l'idendité et le mot de passe de l'utilisateur"
3) Dans une feuille Excel, j'utilise "Données/Données externe/créer une
requete" qui m'ouvre l'assistant requete, je sélectionne la source créée et
je peux ensuite selectionner les colonnes que je veux importer dans Excel.

Ensuite, jusqu'alors le fichier Excel devenait "autoporteur", il pouvait
être utilisé sur n'importe quel PC sans avoir à connaître le mot de passe, en
outre je peux mettre facilement à jour le code VB de l'outil sans risque
d'écraser le passwd ou le nom de la base qui diffèrent selon les utilisateurs
(il y a plusieurs bases).
La seule ligne de VB utilisée est la suivante :
' Extraction
Selection.QueryTable.Refresh BackgroundQuery:úlse

Le problème c'est que maintenant lorsque les utilisateur executent ce code,
Excel 2k3 sort en erreur "Echec de l'autorisation". Si je fais un
"Actualiser" dans la feuille concernée, Excel me demande le mot de passe, du
moins la première fois, mais si je ferme et que je le réouvre il le redemande.

En fait j'ai donc déjà un premier palliatif qui consiste, pour les
utilisateurs, à faire un "Actualiser les données" dans chaque onglet qui
importe des données, cela permet de saisir le mot de passe, ensuite
l'utilisateur peux dérouler x fois les macros VB sans PB, à condition de ne
pas sortir d'Excel.

J'aimerais toutefois revenir au fonctionnement constaté avec Excel2000, soit
pas de mot de passe dans le code VB, et execution du code sans demande de mot
de passe.
(que ce soit par VB ou par le menu "actualiser").

Merci encore pour ton aide.



Bonjour,

Je suis récemment passé d'Excel2000 à Excel2003, et il semble bien que la
gestion des mot de passe lié à des accès ODBC (sur SQL Server) ait changé.
Maintenant le mot de passe est demandé à chaque fois que je veux actualiser
les données (une fois par session), alors que jusqu'alors, dans la mesure où
j'ai choisi l'option "sauver le mot de passe" dans la source de données, il
n'était jamais plus demandé.
Comment pourrais-je retrouver le fonctionnement précédent.

Merci par avance pour votre aide.
Claude Barbier