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

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 676
    Points : 121
    Points
    121
    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 actif
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 153
    Points : 215
    Points
    215
    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 régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 676
    Points : 121
    Points
    121
    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 actif
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 153
    Points : 215
    Points
    215
    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)

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 676
    Points : 121
    Points
    121
    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 ?

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

    Informations forums :
    Inscription : Juillet 2013
    Messages : 153
    Points : 215
    Points
    215
    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é

  8. #8
    Invité
    Invité(e)
    Par défaut
    si ton fichier se trouve sur un serveur, et que celui-ci est protégé par un mot passe, vas dans explorateur Windows donne lui la lettre out IP puis rentre le useur et le password et coche la case se souvenir.

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 676
    Points : 121
    Points
    121
    Par défaut
    .SavePassword = True ne fonctionne pas, j'ai déjà essayé.
    Le truc c'est que ni le fichier, ni le serveur n'est proposé par un mot de passe mais il le demande quand même et le redemande même si je clique sur OK en n'indiquant rien. Il faut que je clique sur Annuler pour que ça se lance enfin mais ça n'est absolument pas logique pour mes utilisateurs.

  10. #10
    Invité
    Invité(e)
    Par défaut
    c'est un problème réseau pas vb!

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 676
    Points : 121
    Points
    121
    Par défaut
    Ben j'ai essayé avec deux PC différents sur deux réseaux informatiques différents.
    Il y a des configurations par défaut des ordinateurs et des réseaux Internet. De plus le serveur est tout à fait commun, il s'agit d'un Debian en LAMP de chez Online sans configuration particulière, il y a un site dessus qui est accessible à tout les visiteurs (sans mot de passe donc). Le CSV que je cherche à télécharger est sur ce site au même titre qu'une page internet. Ce n'est pas un fichier protégé par mot de passe ni quoi que ce soit. D'ailleurs quand je fais Annuler sur la boite de dialogue, ça me le télécharge normalement.

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