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 :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 [Lientemp] = "='" & CheminEchange & "\" & "[" & FicUtil & "]Infos'!$A$10"En revanche, je n'arrive pas à lire ce que contient la cellule A2 de cette même 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
Alors qu'il y a eut une date inscrite avec le code ci-dessus,
le code suivant ne me renvoie rien :celui-ci non plus :
Code : Sélectionner tout - Visualiser dans une fenêtre à part [Lientemp] = "='" & CheminEchange & "\" & "[" & FicUtil & "]Sessions'!$A$2"et une connexion ADODB comme celle-ci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part [Lientemp] = ExecuteExcel4Macro("'" & CheminEchange & "\[" & FicUtil & "]Sessions'!R2C1")à deux comportements :
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
- 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
Partager