Chargement de données externes empêche la poursuite correcte du code

nikkss

XLDnaute Nouveau
Bonjour le forum,

Voici mon problème:

Je charge sur une feuille les données d'une table ACCESS et je fais des traitements ensuite dessus.
Code:
'Import des données de la table cible sur la feuille de calcul
    sqlChaine = "select * from MaTable"
    ChaineConn = "ODBC;DSN=MS Access Database;DBQ=" & Application.GetOpenFileName()
    ActiveSheet.QueryTables.Add(Connection:=ChaineConn, Destination:=Range("$A$2"), Sql:=sqlChaine).Refresh

Le soucis c'est que les données ne sont pas insérées directement, il y a semble t'il une lecture avant l'affichage. Du coup les traitements que je peux lancer derrière ne sont pas fait car les données ne sont pas encore sur la feuille.

Le pas à pas fonctionne, les données s'affichent sur la feuille dès la ligne
Code:
ActiveSheet.QueryTables.Add(Connection:=ChaineConn, Destination:=Range("$A$2"), Sql:=sqlChaine).Refresh
passée. Mais impossible de le faire en exécution standard (clic sur le bouton). Par contre dès que l'exécution est (end sub passé) terminée, les données s'affichent comme par enchantement, mais sans les traitements associés bien sûr.

Je sais que si je fais deux boutons différent cela fonctionnera. Mais j'aurai aimé faire le tout avec un seul et même bouton.

Merci pour votre aide.
 

Yakou

XLDnaute Nouveau
Re : Chargement de données externes empêche la poursuite correcte du code

Tu fait 1 macro que tu rattache à ton bouton ou tu appeles tes 2 macros.

Exemple:

Code:
Sub Start_button()

Call GetData_access()
Call Traitement_data()

end sub

Principe de l'encapsulation.
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : Chargement de données externes empêche la poursuite correcte du code

Bonjour,

essaye peut être avec ceci :
Code:
With ActiveSheet.QueryTables.Add(Connection:=ChaineConn, Destination:=Range("$A$2"), Sql:=sqlChaine)
.Refresh BackgroundQuery:=False
End With

Non testé...

bon après midi
@+
 

Yakou

XLDnaute Nouveau
Re : Chargement de données externes empêche la poursuite correcte du code

si le fait de séparer les 2 fonctions et de les appelés l'une après l'autre ne fonctionne pas comme ci dessous, est surement du à un problème de variable ou de logique.

Code:
Sub Start_button()

Call GetData_access()
Call Traitement_data()

end sub

Possible que ta variable ait une portée sur la 1ère procédure mais ne se transmet pas à la 2nd.
pour corriger ça il faudrait la mettre au niveau supérieur de tes procédures.

exemple:

Code:
Sub Start_button()

Dim texte_traitement() as Variant

Call GetData_access(texte_traitement())
Call Traitement_data(texte_traitement())

end sub


sub GetData_access(byref texte_traitement() as variant)

Static ligne_fin as long
Static colone_Fin as byte

< code>
redim texte_traitement(1 to ligne_fin, 1 to colone_Fin)
</code>

end sub

sub Traitement_data(byref texte_traitement() as variant)
< code></code>
end sub


sinon c'est possible que le fait que tu n'es pas stocké le résultat dans un recordset, il n’exécute pas ta requête.
Je ne suis pas calé en base de données mais j'ai réussi à stocker les données dans un recordset access et à l'écrire dans une feuille excel.

Le code se trouve dans le lien ci dessous.

stocker des données sur un recordset

faut juste que tu remplaces la syntaxe en rouge par

Code:
Sheets(1).Cells(1, 1).CopyFromRecordset oRS


essaye de creuser ces pistes.
sinon faudrait que je vois ton code complet pour en savoir plus.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Chargement de données externes empêche la poursuite correcte du code

Bonjour.

À essayer quand même: un DoEvents après la 1ère opération pour forcer l'exécution immédiate des tâches asynchrones demandées.
 

Discussions similaires

Réponses
7
Affichages
391

Statistiques des forums

Discussions
312 429
Messages
2 088 350
Membres
103 822
dernier inscrit
kader55