Bonjour à tous,

Je suis en train de m'arracher les derniers cheveux qui me restent.
Dans mon programme, je génère des fichiers Excel en .html
Pourquoi en html ? tout simplement parce qu'ils n'apparaissent pas dans la liste des fichiers récents Excel du bouton démarrer de windows. Et comme j'en fait pas mal, cette liste serait vite remplie de fichiers dont je n'ai aucune utilité en accès direct. Ce sont des fichiers liés au fichier principal dans lequel le code VBA tourne. Mais le problème n'est pas là.

Ces fichiers comportent 4 onglets. Le premier est vide, le deuxième (Infos) comporte des données qui sont inscrites à la création du fichier, le troisième (Sessions) et le quatrième (SauvProp) sont des tableaux crées avec le fichier et alimentés à l'aide d'une connexion ADODB.
Les 3 derniers onglets (Infos, Sessions et SauvProp) sont cachés en Veryhidden et les onglets sont aussi en mode cachés sous Excel.

Pas de problème pour lire les données qui ont été inscrites sur la feuille 2 à la création du fichier.
Je retrouve bien dans la cellule 'Lientemp' les données inscrites en A10 de la feuille Infos avec l'instruction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
[Lientemp] = "='" & CheminEchange & "\" & "[" & FicUtil & "]Infos'!$A$10"
Pas de problème non plus pour écrire dans les tableaux à l'aide d'une connexion ADODB comme ceci pour la feuille Sessions :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Sub EnregUtil(NomFic As String, NomFeuil As String, Statut As String)
 
Dim Source As ADODB.Connection
Dim Sql As String
Dim ConWeb As String
Dim Droits As String
Dim Donnees(5) As String
Dim LongueurDonnees As Long
Dim Compteur As Integer
Dim Resultat As String
On Error Resume Next
Erase Donnees
 
......... quelques instructions de mise en forme des données sans intérêt pour la compréhension .............
 
SetAttr NomFic, vbNormal 'ici je restitue le mode normal au fichier
Set Source = New ADODB.Connection
Source.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & NomFic & ";Extended Properties=""Excel 12.0;;HDR=YES;"""
Sql = "INSERT INTO [" & NomFeuil & "$] " & _
"VALUES(#" & Format(Date, "dd/mm/yyyy") & "#, #" & Time & "#, '" & Donnees(1) & "', '" & Donnees(2) & "', '" & _
    Donnees(3) & "', '" & Donnees(4) & "')"
Source.Execute Sql
Source.Close
Set Source = Nothing
SetAttr NomFic, vbHidden 'remise en mode caché
End Sub
En revanche, je n'arrive pas à lire ce que contient la cellule A2 de cette même feuille Sessions.
Alors qu'il y a eut une date inscrite avec le code ci-dessus,

le code suivant ne me renvoie rien :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
[Lientemp] = "='" & CheminEchange & "\" & "[" & FicUtil & "]Sessions'!$A$2"
celui-ci non plus :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
[Lientemp] = ExecuteExcel4Macro("'" & CheminEchange & "\[" & FicUtil & "]Sessions'!R2C1")
et une connexion ADODB comme celle-ci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
Code envoyé à Sub Extraction :
Extraction CheminEchange & "\" & FicUtil, "Sessions$", "A2:A2"
 
Sub Extraction(NomFic As String, NomFeuil As String, Cellule As String)
Dim Source As ADODB.Connection
Dim Rst As ADODB.Recordset
Dim ADOCommand As ADODB.Command
 
On Error Resume Next
 
SetAttr NomFic, vbNormal
Set Source = New ADODB.Connection
Source.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & NomFic & ";Extended Properties=""Excel 12.0;;HDR=YES;"""
Set ADOCommand = New ADODB.Command
With ADOCommand
    .ActiveConnection = Source
    .CommandText = "SELECT * FROM [" & NomFeuil & Cellule & "]"
End With
 
Set Rst = New ADODB.Recordset
Rst.Open ADOCommand, , adOpenKeyset, adLockOptimistic
 
Set Rst = Source.Execute("[" & NomFeuil & Cellule & "]")
 
[Lientemp].CopyFromRecordset Rst
 
Rst.Close
Source.Close
Set Source = Nothing
Set Rst = Nothing
Set ADOCommand = Nothing
SetAttr NomFic, vbHidden 'vbReadOnly abandonné car pb maj avec CS
 
End Sub
à deux comportements :
- Sans l'instruction On Error Resume Next le code bloque à l'instruction Rst.Open .... avec l'erreur d'exécution -2147467259 (80004005) : "cette table contient des cellules hors de la plage de cellules définie dans cette feuille de calcul" si le tableau n'a pas encore eut d'enregistrement, (il y a seulement les titres des colonnes dans la feuille),
- Et s'il y a une valeur date en A2, ce code ne renvoie rien.

Ce que j'ai du mal à comprendre c'est pourquoi je peux lire sans problème le contenu d'une cellule qui a été remplie lors de la création du fichier et que je ne peux pas le faire sur une cellule d'un tableau rempli classeur fermé à l'aide d'ADODB. Excepté que la première est un texte et la seconde une date, qu'est-ce qui différencie ces cellules du point de vue de leur lecture ?

En fait, cette feuille enregistre les sessions de l'utilisateur avec une date et une heure. Je cherche l'absence de valeur en A2 pour réaliser des instructions d'accueil des nouveaux utilisateurs. Pour le moment, comme la valeur renvoyée est nulle, j'accueille les utilisateurs à chacune de leur session !

Merci d'avance à ceux qui pourront m'aider.

Michel