IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Excel Discussion :

Attendre fin lecture SQL ADODB avant de poursuivre


Sujet :

Excel

  1. #1
    Membre averti
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Points : 314
    Points
    314
    Par défaut Attendre fin lecture SQL ADODB avant de poursuivre
    Bonjour,
    J'utilise une procédure GetDataFromADO pour lire une base SQL.
    Ensuite je fais un calcul sur les valeurs renvoyées.

    Quand j'exécute ma macro cela se passe bien.
    Par contre lorsque je l'appelle depuis une autre procédure avec >application.run<.
    Les calculs ne se font pas.

    Je pense que la partie qui met en place les formules n'attend pas le retour des info de la lecture sql.

    J'ai essayer de mettre un
    >doevents< avant la zone de calcul mais ça n'a rien changé.
    J'ai mi une procédure de wait avant de faire le calcul. idem
    J'ai mis les deux.idem

    Voici l'extrait de mon code
    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
    Sub GetDataFromADO()
        Cells.Select
        Range("b2:Z65536").Select
        Selection.ClearContents
     
        'Declare variables'
            Dim objMyConn As ADODB.Connection
            Dim objMyCmd As ADODB.Command
            Dim objMyRecordset As ADODB.Recordset
     
            Set objMyConn = New ADODB.Connection
            Set objMyCmd = New ADODB.Command
            Set objMyRecordset = New ADODB.Recordset
     
        'Open Connection'
    '        objMyConn.ConnectionString = "Provider=SQLOLEDB;Data Source=
    '...
    '...
    '        objMyCmd.CommandType = adCmdText'
        'Open Recordset'
    '        Set objMyRecordset.Source = objMyCmd'
    '        objMyRecordset.Open
     
        Range("B2").Select
        ActiveSheet.Range("B2").CopyFromRecordset objMyRecordset
    '  ************** Le code qui suit ne s'exécute pas **************
    DoEvents
    While IsEmpty(Cells(2, 2).Value) Or attend > 10000
    Application.Wait Now + TimeValue("0:00:01")
    ' on met une limite
    attend = attend + 1
    Wend
        Range("D65536").Select
        Range(Selection, Selection.End(xlUp)).Select
        nbl = ActiveCell.Row
    '    Range("L2").Select
        Cells(2, 12).FormulaR1C1 = _
            "=(MID(RC[-1],14,3))*1&RIGHT(RC[-1],1)&""-""&(MID(RC[-7],14,3))*1&""-""&(CODE(RIGHT(RC[-7],1))-64)"
     
        Range(Cells(2, 12), Cells(nbl, 12)).Select
        Selection.FillDown
     
    End Sub
    Idées ?
    Merci Denis

  2. #2
    Membre averti
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Points : 314
    Points
    314
    Par défaut
    En re debuggant, j'ai l'impression que c'est mon <application.run> qui a un soucis.
    En effet j'ai remarqué que le débugger m'affichait le end sub de la macro appelé non pas à la fin de son exécution, mais à juste à la fin de l'exécution de l'appelant.

Discussions similaires

  1. [XL-2007] Attendre la fin d'une requête SQL ADODB
    Par Denis_67 dans le forum Excel
    Réponses: 0
    Dernier message: 16/12/2013, 15h16
  2. Shell, attendre fin exe avant continuer macro
    Par Yunchi dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/02/2009, 15h40
  3. Réponses: 12
    Dernier message: 06/02/2009, 14h13
  4. Réponses: 3
    Dernier message: 21/12/2007, 14h10
  5. Réponses: 2
    Dernier message: 17/07/2007, 13h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo