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

Macros et VBA Excel Discussion :

Lancer une action à la fin d'un QueryTables.Add


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 676
    Par défaut Lancer une action à la fin d'un QueryTables.Add
    Bonjour,

    J'ai un script qui lance la fonction importer_nva_csv pour récupérer un CSV dans une feuille. Je souhaite une fois que cela est fait trier ces données. Mon soucis est qu'un bug survient au lancement. Le bug est sur la fonction trier et il est dit qu'il n'y a aucune donnée à trier. je clique sur Débuggage et je clique sur play ensuite et là ça marche parce qu'entre temps les données ont été téléchargées. Je souhaiterais donc que la fonction trier s'execute après le téléchargement total des données. Actuellement j'ai l'impression que les deux se font en parallèle et je ne vois pas comment corriger cela.

    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
    Sub trier()
        Worksheets("Journal").Range("A:L").Sort Key1:=Range("D1"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase _
            :=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
    End Sub
     
     
    Sub importer_nva_csv(url As String)
     
        With Worksheets("Journal").QueryTables.Add(Connection:= _
            "TEXT;" & url _
            , Destination:=Worksheets("Journal").Range("A1"))
            .Name = "xxx"
            .FieldNames = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .TextFilePromptOnRefresh = False
            .TextFilePlatform = 1252
            .TextFileStartRow = 1
            .TextFileParseType = xlDelimited
            .TextFileTextQualifier = xlTextQualifierDoubleQuote
            .TextFileConsecutiveDelimiter = False
            .TextFileTabDelimiter = False
            .TextFileSemicolonDelimiter = True
            .TextFileCommaDelimiter = False
            .TextFileSpaceDelimiter = False
            .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
            .TextFileTrailingMinusNumbers = True
            .Refresh BackgroundQuery:=False
        End With
     
        Call trier
    End Sub
    J'ai aussi accessoirement un autre soucis. Au lancement de cette fonction il apparait un panneau me demandant le login et le mot de passe sur le serveur (or il n'y en a pas), comment enlever ce panneau ?

    Merci

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 153
    Par défaut
    Bonjour,

    Peut être qu'un
    Doevents
    pourrait aider.
    (cf http://msdn.microsoft.com/en-us/libr...(v=vs.60).aspx)

    Poulpe

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 676
    Par défaut
    Merci pour l'idée mais je ne pense pas que cela puisse m'aider. Je pourrais en effet créer un évènement "Si la case A8 est rempli, trier" mais je ne sais pas jusqu'à quelle case il y aura des données et je trierais donc des parties de tableau. Ce que j'aimerais faire c'est "Si la fonction QueryTables.Add a fini, trier", mais là je ne vois pas comment mettre ça en place.

  4. #4
    Invité
    Invité(e)
    Par défaut Bonjour,
    le doevent na rien à voir avec les événements! cette fonction qui redonne la main à Windows pour qu'il rafraîchisse ses pages mémoire.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 676
    Par défaut
    En effet, autant pour moi, je viens de modifier le fonctionnement comme il suit et ça marche !

    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
    Sub trier()
        Worksheets("Journal").Range("A:L").Sort Key1:=Range("D1"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase _
            :=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
    End Sub
     
     
    Sub importer_nva_csv(url As String)
     
        With Worksheets("Journal").QueryTables.Add(Connection:= _
            "TEXT;" & url _
            , Destination:=Worksheets("Journal").Range("A1"))
            .Name = "xxx"
            .FieldNames = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .TextFilePromptOnRefresh = False
            .TextFilePlatform = 1252
            .TextFileStartRow = 1
            .TextFileParseType = xlDelimited
            .TextFileTextQualifier = xlTextQualifierDoubleQuote
            .TextFileConsecutiveDelimiter = False
            .TextFileTabDelimiter = False
            .TextFileSemicolonDelimiter = True
            .TextFileCommaDelimiter = False
            .TextFileSpaceDelimiter = False
            .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
            .TextFileTrailingMinusNumbers = True
            .Refresh BackgroundQuery:=False
        End With
     
    DoEvents
     
        Call trier
    End Sub
    Merci beaucoup. Par hasard, saurais-tu pourquoi un panneau me demande le login / mot de passe ?

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 153
    Par défaut
    Eventuellement, peut être en essayant de mettre un
    .SavePassword = True
    avant le end with

    Sinon je n'ai pas d'autre idée, désolé

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 153
    Par défaut
    Eventuellement, peut être une boucle du type :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    While .refreshing
    Application.Wait(Now + TimeValue("0:00:01"))
    Wend
    A mettre avant le end with

    Ca peut faire une boucle infinie (appuie sur échap longuement pour interompre la macro)

Discussions similaires

  1. Comment attendre que tous les thread lancés soient morts pour lancer une action.
    Par rgesnot dans le forum Concurrence et multi-thread
    Réponses: 2
    Dernier message: 31/03/2007, 20h27
  2. Lancer une action par une touche du clavier
    Par benymypony dans le forum Delphi
    Réponses: 3
    Dernier message: 24/10/2006, 19h52
  3. Lancer une action depuis une autre action
    Par anaon dans le forum Struts 1
    Réponses: 6
    Dernier message: 04/08/2006, 19h38
  4. Marquer une pause avant de lancer une action
    Par PrinceMaster77 dans le forum ASP
    Réponses: 1
    Dernier message: 12/07/2006, 11h50
  5. Lancer une action JS depuis un bouton de formulaire
    Par davinout dans le forum Langage
    Réponses: 3
    Dernier message: 14/06/2006, 08h50

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