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

VB 6 et antérieur Discussion :

prob de controle par VB6 de données Excel avec lien internet


Sujet :

VB 6 et antérieur

  1. #1
    Membre averti
    Inscrit en
    Août 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2007
    Messages : 39
    Par défaut prob de controle par VB6 de données Excel avec lien internet
    Bonjour,

    Je vous expose mon problème :

    J'ai un exécutable VB6 qui crée un fichier Excel. Jusque là, pas de problème. Cet exécutable crée dans certaines cellules des formules qui permettent de récupérer certaines données d'un site internet. Cela aussi fonctionne correctement. La récupération de ces données peut prendre un certain temps. Hors pour pouvoir continuer mon traitement, je dois être sûre que tous les éléments ont été ramenés... Et là se trouve tout mon problème !!! Je ne sais pas comment faire en sorte que VB vérifie que toutes les données soient présentes avant de continuer le traitement.

    Quelqu'un peut-il m'aider ?? C'est assez urgent....

    J'espère que ma question est assez claire....

    D'avance merci

    Chris

  2. #2
    Membre Expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Par défaut
    Qu'est ce qu'une formule Excel qui permet de récupérer des données Internet ? Il n'y pas pas moyen de récupérer ces données directement avec VB puis de mettre leur valeur dans ta feuille excel ?

  3. #3
    Membre averti
    Inscrit en
    Août 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2007
    Messages : 39
    Par défaut
    en fait on est dépend d'un système externe. Une fois les formules créées pour chaque cellule dans le fichier Excel, une API propriétaire est lancée qui retourne les données du site. Et je dois savoir quand toutes les données ont terminées d'être retournée. Tant que ce n'est pas le cas, on a N/A dans les cellules.

    VB ne fait que créer les formules, il ne récupère pas lui-même les données.

    je ne sais pas si ça répond à ta question.

  4. #4
    Membre Expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Par défaut
    Ben alors à ce moment là, tu peux toujours tester en boucle la valeur de tes cellules, tant que tu as "N/A" dans une cellule c'est qu'il faut attendre.

  5. #5
    Membre averti
    Inscrit en
    Août 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2007
    Messages : 39
    Par défaut
    oui, j'y avais pensé, mais ce sont de gros fichiers, et j'ai peur que cela prenne un temps fou.... j'avais espéré qu'il existe une autre solution. Auparavant, on utilisait les aLinks, mais cela ne fonctionne plus depuis qu'on a upgradé Excel...

    merci en tout cas de ton aide

  6. #6
    Membre Expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Par défaut
    Tes différentes "requetes" sur Internet se font simultanement depuis Excel ou l'une après l'autre ?
    Y aurait il moyen par exemple d'écrire la formule dans Excel, lancer la requete Internet, attendre le resultat puis passer à la cellule suivante ? NE connaissant pas ta feuille Excel je ne sais pas si cela prendrait beaucoup plus de temps ou pas (un peu plus quand meme probablement mais à voir peut etre).

  7. #7
    Membre averti
    Inscrit en
    Août 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2007
    Messages : 39
    Par défaut
    les requêtes sont lancées en parallèle, mais les réponses arrivent plus ou moins rapidement et de manière aléatoire.

  8. #8
    Membre Expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Par défaut
    Mais as tu essayé, soit de boucler, soit de faire comme je le suggère pour voir le temps que ça prend ? Combien de cellules avec requete dois tu gérer ? Essaye de donner le maximum d'informations d'un seul coup plutot que de te faire tirer les vers du nez

  9. #9
    Membre averti
    Inscrit en
    Août 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2007
    Messages : 39
    Par défaut
    c'est ce que j'étais en train de faire !!

    la boucle fonctionne correctement, il faut juste que j'ajoute un timer pour éviter les boucles infinies au cas où une donnée ne peut pas être trouvée.

    En fait, le nombre de cellules est aléatoire. Cela varie de 10 à plus de 1000 lignes avec pour chaque un nombre de colonnes aléatoires elles aussi... je ne peux donc pas te donner de chiffres précis concernant les cellules à gérer... cela dépend vraiment des clients...

    Le problème, c'est que je dois faire l'exécutable en aveugle sur mon pc et ensuite aller faire mes tests sur un autre PC à l'autre bout du batiment...ce qui prend un peu de temps...

    je te remercie donc pour ton aide, et désolée de ne pas avoir donné toutes les infos tout de suite... c'est la première fois que j'en arrive à utiliser un forum... alors je suis pas très au point sur le principe...


    j'arrête pour aujourd'hui... je reprendrai jeudi matin... donc suite au prochain numéro !!!

    bonne soirée

  10. #10
    Membre averti
    Inscrit en
    Août 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2007
    Messages : 39
    Par défaut depuis vb, recherche dans un fichier Excel de la récupération d'une donnée
    Bonjour,

    J'aurai besoin de savoir si quelqu'un connait un moyen de faire savoir à vb si toutes les cellules ont bien reçu la valeur associée à une formule?

    Existe-t-il une macro capable de détecter la récupération d'une valeur cellule par cellule ? Dans les messages précédents, j'avais fait une recherche de la valeur N/A, mais cela ne peut pas être utilisé car il se peut que la valeur de retour soit N/A aussi.... Donc je tourne en rond....

    Il me faudrait une boucle pour tester la mise à jour des cellules et quand toutes les cellules ont reçues leur valeur (quelle qu'elle soit), avoir un retour "Status terminé" pour me permettre de poursuivre mon traitement....

    J'espère avoir été assez claire...


    D'avance merci

    Chris

  11. #11
    Membre Expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Par défaut
    Tu ne peux pas mettre autre chose que N/A par défaut ? Comme ça si ca renvoie N/A, ben au moins tu sais que la réponse est bien arrivée.

  12. #12
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    on peu voir une de tes formules histoire de mieux comprendre de quoi tu parle ..?

  13. #13
    Membre averti
    Inscrit en
    Août 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2007
    Messages : 39
    Par défaut
    alors voici 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
    44
    45
    46
    47
                Do
                   For l_i = llngBgnSvcPitStp To llngEndSvcPitStp '(dernière ligne traitée +1 ... dernière ligne traitée + 250)
     
     
                         xlsSht.Range("D" + CStr(l_i + 1)).Value = "=xxx|xx!'" + vntPitStpIdn + ",0@""2,6"",1'"
                         xlsSht.Range("E" + CStr(l_i + 1)).Value = "=xxx|xx!'" + vntPitStpIdn + ",0@""1,\""12,0,2\"""",1'"
                         xlsSht.Range("F" + CStr(l_i + 1)).Value = "=xxx|xx!'" + vntPitStpIdn + ",0@""2,1"",1'"
                         xlsSht.Range("G" + CStr(l_i + 1)).Value = "=xxx|xx!'" + vntPitStpIdn + ",0@""1,\""12,0,2\"""",3'"
                      End If
     
                   Next l_i
     
                   llngBgnSvcPitStp = llngEndSvcPitStp + 1
                   llngEndSvcPitStp = llngEndSvcPitStp + 250
     
                   ' verify if all values are ok (toutes les cellules ont été mises à jour)
                   lblnNext = False
                   llngCnt = 0
                   Do
                     Set lvntNAFnd = xlsSht.Cells.Find(What:="#N/A") ' ne peut être utilisé car la valeur de retour peut être #N/A...
     
                     If lvntNAFnd Is Nothing Then
                        lblnNext = True
                     End If
                   Loop Until lblnNext
     
                   ' redo connection to authorize access to data on
                   Set loradtb = Nothing
                   Set loradtb = connect()
     
                   ' test si le nombre de valeur réelle est inférieur 
                   If loradynSvcPitStp.RecordCount <= llngEndSvcPitStp Then
                      ' last line
                      For l_i = llngBgnSvcPitStp To loradynSvcPitStp.RecordCount + 1
     
                            xlsSht.Range("D" + CStr(l_i + 1)).Value = "=xxx|xx!'" + vntPitStpIdn + ",0@""2,6"",1'"
                            xlsSht.Range("E" + CStr(l_i + 1)).Value = "=xxx|xx!'" + vntPitStpIdn + ",0@""1,\""12,0,2\"""",1'"
                            xlsSht.Range("F" + CStr(l_i + 1)).Value = "=xxx|xx!'" + vntPitStpIdn + ",0@""2,1"",1'"
                            xlsSht.Range("G" + CStr(l_i + 1)).Value = "=xxx|xx!'" + vntPitStpIdn + ",0@""1,\""12,0,2\"""",3'"
                         End If
                      Next l_i
     
                      lblnEnd = True
     
                      Exit Do
                   End If
                Loop Until lblnEnd
    pour faire plus clair... je reçois en entrée d'une base Oracle la liste des éléments à chercher (lxrrSvcPitStp). A partir de là, une boucle me permet de remplir les formules dans le fichier Excel créé. Une API gère ensuite la récupération des valeurs depuis un site internet. Sauf que cet accès ne me permet de récupérer que 1000 données maximum par connection. Je dois donc écrire dans mon fichier Excel les 250 premières lignes (avec pour chacune 4 valeurs à récupérer), attendre que toutes les données soient retournées, puis refaire une connexion et recommencer pour les 250 lignes suivantes. Sachant que la limite de 250 est arbitraire pour le moment, car le nombre de valeurs par lignes à récupérer est variable. Mais bon pour tester c'est plus simple....

    le code qui pose problème c'est la partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
                   ' verify if all values are ok (toutes les cellules ont été mises à jour)
                   lblnNext = False
                   llngCnt = 0
                   Do
                     Set lvntNAFnd = xlsSht.Cells.Find(What:="#N/A") ' ne peut être utilisé car la valeur de retour peut être #N/A...
     
                     If lvntNAFnd Is Nothing Then
                        lblnNext = True
                     End If
                   Loop Until lblnNext
    J'espère que c'est assez clair... et désolée pour le code pas très propre... je suis plutôt experte Oracle....

  14. #14
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    la ligne que tu as maquillé la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                         xlsSht.Range("D" + CStr(l_i + 1)).Value = "=xxx|xx!'" + vntPitStpIdn + ",0@""2,6"",1'"
    c'est bien l'insertion d'une formule d'accès DDE dans une de tes cellules ..?

    le xxx c'est bien le nom de l'application mystérieuse avec laquelle tu dialogue..?

    essai de remplacer tes formules par une requête DDE ... soit dans Excel soit directement dans ton code VB6 ( dans le cas ou tu n'as besoin de rien d'autre dans ta feuille excel..)

    voir aide en ligne DDEInitiate ...

  15. #15
    Membre averti
    Inscrit en
    Août 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2007
    Messages : 39
    Par défaut
    alors j'ai pas tout compris.... mais oui, la ligne "maquillée" (secteur bancaire oblige.... on est normalement pas autorisé à donner du code... ) est bien celle qui accède à l'appli, mais je ne peux pas y toucher malheureusement. C'est un code qui dépend vraiment du site, et on ne peut pas toucher aux formules ....

    enfin. les formules fonctionnent bien. Le problème ne vient pas de là. Mon soucis est vraiment de savoir QUAND toutes les données ont été retournées( en gros qu'Excel me dise "toutes les valeurs sont chargées") et ensuite de poursuivre le traitement. Avant on utilisait des aLinks... mais avec la nouvelle version d'Excel, ça fonctionne plus...

  16. #16
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    La gestion des liens DDE via VBA n'est pas optimisée quand il s'agit de grosses quantités de données -
    l'idéal est plutôt de travailler directement en 1er niveau avec les apis (DDEInitialize, DDEConnect) :
    la fonction de callback permet alors de savoir si toutes les données sont initialisées.

    Pour répondre strictement à la question initiale (méthode qui n'est pas la plus propre mais a le mérite d'être la plus simple - la méthode par api n'étant pas évidente),
    il suffit de vérifier que la somme des données (puisqu'elles sont toutes numériques)
    ne retourne pas une erreur #N/A au niveau de la feuille - ce qui indique indirectement que toutes les données ont été délivrées.

  17. #17
    Membre Expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Par défaut
    Citation Envoyé par DarkVader
    il suffit de vérifier que la somme des données (puisqu'elles sont toutes numériques)
    J'ai du mal lire, car je n'avais pas vu qu'il était spécifié que toutes les valeurs étaient numériques.

    J'avoue que ça me parait étrange puisqu'il est dit que N/A peut etre une valeur retournée.

  18. #18
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    Citation Envoyé par OhMonBato
    J'ai du mal lire, car je n'avais pas vu qu'il était spécifié que toutes les valeurs étaient numériques.
    Je suppute - généralement les liens DDE de sites financiers retournent des valeurs de type (date, heure, volume, montant de la dernière transaction,
    de la dernière ou la meilleure offre ou demande etc. seule le libellé, le code isin ou le comstock sont de type alpha numérique
    mais en principe fournis en début de ligne, donc il suffit de faire porter l'opération sur la fin de ligne (les valeurs numériques)

    Citation Envoyé par OhMonBato
    J'avoue que ça me parait étrange puisqu'il est dit que N/A peut etre une valeur retournée.
    De mémoire, quand la formule est écrite, juste avant son initialisation, elle retourne une valeur d'erreur #N/A (valeur non disponible)
    jusqu'au moment ou elle reçoit l'information et s'actualise.

  19. #19
    Membre averti
    Inscrit en
    Août 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2007
    Messages : 39
    Par défaut
    Bonjour tout le monde,

    Effectivement, on recherche des valeurs numériques. Mais il se peut qu'une valeur qu'on attend ne soit pas encore à jour sur le site, et donc la valeur reste #N/A, mais on ne doit pas le considérer comme une erreur, et on doit alors traiter le fichier Excel tel quel, avec les #N/A... Ce qui ne m'aide pas, vu que c'était la seule chose qui m'aurait permis de savoir si la récupération est terminée. Dans ce cas, l'appel au site est fait mais ne retourne pas de valeurs. L'important est que l'appel a été fait. Mon programme doit donc considérer que toutes les valeurs sont remplies quand même...

    C'est peut-être pas trop clair, mais je suis pas très bien réveillée...

  20. #20
    Membre Expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Par défaut
    Je te demandais dans un message précédent s'il n'y avait pas moyen de mttre autre chose que #N/A par défaut avant d'avoir une réponse, comme si si tu as #N/A tu sais au moins qu'il n'y a plus de réponse à attendre.

Discussions similaires

  1. [XL-2007] Envoi par mail de données Excel
    Par Fred4345 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/11/2011, 22h08
  2. Traitement de données Excel avec Java
    Par ham83dje dans le forum Documents
    Réponses: 4
    Dernier message: 23/05/2008, 14h29
  3. Réponses: 1
    Dernier message: 22/11/2007, 08h42
  4. Charger les données Excel avec Forms 9i
    Par Process Linux dans le forum Forms
    Réponses: 8
    Dernier message: 29/03/2005, 14h20
  5. exploiter une base de données excel avec delphi
    Par budylove dans le forum Bases de données
    Réponses: 2
    Dernier message: 01/02/2005, 19h37

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