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 :

Problème avec SetTimer / KillTimer et autres trucs du même genre


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2015
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2015
    Messages : 99
    Par défaut Problème avec SetTimer / KillTimer et autres trucs du même genre
    Bonsoir à tous

    Suite à vos conseils judicieux concernant le problème bloquant que j'exposais ici http://www.developpez.net/forums/d16...tir-d-activex/, j'ai finalement remplacé mes ActiveX par des images de boutons et à la place des MouseMove j'utilise l'API SetTimer et son pendant KillTimer (en gros, j'agrandis la hauteur de la ligne pour afficher les boutons lorsque que je la survole avec la souris et j'affiche les info-bulles qui vont bien quand je passe au dessus de chaque bouton).

    Sauf qu'au lieu d'avoir des ActiveX qui disparaissent, c'est maintenant Excel qui se plante à tour de bras (sans aucun avertissement : circulez, y'a rien à voir !) notamment dès que je passe en pas à pas.
    J'ai bien essayé de faire un KillTimer au début de la procédure appelée par le Timer et de ré-exécuter un SetTimer à la fin, mais ça n'améliore guère les choses... J'en ai légèrement marre pour être franc

    D'où ma première question : est-ce que SetTimer/KillTimer marchent ou est-ce que ça vient de moi / de ma config (Windows 10 64 bits / Office 2013 32 bits) ?

    Second point : pourquoi est-ce que je ne réussis pas à installer un ActiveX ?
    Je m'explique :
    • j'ai trouvé une autre solution de timer (apparemment plus efficace / plus fiable).
    • j'ai installé l'OCX via le petit programme de mimizanzan : ça a marché, sauf que la commande Regsvr32 C:\MesControleActiveX\TimerVBA.ocx me sort un message du style Échec du chargement du module [pour mémoire : je travaille sur un logiciel destiné à être distribué, et donc j'ai intérêt à automatiser l'installation au maximum)
    • malgré tout j'ai réussi à définir une nouvelle référence vers TimerPourVBA ainsi qu'un objet "Dim TimerVab1 as TimerVBA" dans un module VBA (donc TimerVBA est bien reconnu)
    • à l'inverse, je veux peux pas utiliser le nouveau contrôle personnalisé TimerVBA.ocx (j'ai un message "Échec lors de l'enregistrement du contrôle dans le registre" lorsque je souhaite l'enregistrer) dans une feuille Excel (si j'ai bien compris, il faut positionner au moins un de ces contrôles dans la feuille pour utiliser le timer)


    Pourriez-vous m'aider, s'il vous plait ? C'est vraiment très important (et là je commence à craquer )

    Un grand merci
    Gilbert

    PS : pour être franc, je n'ai pas (encore) obtenu de réponse sur le site où j'ai trouvé la solution qui coince, d'où mon message en parallèle ici

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    TimerRd.Ocx
    Fichiers attachés Fichiers attachés
    Dernière modification par Invité ; 23/11/2016 à 22h39.

  3. #3
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2015
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2015
    Messages : 99
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    Bonsoir,
    TimerRd.Ocx
    Bonsoir

    Merci !
    J'ai tout téléchargé et décompressé et j'ai exécuté successivement les 3 setup.exe (1 à la racine et 2 dans le dossier Support), mais les 3 conduisent à des messages d'erreur...
    Nom : Pb avec SETUP.EXE.png
Affichages : 1016
Taille : 429,8 Ko
    Pouvez-vous me mettre sur une piste s'il vous plait ?

    Merci d'avance (un grand !)
    Gilbert

  4. #4
    Invité
    Invité(e)
    Par défaut
    écoute reprends le lien car je n'y comprends rien!

    fais un click droit sur setup en tant qu'admin

    je viens de vérifié pour moi c'est ok, j'ai recompilé et refait un setup.

    https://mon-partage.fr/f/d3ub8eig/

  5. #5
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2015
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2015
    Messages : 99
    Par défaut
    Re-bonsoir et re-merci

    Je suis désolé mais j'ai à nouveau un problème d'installation, même si c'est allé beaucoup plus loin:
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     %% PLEASE DO NOT MODIFY OR DELETE THIS FILE! %% 
     %% This file contains information about the installation of an application. %% 
     %% It will be used to automatically remove all application components from your computer if you choose to do so. %% 
     
     
    NOTE: Beginning of the bootstrapper section
     
    CONFIG: Title: "TestTimerRd"
     
    ACTION: RegKey: "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion", "SharedDLLs"
     
    ACTION: SystemFile: "C:\Windows\System32\VB6STKIT.DLL"
    (File currently on disk was already up to date)
     
    ACTION: SystemFile: "C:\Windows\System32\COMCAT.DLL"
    (File currently on disk was already up to date)
     
    ACTION: SystemFile: "C:\Windows\System32\stdole2.tlb"
    (File currently on disk was already up to date)
     
    ACTION: SystemFile: "C:\Windows\System32\asycfilt.dll"
    (File currently on disk was already up to date)
     
    ACTION: SystemFile: "C:\Windows\System32\olepro32.dll"
    (File currently on disk was already up to date)
     
    ACTION: SystemFile: "C:\Windows\System32\oleaut32.dll"
    (File currently on disk was already up to date)
     
    ACTION: SystemFile: "C:\Windows\System32\msvbvm60.dll"
    (File currently on disk was already up to date)
     
    ACTION: DllSelfRegister: "C:\WINDOWS\SYSTEM32\COMCAT.DLL"
     
    ACTION: TLBRegister: "C:\WINDOWS\SYSTEM32\stdole2.tlb"
     
    ACTION: DllSelfRegister: "C:\WINDOWS\SYSTEM32\olepro32.dll"
     
    ACTION: DllSelfRegister: "C:\WINDOWS\SYSTEM32\oleaut32.dll"
     
    ACTION: DllSelfRegister: "C:\WINDOWS\SYSTEM32\msvbvm60.dll"
     
    NOTE: End of the bootstrapper section
     
    NOTE: Now spawning the main Setup program 'Setup1.exe'....
     
    ACTION: CreateDir: "C:\Program Files (x86)\Project1"
     
    *** ERROR: Type mismatch
    *** ERROR: An unexpected setup error has occurred!
    *** ERROR: (User Responded with 'Retry')
     
    *** ERROR: Type mismatch
    *** ERROR: An unexpected setup error has occurred!
    *** ERROR: (User Responded with 'Retry')
     
    *** ERROR: Type mismatch
    *** ERROR: An unexpected setup error has occurred!
    *** ERROR: (User Responded with 'Cancel')
     
    *** WARNING: Setup is not yet complete.
    *** WARNING: If you quit now, this product will not be correctly installed.
    *** WARNING: Quit the setup of this product?
    *** WARNING: (User Responded with 'Yes')
     
    *** WARNING: TestTimerRd Setup was interrupted before your new software was fully installed.
    *** WARNING: You can run TestTimerRd Setup in its entirety at a later time to complete the installation.
    *** WARNING: (User Responded with 'OK')
    J'ai bien entendu essayé de créer le dossier C:\Program Files (x86)\Project1" à la main, mais le résultat est le même.

    Vraiment désolé de t'ennuyer avec ces problèmes...
    Gilbert

  6. #6
    Invité
    Invité(e)
    Par défaut
    Dans l'onglet développeur, click sur l'icône de l'équerre, supprime le contrôle,puis réinsères en sélectionnant l'icone avec des outils!

    Au pire tu repars d'un classeur vierge
    Dernière modification par Invité ; 23/11/2016 à 23h59.

  7. #7
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2015
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2015
    Messages : 99
    Par défaut
    Là je ne pige plus.
    Je n'ai pas réussi à mettre de contrôle sur ma feuille puisque l'installation s'est plantée.
    Je suppose que j'ai loupé une étape dans ton explication, mais je ne sais pas où

  8. #8
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Plutôt que de partir dans des "usines à gaz", surtout si tu dois distribuer le résultat, sache qu'il est possible d'afficher des infos-bulles sur les contrôles de formulaire.

    Après tout dépend de ce que tu souhaites afficher, quand etc...

    Regarde donc ici : http://boisgontierjacques.free.fr/pa...ges.htm#Bulles
    Il y a un exemple téléchargeable ICI...

  9. #9
    Invité
    Invité(e)
    Par défaut
    Nom : TesRd.gif
Affichages : 1586
Taille : 1,62 Mo

  10. #10
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2015
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2015
    Messages : 99
    Par défaut
    Citation Envoyé par pijaku Voir le message
    Bonjour,

    Plutôt que de partir dans des "usines à gaz", surtout si tu dois distribuer le résultat, sache qu'il est possible d'afficher des infos-bulles sur les contrôles de formulaire.

    Après tout dépend de ce que tu souhaites afficher, quand etc...

    Regarde donc ici : http://boisgontierjacques.free.fr/pa...ges.htm#Bulles
    Il y a un exemple téléchargeable ICI...
    Bonjour

    Merci Franck !

    Excellente suggestion pour les info-bulles : ça va me simplifier la vie (et mon code...)

    Mais j'ai quand même besoin de faire marcher un timer pour pouvoir faire apparaître des boutons dans la cellule que je survole

    Nom : écrans avec info-bulles et boutons.png
Affichages : 1003
Taille : 751,3 Ko

  11. #11
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2015
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2015
    Messages : 99
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    Nom : TesRd.gif
Affichages : 1586
Taille : 1,62 Mo
    Bonjour

    C'est vrai qu'une vidéo vaut mieux qu'un long discours, mais en fait comme je te le disais je reste bloqué sur le setup avec le message d'erreur (Cf. ligne 47 du log) :

    Nom : Erreur dans le log.JPG
Affichages : 834
Taille : 48,1 Ko

    Et pourtant ton timer me serait vraiment (vraiment vraiment...) utile.

    Peux-tu encore m'aider, s'il te plait ?

    Un grand merci
    Gilbert

  12. #12
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Mais j'ai quand même besoin de faire marcher un timer pour pouvoir faire apparaître des boutons dans la cellule que je survole
    Il serait tout de même plus simple, plus maniable et plus léger en ressources de faire apparaître des boutons dans la cellule active (cliquée).

  13. #13
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2015
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2015
    Messages : 99
    Par défaut
    Citation Envoyé par pijaku Voir le message
    Il serait tout de même plus simple, plus maniable et plus léger en ressources de faire apparaître des boutons dans la cellule active (cliquée).
    Oui, c'est sûr et d'ailleurs j'avais commencé par faire comme ça...
    Mais selon moi c'est moins convivial, moins "fini"... [depuis que j'ai découvert que je pouvais ça au simple survol de la souris, j'en suis tombé amoureux ]

    Et puisque je souhaite livrer une application qui plaise à tous (ambitieux et horriblement prétentieux, je sais , alors je dirai "qui plaise au public le plus large possible"), j'ai prévu dans mon écran de paramétrage de l'application que l'utilisateur puisse choisir le fonctionnement qui lui convient le mieux, à savoir :
    • avec des boutons dans toutes les cellules sur lesquelles il peut interagir, les boutons de la ligne étant affichés tous à la fois
    • avec des boutons dans toutes les cellules sur lesquelles il peut interagir, avec seulement les boutons de la cellule "active" affichés
    • avec uniquement des boutons dans la cellule la plus compliquée (colonne "Règle d'alimentation"), le reste des autres cellules étant saisies/modifiées/supprimées de façon traditionnelle

    Pour mémoire, l'écran de paramétrage dont je parle concerne environ 140 paramètres : si certains concernent la saisie et l'affichage comme celui dont je viens de parler, la plupart concernent la façon dont les documents doivent être analysés et certains dépendent même des "projets" (exemple : concernant les documents reçus de tel client ou tel fournisseur, si on a besoin de repérer du texte par sa position dans la feuille, alors le repérage se fait 1) par rapport au bord de la feuille ou 2) par rapport au "bord apparent" du texte dans la feuille [je veux pouvoir ainsi traiter des documents plus petits que du A4 scannés en étant positionnés un peu n'importe où sur la vitre du photocopieur).

    À tort ou à raison, j'ai placé la barre haut (trop haut ? assez haut en tout cas pour expliquer que je sois dessus depuis plus de 20 mois à raison de 15 à 17 h / j, 7 j / 7 et que des fois je ) : sauf erreur, le logiciel que je développe n'a pas d'équivalent sur le marché et pour éviter qu'il apparaisse compliqué j'essaye de le rendre le plus sexy et convivial possible.

    En tout cas, merci de ton implication !

  14. #14
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Mais selon moi c'est moins convivial, moins "fini"...
    Certes, mais il ne faut pas oublier que, si tu le distribues, tu auras des "clients" chez qui cela ne fonctionnera pas.
    Clients qui vont connaitre les mêmes problèmes d'installation que tu connais actuellement avec des ocx ou autres contrôles externes...

    Pour ces gens, ton application que tu voulait merveilleuse, ne sera qu'une grosse daube.
    Et là, ça risque de devenir gênant pour toi.

    Mais bon, tu le conçois et en as conscience, donc c'est ton choix.

    En matière de fonctionnement, pourquoi ne pas proposer :
    Lors d'un click dans toutes les cellules sur lesquelles il peut interagir, afficher un userForm avec seulement les boutons de la cellule "active" affichés

  15. #15
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2015
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2015
    Messages : 99
    Par défaut
    Citation Envoyé par pijaku Voir le message
    Il serait tout de même plus simple, plus maniable et plus léger en ressources de faire apparaître des boutons dans la cellule active (cliquée).
    Bon, pour en revenir à mon problème initial, c'est vrai que ta façon détournée pour gérer les info-bulles est super ! (à prendre au 1er degré)
    Sauf que bien sûr j'ai ENCORE un problème : je bosse sur une tablette Surface (définition : 1920 x 1080) avec un écran supplémentaire (DELL 27" en 2560 x 1440). Et là bien sur Excel se vautre totalement dans le positionnement des info-bulles (l'info-bulle apparaît à quelques cm de l'endroit attendu). J'ai le même problème avec les listes déroulantes des ListBoxes : elles apparaissent ailleurs que là où on les attend et dans une taille de police qui n'a rien à voir avec la taille prévue.
    Pire encore (car c'est également vrai en mono-écran) : je masque systématiquement toutes les lignes et les colonnes "hors écran", mais des fois ça bloque quand une info-bulle "déborde" de mon écran.

    Du coup, je ne sais pas ce que je vais faire : gérer les info-bulles selon ton conseil ou en rester à ma gestion manuelle plus compliquée : mais pour ça il faut que je réussisse déclencher une procédure sur timer (par exemple toutes les 50 ms) et je n'ai pas réussi à installer la solution pourtant alléchante de dysorthographie.

    Au secours

    Citation Envoyé par pijaku Voir le message
    En matière de fonctionnement, pourquoi ne pas proposer :
    Lors d'un click dans toutes les cellules sur lesquelles il peut interagir, afficher un userForm avec seulement les boutons de la cellule "active" affichés
    ...parce que de même que mes info-bulles ou les listes des listboxes se positionnent un peu n'importe où, je n'ai pas réussi à positionner correctement le userform avec fonds totalement transparent qui contenait mes boutons... [je fais allusion au problème que j'ai évoqué d'avoir 2 écrans de définition différente sur le même poste de travail)

  16. #16
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2015
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2015
    Messages : 99
    Par défaut
    J'ai peut-être trouvé une solution, mais qui me parait tellement simple (aucune installation de timer, notamment !) que je m'en veux de ne pas y avoir pensé avant

    En plus j'ai un gros doute : si personne ne m'en a parlé, j'ai peur que ce soit parce qu'elle cache, elle aussi, un gros loupé à venir

    Donc, au lieu d'utiliser des SetTimer / KillTimer qui plantent Excel à la première occasion ou les 2 autres timers que je ne sais pas / peux pas installer (c'est dur de se rendre compte qu'on est bête...), je suis parti sur un formulaire transparent non modal lancé en arrière plan et qui se contente de faire tourner un "sleep" en permanance (à chaque réveil, j'exécute la même procédure que celle que j'avais prévue avec le SetTimer / KillTimer).
    Pour info, un sleep réglé à 50 ms qui exécute à chaque réveil un "debug.print Timer(): DoEvents" consomme moins de 1% de CPU.
    Avec un sleep de 20 ms, on arrive à 3 %.
    Acceptable, non ?

    Qu'en pensez-vous, s'il vous plait ?



    Bon, oubliez mon message précédent !

    Même avec un formulaire "non modal" et même si le "sleep" ne consomme quasiment aucune ressource, la saisie est extrêmement ralentie.
    Très mauvaise idée que j'ai eue là donc...

  17. #17
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    J'aurais peut-être une idée de solution pour toi...
    Mais...
    Que souhaites tu zoomer?
    La cellule qui contient les infos à modifier ou systématiquement la ligne complète?
    Décris nous au maximum ce que tu souhaites faire, réaliser et proposer à l'utilisateur, sinon, ça va être dur dur de t'aider.

  18. #18
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2015
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2015
    Messages : 99
    Par défaut
    Merci Franck de vouloir m'aider

    Je vais d'abord essayer de replacer le besoin dans son contexte... [j'ai encore du mal à faire simple, efficace et court : désolé ]
    En fait, j'essaye de mettre au point un logiciel permettant d'extraire automatiquement des informations de documents quelconques, que ce soit des factures, des bons d'entrée ou de sortie, des bons de transport ou plus généralement de documents qui ont une forme "connue et un tant soit peu standardisée".
    Au départ, il s'agissait d'extraire les informations contenues dans les "fiches de suivi d'incident" d'une très grande société française, leader sur le marché des nacelles d'hélicoptères.
    Un de mes neveux, ingénieur d'affaires dans le domaine du service voudrait que sa boîte l'utilise (dès qu'il sera prêt !) pour aller chercher directement dans les CV (au format .pdf) de leurs collaborateurs les compétences en adéquation avec les besoins des appels d'offres qu'ils traitent au quotidien.

    Je traite des documents dont la forme n'est pas nécessairement figée :
    • les éventuels tableaux peuvent contenir un nombre quelconque de lignes
    • ils peuvent "tenir" sur une ou plusieurs pages (je détecte automatiquement les "tableaux-suites" selon des critères sélectionnés par l'utilisateur)
    • l'ordre des colonnes peut changer entre 2 documents
    • si l'utilisateur base sa recherche sur un ou plusieurs mots (par exemple le titre d'une colonne ou encore un début de paragraphe) il peut prévoir plusieurs orthographes (par exemple QUANTITE, QUANTITÉ, Quantity, Qté). Il peut aussi laisser le système faire des corrections typographiques simples (en ignorant la ponctuation, les tirets, etc.) ou encore laisser le système faire une recherche pseudo phonétique (si vraiment les documents sont "pourris")
    • etc.

    Pour le moment je traite des documents Word, Excel, PowerPoint mais aussi des PDF.
    Je convertis les PowerPoint, PDF et autres fichiers image en fichiers .rtf via un logiciel du marché [OmniPage, pour ne pas le nommer].
    Par la suite, je m'attèlerai à traiter des pages HTML pour aller directement piocher des infos sur l'Intranet des entreprises.

    J'ai baptisé ce logiciel SÆCI RS, Système d'Aide à l'Extraction et à la Classification de l'Information (l'acronyme marche aussi en Anglais ), et RS pour Recherche Structurée, par opposition au SÆCI RL, RL pour Recherche Libre, solution infiniment plus sophistiquée que je voudrais développer par la suite et qui serait basée sur les technologies de l'Intelligence Artificielle et de l'Informatique Linguistique.

    L'utilisateur commence par :
    • nommer et décrire ses "projets", par exemple avec le nom de ses clients ou de ses fournisseurs
    • définir le nom et la localisation des fichiers "sources" à traiter projet par projet (par exemple, les factures reçues de son fournisseur XX, ou encore les bons d'entreposage de son client YY)
    • définir le ficher "cible" qu'il souhaite alimenter (fichier Excel)

    Il doit ensuite paramétrer le fonctionnement du logiciel, qu'il s'agisse :
    • des paramètres communs à tous les projets (gestion des couleurs dans la cellule "Règle d'alimentation", par exemple)
    • des paramètres ajustables projet par projet (règles de gestion des fichiers d'entrée en doublon par exemple, ou encore niveau de tolérance aux fautes d'orthographe dans la recherche de zones de textes basées sur le contenu textuel)
    C'est là où je parlais de 140 et quelques paramètres différents ajustables à la demande (une partie n'est pas accessible à l'utilisateur et m'est réservée).

    L'étape suivante consiste à "apprendre" au logiciel comment extraire les donnée qui intéressent l'utilisateur : c'est cet écran d'apprentissage dont j'ai déjà présenté des copies ici.
    • Le logiciel alimente les 2 colonnes de gauche à partir du fichier "cible" ; par défaut le logiciel indique que chacun des "champs cibles" est requis, mais l'utilisateur peut les noter "Facultatif", voire non alimenté (cette notion va permettre de calculer le taux de succès effectif des extractions ultérieures).
      Au besoin, une fonctionnalité est prévue pour identifier des "clés de rapprochement" permettant d'alimenter un même document cible à partir de 2 projets traitant des documents de nature différente (par exemple la fiche Word d'identification d'un prévenu et les feuilles Excel décrivant ses différents séjours en prison).
    • L'utilisateur choisit un "document de test" à partir de l'échantillon qui lui est proposé. Il peut le changer à tout moment.
    • Pour chacun des champs cibles facultatif ou requis, l'utilisateur doit définir la "règle d'alimentation du champ" via un formulaire (malheureusement complexe : 7 sous-onglets, plus de 300 contrôles affichés et positionnés dynamiquement, près de 16500 lignes de code) : je n'ai pas vraiment compté, mais l'utilisateur dispose à ce moment là d'environ 250 à 300 façons d'identifier et / ou de localiser les informations qui l'intéressent ; au besoin il peut ajouter ses propres critères pour peu qu'il connaisse le VBA (il suffit qu'il ajoute une fonction conforme au modèle dans le classeur complémentaire "fonctions externes").
      Au fur et à mesure que l'utilisateur définit ou modifie les règles, SÆCI en montre le résultat effectif à partir du document de test sélectionné : le cas échéant, SÆCI indique pourquoi la règle n'a extrait aucune donnée avec le document de test sélectionné qu'il s'agisse d'une erreur technique ou fonctionnelle (c'est probablement là dessus que j'en ai le plus bavé dans tout ce fichu projet)
      S'il le souhaite, l'utilisateur peut définir plusieurs règles d'alimentation pour un même champ cible (les valeurs trouvées se complètent) ou définir des règles de "substitution" (appliquer telle règle si la précédente est en échec)
    • le cas échéant, peut définir une valeur par défaut pour le champ cible en cas d'absence de règle d'alimentation ; elle peut aussi servir de valeur à remonter si la règle d'alimentation du champ cible est en échec.
    • si la règle d'alimentation du champ cible comporte un ou plusieurs paramètres "textuels" (par exemple le titre du tableau, le titre de la colonne et l'intitulé de la ligne dans ledit tableau), l'utilisateur peut définir une ou plusieurs "autres orthographes" pour l'un ou l'autre des paramètres textuels en question
    • la colonne <Transformation à appliquer> permet de transformer la ou les données extraites avant de la ou les recopier dans le fichier cible : il suffit que l'utilisateur (ou quelqu'un connaissant VBA) ajoute une fonction dans le classeur Excel ad hoc pour que SÆCI l'utilise. Il peut s'agir, par exemple, d'une fonction de transformation d'unité (convertir des pieds en mètres ou d'extraction d'une sous-partie du texte mais on peut très bien s'imaginer en faire une fonction d'alerte : envoyer un mail au transporteur si la longueur du colis est trop grande)
    Quand l'utilisateur est satisfait du résultat, il doit valider le schéma d'alimentation pour pouvoir lancer les extractions à proprement parler.

    Le "Tableau de bord des extractions" permet de lancer les extractions sur les documents en attente.
    Il permet également de consulter le taux de succès de chacune des extractions réalisées (= nombre de champs requis effectivement alimentés / nombre de champs requis définis) et d'analyser le temps d'exécution de l'extraction, étape par étape.

    S'il le souhaite, l'utilisateur peut visualiser les données effectivement extraites de chacun des documents traités (chaque élément extrait est surligné dans une couleur correspondant à chacun des champs cibles) et s'il détecte une erreur, SÆCI lui donne la possibilité de "revenir en arrière" du nombre d'extractions souhaité afin de lui permettre de corriger / d'améliorer le schéma d'alimentation du projet concerné. Il n'a plus ensuite qu'à relancer les extractions précédemment annulées.


    J'en reviens (enfin) à mon problème du départ : je veux guider l'utilisateur dans sa saisie et j'interdis donc autant que possible la saisie directe dans les cellules, d'où l'utilisation des boutons. Je n'affiche dans leur couleur d'origine que les boutons "actifs (les boutons non actifs sont affichés grisés).
    L'utilisateur a le choix concernant l'affichage des lignes (onglet paramétrage) : la hauteur des lignes peut être fixe ou encore ajustée à la hauteur de la cellule "Résultat" ou bien à celle de la cellule "Règle d'alimentation" (pas des plus faciles à gérer avec une colonne Résultat" fusionnée si plusieurs règles alimentent le même champ cible).
    Pour afficher les boutons, j'ai besoin de commencer par leur faire de la place :
    • en augmentant la hauteur de la ligne
    • en changeant l'alignement vertical du texte (je passe de centré verticalement à aligné en haut)
    Quand je change de ligne, je dois bien sûr faire l'opération inverse.
    Pour éviter de "noyer" l'utilisateur sous les boutons je n'affiche que ceux de la cellule sous la souris [je laisse malgré tout à l'utilisateur la possibilité de les afficher tous]

    Comme j'ai déjà dû le dire, je ne crois pas que SÆCI ait de concurrents sur le marché même si je suis persuadé qu'il répond à un besoin avéré.

    Je ne sais pas si c'est plus clair, ni même si tu as eu le courage de lire jusqu'au bout [j'espère qu'il n'y a pas trop de fautes], mais en tout cas merci encore une fois pour ton aide.

    Gilbert

  19. #19
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 242
    Par défaut
    hello,
    Citation Envoyé par CognitiKom Voir le message
    mais pour ça il faut que je réussisse déclencher une procédure sur timer (par exemple toutes les 50 ms)
    Dans mon assemblage dotnet JpDotnet j'ai rajouté une classe (JpTimer) qui gère un Timer. J'ai réussi à interfacer l'événement du timer avec l'extérieur (COM event) et donc l'événement du Timer est disponible dans VBA.
    Nom : JpTimer-Classe.png
Affichages : 1003
Taille : 27,3 Ko

    Voici le code de test de ce timer en VBA mis dans le code d'une feuille :
    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
    Private WithEvents MonTimer As JpDotnet.JpTimer
    Private Compteur As Long
    Private Sub TestTimer()
    Compteur = 0
    Set MonTimer = New JpDotnet.JpTimer
    MonTimer.initTimer 50
    End Sub
    Private Sub MonTimer_OnTimeElapsed(ByVal message As String)
    On Error Resume Next
    Compteur = Compteur + 1
    [B1] = Compteur
    End Sub
    Public Sub StopTimer()
    MonTimer.StopTimer
    End Sub
    Public Sub RestartTimer()
    MonTimer.RestartTimer
    End Sub
    Le test consiste à initialiser l'intervalle du timer à 50 ms et à chaque événement du timer on incrémente un compteur qu'on visualise dans la cellule B1 de la feuille.
    Voici ce que cela donne :

    Nom : JpTimer.gif
Affichages : 945
Taille : 129,7 Ko

    Comme on peut le constater dans la capture video, si je reste appuyé sur une cellule, la cellule B1 ne se rafraîchit plus ce qui me paraît normal mais le compteur continue à s'incrémenter. Par contre si on écrit dans une cellule, le compteur ne s'incrémente plus ce qui veut dire que la macro d'événement ne tourne plus.
    J'ai mis un On Error Resume Next dans la macro d'événement car sinon j'ai ce message d'erreur si je clique dans une cellule pendant le test :

    Nom : Erreur JpTimer.png
Affichages : 939
Taille : 4,4 Ko

    Cela ne semble pas trop grave car Excel n'est pas planté alors (mais il plante quand même quand on le ferme). Le temps CPU utilisé par Excel est proche de 0% pendant le test.

    Ami calmant, J.P

  20. #20
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2015
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2015
    Messages : 99
    Par défaut
    Bonjour M'sieur !

    Merci d'avoir pris le temps de me répondre !

    C'est tout à fait ce dont j'aurais besoin

    Cela étant, qu'entends-tu par "mais il plante quand même quand on le ferme" ? Même si on désactive le timer dans le Workbook_BeforeClose, par exemple ?

    Gilbert

Discussions similaires

  1. Réponses: 20
    Dernier message: 12/01/2011, 17h32
  2. Réponses: 14
    Dernier message: 16/07/2007, 23h55
  3. Problème avec malloc et autre
    Par ego dans le forum C
    Réponses: 5
    Dernier message: 02/05/2007, 18h29
  4. Réponses: 8
    Dernier message: 11/10/2006, 17h28
  5. Réponses: 2
    Dernier message: 10/07/2006, 11h08

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