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 de mise à jour de Ctrl ActiveX avec linkecell notamment


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier Avatar de Gorzyne
    Profil pro
    Collégien
    Inscrit en
    Janvier 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Janvier 2008
    Messages : 324
    Points : 115
    Points
    115
    Par défaut Problème de mise à jour de Ctrl ActiveX avec linkecell notamment
    Je développe une petite appli j'ai fait le choix d'utiliser les contrôles ActiveX que je n'aime pas trop d'habitude en raison de leur instabilité
    J'ai fait ce choix car je trouvais que c'était un bon compromis entre les usf et les ctrl de formulaire, bref


    j'ai développé sous Office 2019, et j'étais heureu de découvrir qu'on pouvait avoir un comportement similaire au ctrl de formulaires avec linkedcell notamment

    et donc démo au client plus rien de marche...

    enfin quand je dis rien ne marche point de vue client, les controles ne réagissent pas ou mal

    si je clique sur une combobox l'outil fait bien le travail mais l'affichage dans la combobox selectionné ne se fait pas

    je résoud le problème en faisant un range("A1").select c'est la seule manip que j'ai trouvée qui fonctionne

    là où c'est plus embêtant c'est au niveau des zones de texte, quand je clique dedans je peux écrire mais on voit pas le curseur et l'affichage ne se fait pas
    je peux pas faire range("A1").select car je perdrais le focus sur ma textbox... et je pourrais taper qu'un caractère à la fois


    je précise que j'ai une linkedcell sur ma textbox également si je mets crée un classeur vierge avec une textbox sans rien le fonctionnement est normal
    pour vous dire à quel point c'est ubuesque le comportement de ma textbox dépend de l'écran sur lequel je met mon appli, sur l'écran principal ça marche à peu près et quand je met sur l'écran secondaire c'est là où la textbox ne se met pas à jour...


    Bref voilà si vous avez des solutions pour résoudre ce truc c'est dommage car les ctr activex sont une solution pratique pour développer rapidement un petot applicatif léger mais tellement instable !


    Gorz.

  2. #2
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 924
    Points
    55 924
    Billets dans le blog
    131
    Par défaut
    Salut.

    Je n'ai pas compris grand chose à ta situation. Si j'ai bien compris, tu as plusieurs contrôles activex sur une feuille, liés à des cellules. Au delà, je n'ai pas compris les problèmes que tu rencontres.

    Pourrais-tu détailler et joindre une copie d'écran qui illustrerait le problème?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre régulier Avatar de Gorzyne
    Profil pro
    Collégien
    Inscrit en
    Janvier 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Janvier 2008
    Messages : 324
    Points : 115
    Points
    115
    Par défaut
    alors malheureusement je ne suis pas autorisé à diffuser l'outil sur lequel je travaille bien qu'il ne contienne rien de crucial, il s'agit de calculer des indemnités de cessation d'activité (licenciement, rupture conventionnelle, départ en retraite)
    à la rigueur je pourrais nettoyer les infos sensibles mais de toute façon je crois que l'idée est de ne pas transmettre de classeur avec macros
    donc schématiquement j'ai 3 onglets

    - un onglet interface qui contient des listbox (une demi douzaine) et des textbox (une demi douzaine) de type activex avec utilisation des propriétés linkedcell et listfillrange
    - ces propriétés sont liées à un onglet de pilotage qui contient les formules Excel où elles vont déterminer des paramètres de calcul et d'affichage dynamique sur l'onglet interface
    - un dernier onglet base qui contient les données exploitées par l'onglet de pilotage dans les calcul (en gros les barèmes des conventions collectives)


    => seul l'onglet pilotage contient des formules excel
    => l'onglet base ne contient que de la data exploitée dans l'onglet pilotage, aucune formule
    => l'onglet interface ne contient que du contrôle activex, aucune formule ni data

    => l'affichage dans l'onglet interface est dynamique c'est à dire que la sélection dans une listbox conditionne la mise à jour des autres listeboxes voir leur visibilité
    => en gros par exemple je sélectionne une convention collective ça me calcule dans l'onglet pilotage les catégories disponibles sur cette convention que je rebalance dans l'interface dans la listbox des catégories.
    => je sélectionne un type de départ par exemple licenciement ça m'affiche une listbox avec les types de licenciement (en fonction de la catégorie et de la convention) par exemple licenciement économique, pour faute, suite à accident du travail, etc...


    j'ai développé ça sur mon PC perso et tout fonctionnait correctement je bascule dans l'environnement client et la horreur les affichages plantent fréquemment, c'est à dire que les listbox freeze, donc recours à des bidouilles en tout genre pour fluidifier l'affichage, changement d'onglet, sélection d'une cell, j'ai mis des petits espions VBA pour voir ce qui se passait et effectivement l'outil gère mal les allez-retours entre l'affichage et le pilotage, en effet il ne s'agit pas de macros évenementielles donc EnableEvents = False ne sert à rien, je mets des indicateurs pour savoir si les subs attachées aux contrôles sont appelées par l'utilisateur ou à cause d'une modification liée à la volatilité, (en gros l'outil essaie de mettre à jour des affichages qui n'ont pas besoin d'être remis à jour car la value n'a pas bougé) exemple je sélectionne un type de départ et il me réinitialise la sélection de ma catégorie.

    Bref ce que je retiens c'est que l'environnement influe sur le comportement des contrôles, pourtant c'est un Office 2019 dans les deux cas, j'ai essayé de supprimer les fameux fichiers temporaires liées aux bugs ActiveX mais ça n'a rien changé... j'imagine qu'on est sur une problématique plus Windows qu'Office, mais ça reste assez pénible, évidemment quand j'ai fait les démos depuis mon PC perso le commanditeur pensait qu'on allait livrer rapidement et mauvaise surprise à l'arrivée.

    Voilà pour les explications un peu longues, il me manquerait donc une sorte de gestion des refresh des contrôles sans passer par des rustines car évidemment la mise à jour de l'affichage reste capricieuse malgré les rustines donc si il y a une solution miracle je sais pas peut être activer le calcul itératif ou quoi... (je dis ça j'ai pas essayé remarque)

  4. #4
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 924
    Points
    55 924
    Billets dans le blog
    131
    Par défaut
    Les ListFillRange, c'est bien en lecture seule, sans modifier les plages sources, mais si j'ai bien compris, ton interface permet de les modifier (ajout, suppression, ...) et ça, les contrôles ont des difficultés à gérer. Le problème est similaire dans les userforms, et le conseil est donc de ne pas utiliser les ListFillRange, mais de charger les listes par code. Les plages sous-jacentes peuvent alors être modifiées à l'envi sans que cela pose problème. Evidemment, c'est encore plus intéressant et facile à coder lorsque les listbox et autres s'appuient sur des tableaux structurés.

    Pour ce qui est du pilotage par TAB et donc de la navigation dans le "formulaire", il n'est pas géré par les activex "de feuille" qui ne disposent pas du tabIndex ni du tabStop. Les activex disponibles pour une feuille ne sont pas exactement les mêmes que ceux des userforms et ne se codent pas de la même manière. Perso, il ne me viendrait pas à l'idée de créer un interface de saisie à coup d'activex sur une feuille de calcul. Ce n'est pas le rôle de ces outils.

    La feuille Excel n'a pas pour objectif de se substituer à un userform, et ça me semble être un choix sujet à caution de réaliser un "formulaire de saisie" à coup d'activex sur une feuille.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre régulier Avatar de Gorzyne
    Profil pro
    Collégien
    Inscrit en
    Janvier 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Janvier 2008
    Messages : 324
    Points : 115
    Points
    115
    Par défaut
    j'avoue qu'on ne m'y reprendra pas d'autant plus que j'étais conscient des difficultés relatives aux contrôles activeX typiquement les contrôles qui rapetissent ou grossissent à l'envie (difficulté avec la résolution d'écran je crois, résolu par integralheight=false dans mon cas)
    mais j'ai également des freeze avec les textbox qui elles sont à sens unique de l'interface vers le pilotage et pas l'inverse

    je me doute que le remplissage par sub est sans doute plus stable, c'est d'ailleurs ce que j'avais commencé à faire quand j'ai pris conscience de la propriété LinkedCell qui permet peu ou prou de reproduire le comportement des contrôles de formulaire- et donc d'économiser du temps passé. Pourquoi être allé sur des contrôles ActiveX, pour l'esthétique, je m'étais inspiré d'un classeur tiers que je trouvais très joli, et pour faire la même chose en Usf c'est bien plus de travail... mais à part l'intérêt esthétique des contrôles activeX que l'on peut par ailleurs plus difficilement reproduire en Usf, c'est que des galères j'en conviens

    bref j'en déduit qu'il n'y a pas grand chose à faire.. pourtant je n'ai même pas utilisé de fonctions vba maisons alors peut être le fait que j'utilise des fonctions matricielles ? une histoire de volatilité

    par contre ce que tu appelles "Tableaux structurés..." c'est quoi ? tes un module des fameux PowerQuery de 2019 ? je ne me suis pas trop approprié ces objets même si j'avoue avoir été bluffé par les démonstrations que j'ai vu

Discussions similaires

  1. Problème de mise à jour d'un RCP avec p2
    Par dbabar dans le forum Eclipse Platform
    Réponses: 6
    Dernier message: 19/09/2017, 21h46
  2. [QtGui] Problème de mise à jour d'une vue avec un delegate perso
    Par tbar403 dans le forum PyQt
    Réponses: 2
    Dernier message: 03/03/2016, 17h15
  3. [SP 2007] Problème de mise à jour d'un élément avec EventHandler
    Par Skaribou dans le forum Développement Sharepoint
    Réponses: 11
    Dernier message: 18/01/2012, 14h29
  4. Réponses: 1
    Dernier message: 07/05/2008, 17h09
  5. Problème de mise à jour de données avec IBClientDataset
    Par Papino dans le forum Bases de données
    Réponses: 6
    Dernier message: 26/09/2005, 14h04

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