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. #21
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    pour l'instant mon assemblage est expérimental et je ne préfère pas trop le diffuser dans la nature avant que je ne maîtrise entièrement le sujet. Par contre pour ce qui est du contrôle activex de dysorthographie pour l'installer sans passer par le setup tu peux faire comme cela :
    1 - du fichier zip tu extrais le fichier TimerVBA.ocx et tu le mets dans C:\Windows\SysWOW64 , tu ouvres une invite de commande en étant administrateur (exécuter en tant qu'administrateur), tu vas dans le répertoire C:\Windows\SysWOW64 et tu tapes regsvr32 TimerVBA.ocx. Et voilà normalement ton activex "s'enregistre". Si tu veux par le suite le désinstaller la commande est regsvr32 /u TimerVBA.ocx toujours au même endroit.

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  2. #22
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 814
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    10
    Par défaut
    Bonjour tout le monde,

    Ma "solution" fait beaucoup moins "pro" que toutes celles proposées, et au vu de ton exposé de la situation (que j'ai lu entièrement... Si si!), je comprends que tu attendes une solution pro.
    En fait, elle n'a pour seul avantage que d'utiliser uniquement des objets natifs de VBA Excel.

    Je la proposes donc ici, juste pour l'exposer, les solutions autres avec Timer restant résolument plus "professionnelles".

    Pour moi, il te suffit "d'englober" la plage apparente de cellules de ta feuille par un objet acceptant le MouseMove.
    Pour cela, je te propose de "recouvrir" les cellules de ta feuille par un UserForm transparent, sans bordures ni barre de fenêtre, en affichage non-modal pour laisser l'accès :
    > aux onglets de ton classeur,
    > aux "ascenseurs" horizontal et vertical de ta feuille,
    > aux différents menus d'excel (ruban)

    La principale difficulté réside dans le calcul de la hauteur du "ruban" d'excel selon les versions (2003 vs 2007).
    Je crois savoir que des codes existent déjà pour faire cela.
    Pour la transparence et la suppression des bordures, l'appel à 2-3 API's devrait suffire.

    Pour créer la fonction de calcul de l'emplacement et taille exacts de l'Userform transparent, il faut penser à un éventuel redimensionnement du classeur.
    Pour cela, on peut travailler avec un événement de l'application : window_Resize.
    Mais il convient d'y penser de suite, avant de réaliser la fonction de dimensionnement de l'userform...

    Ensuite, il suffit de "référencer" (prendre en compte les propriétés Left, Top, With et Height) les cellules devant interagir lors du survol, pour lancer l'affichage d'un second userform (sans bordures ni barre de fenêtre) non transparent, en mode modal.
    Ce second Userform, contenant un textbox ou tout autre contrôle, devra "agir" comme une cellule du classeur.
    L'avantage ici c'est que tu peux y mettre ce que tu souhaites.

    Je pourrais réaliser un exemple de ce procédé sur ta simple demande, mais il faudra attendre un peu, beaucoup de taf en ce moment...

    Sur ce, bonne continuation à tous.
    A++
    Cordialement,
    Franck

  3. #23
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    un léger problème de compatibilité

    j'avais oublié d’installer le service pack6 pour vb6

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

    je viens de l'installer sur windows 10

  4. #24
    Nouveau membre du Club
    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
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    hello,
    pour l'instant mon assemblage est expérimental et je ne préfère pas trop le diffuser dans la nature avant que je ne maîtrise entièrement le sujet
    Ami calmant, J.P
    Bonsoir J.P
    Je comprends très bien et je trouve ça très respectable de ta part

    Citation Envoyé par jurassic pork Voir le message
    hello,
    Par contre pour ce qui est du contrôle activex de dysorthographie pour l'installer sans passer par le setup tu peux faire comme cela :
    1 - du fichier zip tu extrais le fichier TimerVBA.ocx et tu le mets dans C:\Windows\SysWOW64 , tu ouvres une invite de commande en étant administrateur (exécuter en tant qu'administrateur), tu vas dans le répertoire C:\Windows\SysWOW64 et tu tapes regsvr32 TimerVBA.ocx. Et voilà normalement ton activex "s'enregistre". Si tu veux par le suite le désinstaller la commande est regsvr32 /u TimerVBA.ocx toujours au même endroit.

    Ami calmant, J.P
    Un grand merci : j'aurais dû trouver ça moi-même (j'ai comme excuse que je commence un peu à être crevé et que je perds le moral...)

    Cela étant, dysorthographie vient de me répondre et a corrigé le problème d'installation.

    Salutations cordiales
    Gilbert

  5. #25
    Nouveau membre du Club
    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
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    Bonjour,
    un léger problème de compatibilité

    j'avais oublié d’installer le service pack6 pour vb6

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

    je viens de l'installer sur windows 10
    Merci à toi Ô mon Bienfaiteur [ou BienFêteur, mais je ne connais pas assez pour savoir si tu profites bien de la vie ]

    Je vais essayer ta solution de ce pas...

    Gilbert

    PS : avec SetTimer / KillTimer (que j'ai conservé faute de mieux), je suis obligé de "figer" l'apparence du curseur de la souris, sinon il change en permanence mais du coup je me retrouve en permanence avec une flèche, y compris au dessus des boutons où j'aimerais bien avec la main doigt levé.

    ADDITIF : je viens de faire des premiers tests, et ta solution me semble super :
    • facile à mettre en place
    • "transparente" : même avec une temporisation à 20 ms, la saisie n'est pas ralentie et surtout la réponse des boutons reste instantannée (pas le cas avec SetTimer)
    • facilement utilisable puisque l'appel à la fonction déclenchée par le timer est automatiquement suspendue dès qu'on clique sur un bouton (ActiveX) ou même simplement une image ressemblant à un bouton

    Cela étant : s'agissant d'un ActiveX, j'espère qu'il ne va pas disparaître spontanément, lui-aussi

    Donc, à nouveau merci !

    Gilbert

  6. #26
    Nouveau membre du Club
    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
    Points : 30
    Points
    30
    Par défaut
    Bonsoir Pijaku !

    Citation Envoyé par pijaku Voir le message

    au vu de ton exposé de la situation (que j'ai lu entièrement... Si si!)
    Ouah ! Merci
    Je pense qu'il y a un marché pour ce type d'outil, d'autant plus que, sauf erreur, il n'a pas d'équivalent sur le marché.
    Mon seul regret est d'avoir persévéré avec Excel, choix plus ou moins imposé par le client du départ (celui des nacelles d'hélico...) qui finalement est totalement parti aux oubliettes.
    Il faudra que je le récrive totalement un jour, en choisissant cette fois le bon outil. En attendant, pour éviter/minimiser le piratage, je me suis développé un petit outil pour l'obfusquer au mieux que j'ai pu.

    Citation Envoyé par pijaku Voir le message
    [...] je comprends que tu attendes une solution pro.
    Oui, parce que quand c'est pro c'est net [jeu de mots idiot, mais que j'aime bien ]

    Citation Envoyé par pijaku Voir le message
    En fait, elle n'a pour seul avantage que d'utiliser uniquement des objets natifs de VBA Excel.
    Avantage indéniable, je te l'accorde

    Citation Envoyé par pijaku Voir le message
    Pour moi, il te suffit "d'englober" la plage apparente de cellules de ta feuille par un objet acceptant le MouseMove.
    Pour cela, je te propose de "recouvrir" les cellules de ta feuille par un UserForm transparent, sans bordures ni barre de fenêtre, en affichage non-modal pour laisser l'accès :
    > aux onglets de ton classeur,
    > aux "ascenseurs" horizontal et vertical de ta feuille,
    > aux différents menus d'excel (ruban)
    La principale difficulté réside dans le calcul de la hauteur du "ruban" d'excel selon les versions (2003 vs 2007).
    Je crois savoir que des codes existent déjà pour faire cela.
    Au début, j'avais fait la même chose avec un contrôle ActiveX (une image transparente) qui recouvrait partiellement l'écran, mais, comme je l'ai expliqué, depuis peu les ActiveX disparaissent tout seuls.
    Pour info, les copies d'écran que tu as vues sont "full-screen" : j'ai complètement fait disparaître les barres de menu, le ruban, les n° de lignes et de colonne, les onglets, etc., donc ça élimine certaines difficultés avec la solution que tu préconises.

    Citation Envoyé par pijaku Voir le message
    Pour la transparence et la suppression des bordures, l'appel à 2-3 API's devrait suffire.
    Ça je sais comment faire (grâce à vous ici).

    Citation Envoyé par pijaku Voir le message
    Pour créer la fonction de calcul de l'emplacement et taille exacts de l'Userform transparent, il faut penser à un éventuel redimensionnement du classeur.
    C'est là où je coince : avec ma config à 2 écrans de définition différente, Excel se plante (pas tout le temps) quand il s'agit de calculer heu! je sais plus trop !? le nombre de pixels par points , car le .left et le .top ne sont pas dans la même unité selon que tu es dans un UserForm ou dans une feuille Excel.

    Citation Envoyé par pijaku Voir le message
    Je pourrais réaliser un exemple de ce procédé sur ta simple demande, mais il faudra attendre un peu, beaucoup de taf en ce moment...
    C'est archi gentil et je reviendrai vers toi à ce sujet si je ne m'en sors pas avec mes timer (comme tu l'as peut-être vu, J.P et dysorthographie m'ont donné un nouveau coup de pouce).

    Gilbert

  7. #27
    Membre chevronné
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 036
    Points : 1 917
    Points
    1 917
    Billets dans le blog
    5
    Par défaut
    Salut,
    à lire le topic, j'ai l'impression que tout le monde fait de son mieux pour sortir la grosse artillerie pour bousiller un moustique.
    Ousmane


    Quand on tombe dans l'eau, la pluie ne fait plus peur.

  8. #28
    Nouveau membre du Club
    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
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par NVCfrm Voir le message
    Salut,
    à lire le topic, j'ai l'impression que tout le monde fait de son mieux pour sortir la grosse artillerie pour bousiller un moustique.
    Oui, mais t'as vu la taille du bestiau ?

    Nom : moustique.JPG
Affichages : 387
Taille : 46,8 Ko

  9. #29
    Membre chevronné
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 036
    Points : 1 917
    Points
    1 917
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par CognitiKom Voir le message
    Oui, mais t'as vu la taille du bestiau ?
    Vu la taille de la bête, sur le support, c'est un tir à bout portant. Ce serait exprès si on le ratait avec n'importe quoi.
    Vu que le support peine à porter la chose, vaut mieux changer le suppôt.
    Ousmane


    Quand on tombe dans l'eau, la pluie ne fait plus peur.

  10. #30
    Nouveau membre du Club
    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
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par NVCfrm Voir le message
    Vu que le support peine à porter la chose, vaut mieux changer le suppôt.
    Voui, sûrement !
    Mais quand on tient au support (comme moi à mon projet), on appelle au secours toutes les bonnes âmes charitables du coin pour tenter de le préserver (comme j'ai fait ici)

    En fait, tu es jaloux que personne jusqu'à maintenant n'ait chercher à t'aider autant que je l'ai été.
    Je t'ai percé à jour





    Je BLAGUE bien sûr, et j'en profite encore une fois pour dire un grand merci collectif.

  11. #31
    Membre chevronné
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 036
    Points : 1 917
    Points
    1 917
    Billets dans le blog
    5
    Par défaut
    Bouuuuuuuh !
    Citation Envoyé par CognitiKom Voir le message
    ...
    Je BLAGUE bien sûr, et j'en profite encore une fois pour dire un grand merci collectif.
    C'est très encourageant. Ne pas manquer de le faire surtout avec des

    Assez rigolé. Passons aux choses sérieuses. Pourquoi tout ce remue-ménage pour avoir un composant externe afin d'avoir un compteur auto rafraîchissant ?
    Les contrôles ActiveX VB ne réagissent pas aux événements souris ?
    J'ai loupé quelque chose ?
    Ousmane


    Quand on tombe dans l'eau, la pluie ne fait plus peur.

  12. #32
    Nouveau membre du Club
    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
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par NVCfrm Voir le message
    Pourquoi tout ce remue-ménage pour avoir un composant externe afin d'avoir un compteur auto rafraîchissant ?
    Les contrôles ActiveX VB ne réagissent pas aux événements souris ?
    J'ai loupé quelque chose ?
    Ben, oui, tu as loupé une étape importante, à savoir que les ActiveX disparaissent sans raison apparente !
    En fait, ça n'est pas tout à fait ça : ils se transforment en shapes et donc bien sûr plus rien ne marche.

    En fait, il y a environ une quinzaine de mois, ça a commencé par certains de mes ActiveX qui se sont mis à se déclencher tout seuls (les boutons) ou à changer de valeur (les listboxes), strictement sans aucune action directe de ma part. J'ai bien essayé de les mettre à Enabled = FALSE ou encore de changer leur ordre de tabulation, mais ça n'a servi à rien.

    Du coup, j'ai notamment changé les boutons en simples images de boutons sur lesquels j'ai superposé un ActiveX transparent de type image : il m'a permis de gérer artificiellement les Mousemove et les Clicks (en identifiant l'objet sous le curseur).
    Ça a marché pendant plus d'un an et croyant que le problème des ActiveX avait (enfin) été réglé par Microsoft, j'ai géré tous mes nouveaux boutons par des ActiveX. Ça a marché environ 2 mois, et peu à peu certains ActiveX se sont mis à disparaître : j'ai ajouté une procédure de contrôle à mon programme pour identifier les problèmes au plus vite (ça arrivait en temps en temps) et puis ils se sont mis à disparaître tout le temps.
    J'ai bien été obligé de chercher une autre solution, d'où ma visite ici.

    Voila, tu sais tout.

    Gilbert

  13. #33
    Membre chevronné
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 036
    Points : 1 917
    Points
    1 917
    Billets dans le blog
    5
    Par défaut
    Il fait tard pour moi, mais rapidement.
    Il me semble que tu crées des shapes ou des ActiveX dynamiquement.
    Et que (j'ai pas vu les sources codes de ton projet) certains ont peut-être du code qui interagissent l'un sur l'autre, rendant difficile pour toi de déterminer la source du problème. Tout n'est pas forcément du côté de MicroSoft d'après ce que tu expliques là.

    Il y a une parade néanmoins à tout ça. Tu sauvegardes les paramètres de tous tes shapes dans un tableau en dur quelque part sur une plage.
    Les plus importants étant les name, top, left, width, height, type, classe ... dans une boucle parcourant tes controls.

    Tu peux aussi écrire une instruction de log, traçant les appels dans les événements clics ou autres de tes contrôles, Application.Caller pour connaître l'origine de l'appel. Suivi à chaque fois d'une vérification générale de l'état de tes contrôles comparés aux valeurs stockées. S'il y a différence alors journal.
    Cette vérification tu peux la mettre aussi dans des événements WorkSheet.
    Tu pourras ensuite examiner ce journal pour repérer une indication utile.
    Ça c'est pour que tu t'amuses à traquer par voie de code ton propre code pour décéler une anomalie fonctionnelle.


    Et comme solution finale qui t'épargnera ces comportements désagréables et difficiles à contrôler, tu supprimes tous les shapes ActiveX ou Excel sans exception (bien entendu en ayant pris la précaution de stocker les propriétés). Ferme en enregistrant le classeur. Rouvre, Recrées les contrôles à partir des valeurs stockées dans la plage de sauvegarde.

    Dans l’événement Open de ThisWorkBook, ou Activate de la feuille de la feuille concernée, ou voir les deux brancher sur une procédure de restauration des propriétés des controls en lisant ceux que tu as sauvegardés dans une plage.
    Ne supprimes plus rien par la suite, ni en créer dynamiquement pour le supprimer. Pour ces dernier cas aussi, crées les et masque les quelque part, pour les appeler à apparaître au besoin.

    En principe, avec ça tu ne dois plus avoir de surprises avec tes ActiveX.
    Ousmane


    Quand on tombe dans l'eau, la pluie ne fait plus peur.

  14. #34
    Nouveau membre du Club
    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
    Points : 30
    Points
    30
    Par défaut
    Bonjour !

    Merci pour ta réponse !

    Non, en fait pour le moment je ne crée pas de Shapes ni d'ActiveX dynamiquement : je me contente de les afficher ou de les masquer. Sauf si on considère que dupliquer un onglet "modèle" est une création dynamique...
    C'est pour cela que j'incrimine Microsoft et que je ne pense pas que le problème vienne de moi [après tout, ils viennent bien seulement de corriger ENFIN un bug qui plantait l'éditeur VBE - et donc Excel - et que je connaissait depuis au moins 1998, et ça fait quand même 18 ans !]

    Voyant qu'ils disparaissaient un peu trop souvent à mon goût, j'ai en revanche mis en place une procédure de contrôle d'existence (comme tu le suggères, je parcours tous les onglets et je vérifie les noms par rapport à un tableau dans une feuille), mais je n'ai pas encore réussi à déterminer à quel moment ils disparaissent : à la sauvegarde ? à la fermeture du classeur ou à son ouverture ? ou n'importe quand ce qui serait bien pire ? Ah oui ! j'oubliais : le plus ennuyeux dans tout ça c'est que je ne suis pas certain de pouvoir les recréer dynamiquement parce qu'évidemment la disparition de certains ActiveX me donne des erreurs de compilation et donc je n'ai plus la main...

    Ce qui me surprend le plus c'est que je semble être le seul à rencontrer ce problème...
    Est-ce que c'est parce que mon code devient trop gros ?
    Est-ce que c'est parce que j'ai des onglets dupliqués (et donc des ActiveX portant le même nom même s'ils sont dans des onglets différents ?).
    Est-ce que c'est parce que mon PC est possédé par un esprit maléfique ? Exorciste pour PC, en voilà un nouveau métier plein d'avenir

  15. #35
    Membre chevronné
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 036
    Points : 1 917
    Points
    1 917
    Billets dans le blog
    5
    Par défaut
    Ce qui me surprend le plus c'est que je semble être le seul à rencontrer ce problème...
    Est-ce que c'est parce que mon code devient trop gros ?
    Est-ce que c'est parce que j'ai des onglets dupliqués (et donc des ActiveX portant le même nom même s'ils sont dans des onglets différents ?).
    Est-ce que c'est parce que mon PC est possédé par un esprit maléfique ?
    1. No tu n'es pas le seul à avoir rencontré ce problème. (Pour te rassurer que le petit lutin ne se préoccupe pas que de toi)
    2. Probablement. Un code gros est susceptible de beaucoup de choses. ..
    3. Voir plus loin vers le bas.
    4. Tu pourras t'en assurer en testant sur un autre PC





    ... Sauf si on considère que dupliquer un onglet "modèle" est une création dynamique...
    Je te confirmes que c'est un point clé de ton problème. Il est encore beaucoup plus préférable de les créer à la volée, que de les copier d'une feuille vers une autre, ou dupliquer une feuille contenant des Shapes. C'est à ce moment que la classe Shapes et ses co-latéraux commencent à débloquer possédé par un démon qui ne sait plus se tenir raisonnablement.
    Il y a des liaisons qui sont crées avec un potentiel de circularité surtout pour les contrôles MicroSoft. Tu auras deux Shapes de même nom, bien que dans 2 espaces de noms de différents, connectés à la même macro. On ne sait pas, (MicroSoft ne nous l'a pas dit, j'ai jamais pensé à faire cette vérification poussée) ce qui se passe des 2 côtés quand la macro liée est lancée et que celle-ci a un code qui agit sur une propriété du contrôle. Les 2 contrôles étant connectés au même code.
    Ensuite les contrôles Shapes de type ActiveX par exemple ayant une propriété comme LinkedMachin, ControlMachin liés à un Range sont dupliqués avec des liaisons absolues.
    Des bugs très difficiles à déboguer en perspectives dans une telle situation.


    Solution ?!
    Contournement des problème ingérables de ces contrôles devenus subitement fous par un code arbitraire.
    abracadabraaaa ... si lefou = disparu, le fou = visible.
    Le problème est masqué sans avoir été solutionné. Sans parler des cas concurrentiels, ... Tout sera corrompu, sans explication.

    Autre solution, on extermine les fous les plus méchants, pour les substituer à d'autres moins dangereux, mais avec leurs limitations et la possibilité de rencontrer d'autres problos.
    abracadabra google dis moi comment contourner la limitation de ces petits fous ne fournissant pas d’événements souris.
    Alors pour mettre en place un gestionnaire de temps assez fin, on s'en va encore dans l'incorporation de corps étrangers faisant en réalité appel à des choses que tu peux même réaliser en natif dans ton projet via une procédure démentielle.
    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
    Sub DemonSub()
        Static demon As Boolean
        Dim Pause
        If demon = False Then _
            Application.OnTime Time + 0.00001, "DemonSub", Time + 0.00015: _
            demon = True: Exit Sub
     
        While Cour 'ou un VarBool si tu veux plus de controle
     
            Pause = Timer + 0.5
            Do While Timer < Pause
                DoEvents
            Loop
     
            '... statements
     
        Wend
        demon = False
    End Sub
    Je te renvoi vers ce code qui doit te permettre d'avoir une idée de comment gérer ton temps. Bien sûr; il faut prendre la peine de créer les Controles cités dans le post qui précède juste avant celui du lien.

    Mais voilà, il faut savoir qu'au final on a laissé une bombe amorcée quelque part.


    Ah oui ! j'oubliais : le plus ennuyeux dans tout ça c'est que je ne suis pas certain de pouvoir les recréer dynamiquement parce qu'évidemment la disparition de certains ActiveX me donne des erreurs de compilation et donc je n'ai plus la main...
    Tu n'aurais pas des copies de sauvegarde ?




    Exorciste pour PC, en voilà un nouveau métier plein d'avenir
    Ousmane


    Quand on tombe dans l'eau, la pluie ne fait plus peur.

  16. #36
    Nouveau membre du Club
    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
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par NVCfrm Voir le message
    • No tu n'es pas le seul à avoir rencontré ce problème. (Pour te rassurer que le petit lutin ne se préoccupe pas que de toi)
    Voilà qui me rassure un peu. Pas beaucoup, mais un peu...

    Citation Envoyé par NVCfrm Voir le message
    • Probablement. Un code gros est susceptible de beaucoup de choses. ..
    Et pourtant je n'arrête pas de tout récrire quand certains comportements me semblent douteux ! J'enregistre toutes les erreurs d'exécution, y compris l'arborescence des appels de fonctions ou de procédures, dans un onglet que je m'envoie régulièrement par mail [je pense au fonctionnement futur chez mes clients] et je stocke ou non [dépend du paramétrage] tous les appels de fonctions ou de procédures dans un fichier à plat avec le temps exact d'exécution [j'arrive vite à des fichiers de plusieurs centaines milliers de lignes, mais étonnamment ça n'est pas trop pénalisant en termes de performances].

    Citation Envoyé par NVCfrm Voir le message
    • Tu pourras t'en assurer en testant sur un autre PC..
    Oui c'est certain. Mais je manque cruellement de temps [je bosse sur ce projet 15 à 17h/j, 7j/7] et je ne peux malheureusement pas me faire aider [sans rentrer dans les détails, ça fait 2 ans que je ne gagne pas un centime, même pas le RSA, avec des charges qui continuent à tomber]


    Citation Envoyé par NVCfrm Voir le message
    Je te confirmes que c'est un point clé de ton problème. Il est encore beaucoup plus préférable de les créer à la volée, que de les copier d'une feuille vers une autre, ou dupliquer une feuille contenant des Shapes. C'est à ce moment que la classe Shapes et ses co-latéraux commencent à débloquer possédé par un démon qui ne sait plus se tenir raisonnablement.
    Il y a des liaisons qui sont crées avec un potentiel de circularité surtout pour les contrôles MicroSoft. Tu auras deux Shapes de même nom, bien que dans 2 espaces de noms de différents, connectés à la même macro. On ne sait pas, (MicroSoft ne nous l'a pas dit, j'ai jamais pensé à faire cette vérification poussée) ce qui se passe des 2 côtés quand la macro liée est lancée et que celle-ci a un code qui agit sur une propriété du contrôle. Les 2 contrôles étant connectés au même code.
    Ensuite les contrôles Shapes de type ActiveX par exemple ayant une propriété comme LinkedMachin, ControlMachin liés à un Range sont dupliqués avec des liaisons absolues.
    Des bugs très difficiles à déboguer en perspectives dans une telle situation.
    Écoute. Je te donne une nouvelle chance de me faire une réponse plus positive. Parce que celle là ne me plait pas du tout, mais alors PAS DU TOUT

    Pour la suite, je n'ai pas tout compris : je vais relire la suite de tes conseils plus tard...

    Citation Envoyé par NVCfrm Voir le message
    Tu n'aurais pas des copies de sauvegarde ?
    Si, bien sûr [depuis le début que je suis dessus, j'en suis à la version 0.91r, ce qui représente environ 91 x 26 sous-versions... : un jour je ferai du ménage ], à part qu'avant de me rendre compte que des ActiveX disparaissaient, il pouvait se passer du temps car je bossais sur autre chose, et du coup ça m'est arrivé de passer jusqu'à 3 jours pour fusionner mes modifs à un ancienne situation stable.
    Là je parlais plutôt en production : idem, à chaque lancement, j'archive la version précédente que je conserve pendant une durée fixée par le paramétrage. L'ennui c'est que SÆCI traite des fichiers, les renomme, les déplace, enrichit un tableau de bord, crée un fichier d'historique des traitements, etc. Je peux revenir en arrière à l'intérieur du programme, mais si SÆCI se plante et s'il faut que je reparte d'une version antérieure, l faut que je reconstruise "vers l'avant" l'ensemble des traitements réalisés ultérieurement... Pas des plus faciles

    En tout cas merci pour ton implication.
    Je vais probablement revenir vers toi quand j'aurai compris tout ce que tu m'as dit !

    Bonne soirée
    Gilbert

  17. #37
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Citation Envoyé par CognitiKom Voir le message
    Écoute. Je te donne une nouvelle chance de me faire une réponse plus positive. Parce que celle là ne me plait pas du tout, mais alors PAS DU TOUT
    Ta réponse à toi, ne plaira pas du tout à ceux qui cherchent à t'aider bénévolement. Et puis, peu importe ce que tu peux patenter, ta macro va planter chez tous tes clients qui ne cocheront pas volontairement la case "Faire confiance au projet Visual Basic". Parce que modifier des macros par macros, ce n'est pas le sport préféré de la très grande majorité des utilisateurs.

    ET comme plus Windows et Office progressent, plus les applications non signées numériquement ont la vie de plus en plus difficile.

    Et puis, si tu utilises les contrôles ActiveX externes, genre calendar, RichTextBox, DateTimePicker sur un Office à 32 bits, ils seront inutilisables pour tes clients qui ont des Office à 64 bits.

    Et puis, si ton code a été aussi zigonné que tu le dis, tu pourrais sans doute luis appliquer un petit traitement qui ne devrait probablement pas (du moins je l'espère) faire de tort. VBA Code Cleaner de Rob Bovey.

    Mais, personnellement, je jetterais tout cela à la poubelle et je recommencerais avec VB.net, ou même C#. Parce que veut-veut pas, c'est probablement la manière la plus simple de traiter avec les Office de 2000 à 2016, les Office à 32 bits et les Office à 64 bits.

    Et puis, c'est sans compter que Excel a constamment besoin de tous ses classeurs en mémoire vive pour fonctionner et que d'utiliser des contrôles demande beaucoup de mémoire et que les opérations de duplication et de copie augmentent encore les besoins en mémoire. Et si tes clients ont des Windows à 32 bits (cela existe encore), ils ont de peine et de misère un gros maximum de 3GO de mémoire vive à partager entre tous les programmes et services ouverts.

    ET tu peux faire la crise que tu voudras, je persiste et je signe.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  18. #38
    Nouveau membre du Club
    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
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par clementmarcotte Voir le message
    Ta réponse à toi, ne plaira pas du tout à ceux qui cherchent à t'aider bénévolement.
    Bonjour
    Écoute : je BLAGUAIS en disant que TA réponse ne me plaisait pas du tout. Je pensais que ça se voyait à mon ton. Désolé si je t'ai vexé, cela n'était pas du tout mon intention.
    Bien sûr que ce que tu m'exposes ne me plait pas, mais tu n'y es pour rien, et au contraire tu as la gentillesse de m'en informer.

    Citation Envoyé par clementmarcotte Voir le message
    Et puis, si tu utilises les contrôles ActiveX externes, genre calendar, RichTextBox, DateTimePicker sur un Office à 32 bits, ils seront inutilisables pour tes clients qui ont des Office à 64 bits.
    J'utilise très peu d'ActiveX externes (de mémoire, 3 seulement, une fois chacun) : le Timer que m'a proposé dysorthographie, un CommonDialog et (malheureusement) un AMSREdit, dans le style justement d'un RichTextBox. Cela étant, à moins que la dernière version soit compatible 64 bits, l'outil d'océrisation que j'utilise, lui, ne l'est pas, et de toute façon je suis donc coincé pour ce qui est d'Office 64 bits.

    Citation Envoyé par clementmarcotte Voir le message
    Et puis, si ton code a été aussi zigonné que tu le dis, tu pourrais sans doute luis appliquer un petit traitement qui ne devrait probablement pas (du moins je l'espère) faire de tort. VBA Code Cleaner de Rob Bovey.
    Merci de me rappeler de le faire : je l'avais déjà fait il y a quelques mois mais je vais recommencer.
    Un truc qui est bizarre à ce sujet : quand j'ai mon code qui plante, je me suis aperçu que d'exporter tous les modules par programme et de les recharger diminuait considérablement la taille du classeur (je passe facilement de 7 Mo à environ 5) et améliorait sensiblement son fonctionnement. Et ça n'a rien à voir avec les espaces en trop en fin de ligne que j'en profite pour effacer au passage...

    Citation Envoyé par clementmarcotte Voir le message
    Mais, personnellement, je jetterais tout cela à la poubelle et je recommencerais avec VB.net, ou même C#. Parce que veut-veut pas, c'est probablement la manière la plus simple de traiter avec les Office de 2000 à 2016, les Office à 32 bits et les Office à 64 bits.
    Je SAIS que je dois le faire (si je suis sous Excel, c'est à cause d'un client potentiel amené par un "presque" associé avec qui tout a finalement foiré), mais je voudrais attendre d'avoir une première version commercialisable [sans rentrer dans le détail et sans expliquer toutes les raisons perso qui m'ont conduit à ça, mais ça fait 2 ans que je ne gagne pas un centime, même pas le RSA, et que je suis dans une m... que tu ne peux pas imaginer].
    La question est de savoir : combien de temps je vais passer à tout récrire ? plusieurs mois probablement...

    Citation Envoyé par clementmarcotte Voir le message
    ET tu peux faire la crise que tu voudras, je persiste et je signe.
    Au risque de me répéter, ça n'était pas une crise, mais juste de l'humour...

    Donc, encore une fois merci pour tes conseils avisés.
    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