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

  • Initiateur de la discussion Initiateur de la discussion nikkss
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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.
 
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:
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
@+
 
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:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour