Bonjour, je précise immédiatement que si je code souvent dans Excel par VBA, je ne suis pas informaticien professionnel sur mon poste et que j'ai découvert la manip que j'utilise là et qui me pose problème de manière totalement empirique.

Je procède ainsi quand je veux avoir accès à une feuille de calculs d'un fichier dans un autre et que cette dernière est très volumineuse, j'ai trouvé que le fichier dans lequel j'exploite est ainsi mois lourd et les calculs plus rapides pour, par exemple, plus de 500 000 lignes).

Sous Access:

- J'importe un fichier feuille de calculs Excel dans Access en faisant une table liée;
- J'exporte la table crée vers une base de données ODBC;
- Dans la fenêtre de dialogue ouverte, je clique sur "NOUVEAU";
- Je vais chercher mon fichier .accdb;
- Access crée un fichier .laccdb.dsn.


Sous Excel:

- Je vais dans obtenir des données;
- A partir d'autres sources;
- A partir de Microsoft Query;
- Je vais chercher mon fichier .laccdb.dsn;
- Je sélectionne l'onglet dans lesquelles sont les données qui m'intéressent;
- Je renvoie les données vers Microsoft Excel;
- Je choisi insérer les données dans la feuille de calculs existante dans la cellule A1 et actualiser à l'ouverture.


Jusqu'à présent je ne rencontrais pas de problèmes et développe mes formules et codes dans ce fichier Excel sur les données ainsi obtenues (la première fois que j'ai utilisé cette méthode, je suivais des stocks, des consommations aux livraisons de fournitures consommées jusqu'à épuisement des stocks puis constations des livraisons. Les données se trouvais sur de postes en dehors de mon service, sur notre réseau et j'utilisais l'actualisation en arrière plan toutes les minutes).

Depuis peu j'ai un problème avec la gestion des colonnes de mes fichiers, j'ai importé des tables Excel dans Access qui pouvaient avoir des colonne qui n'avaient que l'en-tête de rempli du coup l'actualisation sous Excel ne se faisait pas avec un message Trop peu d'éléments attendus. J'ai alors mis plusieurs données dans ces colonnes pour qu'il y ait plusieurs lignes de remplies mais là, mes tables dans Access comprenaient des colonnes complètement vides à la fin des tableaux.

A chaque ouverture du fichier, alors que je cherche une automatisation de l'actualisation, je dois refaire les manips décrites plus haut pour la partie Excel.

Pour un autre fichier Excel (la table liée), le traitement veut que j'insère une colonne chaque jour à l'intérieur de la feuille de calculs, entre les colonnes existantes et cette colonne ne ressort jamais dans le fichier Excel final d'exploitation et là aussi, je recommence les manips décrites plus haut pour la partie Excel.


Je ne sais pas si j'ai pu être assez clair, j'ai pas mal décrit le background pour essayer d'être le plus clair possible sur ma démarche empirique d'un domaine que je ne maîtrise pas encore mais je peux résumer en deux question:

- Est-il possible dans le code que j'ai enregistré avec l'enregistreur de macro Excel en faisant mes manips pour la partie Excel de limiter l'actualisation des données uniquement jusqu'à la dernière colonne non vide de la table des données obtenues?

- Comment gérer ma colonne insérée qui ne ressort jamais dans l'actualisation des données?


Le code que j'obtiens par l'enregistreur de macro:

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
 
Sub ACTUBdDBLOQUEE()
'
' ACTUBdDBLOQUEE Macro
'
 
'
 
 
    Sheets("ANNUAIRE ETABLISSEMENTS CONCERN").Select
 
    Windows("erreurs1803xlsx.xlsm").Activate
 
 
 
 
 
    Range( _
        "Tableau_Lancer_la_requête_à_partir_de_ANNUAIREETABLISSEMENTSCONCERNES.laccdb_1[[#Headers],[UAI]]" _
        ).Select
 
 
    With ActiveWorkbook.Connections( _
        "Lancer la requête à partir de ANNUAIREETABLISSEMENTSCONCERNES").ODBCConnection
        .BackgroundQuery = True
        .CommandText = Array( _
        "SELECT SYNTHESE.UAI, SYNTHESE.CCCC, SYNTHESE.BBBB, SYNTHESE.MEFMLDSHORSAAAA, SYNTHESE.SITUATIONAAAA, SYNTHESE.Z" _
        , _
        "ZZZ, SYNTHESE.`COMMENTAIRE XXXX`, SYNTHESE.BLOQUANTS, SYNTHESE.`39`, SYNTHESE.`54 NBX`, SYNTHESE.`186 ACTIONS`" & Chr(13) & "" & Chr(10) & "FROM" _
        , " SYNTHESE SYNTHESE")
        .CommandType = xlCmdSql
        .Connection = Array(Array( _
        "ODBC;DBQ=S:\XXXX\PERSONNE\YYYY\ZZZZ\REMONTEE MARS\2021\ANNUAIREETABLISSEMENTSCONCERNES.accdb;DefaultDir=S:\DAPEP_PU" _
        ), Array( _
        "B\PERSONNE\YYYY\ZZZZ\REMONTEE MARS\2021;Driver={Microsoft Access Driver (*.mdb, *.accdb)};DriverId=25;FIL=MS Access" _
        ), Array( _
        ";MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;" _
        ))
        .RefreshOnFileOpen = True
        .SavePassword = False
        .SourceConnectionFile = ""
        .SourceDataFile = ""
        .ServerCredentialsMethod = xlCredentialsMethodIntegrated
        .AlwaysUseConnectionFile = False
    End With
    With ActiveWorkbook.Connections( _
        "Lancer la requête à partir de ANNUAIREETABLISSEMENTSCONCERNES")
        .Name = "Lancer la requête à partir de ANNUAIREETABLISSEMENTSCONCERNES"
        .Description = ""
    End With
    ActiveWorkbook.Connections( _
        "Lancer la requête à partir de ANNUAIREETABLISSEMENTSCONCERNES").Refresh
    With Selection.ListObject.QueryTable
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = True
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
    End With
 
 
    ActiveWorkbook.Save
 
 
 
End Sub

Je vous remercie d'avance pour toute aide