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 :

Comment empêcher les listbox de se vider à l'ouverture du fichier


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Consultant MOA
    Inscrit en
    Juin 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2007
    Messages : 60
    Points : 32
    Points
    32
    Par défaut Comment empêcher les listbox de se vider à l'ouverture du fichier
    Bonjour,

    J'ai construit un fichier Excel qui contient un certain nombre d'onglets, tous basés sur un onglet "modèle" et dans lesquels l'utilisateur remplit de nombreux champs.

    Parmi les champs à remplir, il y a 2 listbox (de type contrôle activeX) avec une liste de valeurs qui peuvent être sélectionnées (choix multiple autorisé, présentation sous forme de liste avec case à cocher).

    Les valeurs dans ces listes sont initialisées avec la fonction .AddItem dans l'onglet "modèle". Ensuite les autres onglets sont créés par recopie du modèle, ils ont donc les mêmes valeurs.
    J'ai également une procédure VBA qui me permet d'ajouter une nouvelle valeur dans les listes sur chaque onglet (toujours avec la fonction AddItem).

    Mon problème : lorsque je ferme le fichier et que je le ré-ouvre, toutes les listbox se vident.
    J'aimerais donc trouver une propriété ou fonction des listbox qui pourrait être déclenchée à l'ouverture du classeur pour empêcher cette "remise à zéro". Sachant qu'en plus, on voit vraiment que les données sont là et au bout d'une demi-seconde, elles disparaissent...
    Je n'ai trouvé nulle part une telle fonction/méthode à appeler dans Workbook_Open(). Je ne suis pas sûre qu'elle existe mais ce serait l'idéal pour moi...donc si quelqu'un a des connaissances là-dessus, qu'il n'hésite pas !

    Cela me semblerait être le plus propre.
    La méthode "recharger toutes les listbox" à l'ouverture ne convient pas car cela ne permet pas de conserver les valeurs qui avaient été cochées dans chaque onglet par l'utilisateur. Et je voudrais éviter de devoir créer un stockage "manuel" de tout cela....ce qui serait mon ultime recours si je n'ai pas de solution.

    Merci d'avance pour vos idées !

    PS : je précise que mes listbox ne sont pas remplies avec la propriété ListFillRange car cela interdit l'utilisation de .AddItem pour ajouter des valeurs. De plus si j'utilisais ListFillRange j'aurais quand même le problème à l'ouverture, juste un peu différent : les listes sont toujours remplies mais les valeurs cochées disparaissent quand même.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,

    Sers-toi de la macro "Private Sub Workbook_BeforeClose" du module "ThisWorkbook" pour stocker dans une feuille le contenu de tes listboxes. Tu les réinitialiseras à la réouverture du fichier.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  3. #3
    Nouveau membre du Club
    Profil pro
    Consultant MOA
    Inscrit en
    Juin 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2007
    Messages : 60
    Points : 32
    Points
    32
    Par défaut
    Bonjour Daniel,

    Merci de ta réponse, mais j'aurais voulu éviter cette méthode.
    En effet il n'y a pas juste à stocker les valeurs dans les listbox, mais aussi toutes les sélections sur chaque onglet pour pouvoir restaurer les listes avec les sélections dans chacune. Je trouve ça un peu trop lourd, c'est pour ça que j'aimerais plutôt un "non-vidage" si ça existe...

  4. #4
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    A part ne pas fermer le classeur...
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  5. #5
    Nouveau membre du Club
    Profil pro
    Consultant MOA
    Inscrit en
    Juin 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2007
    Messages : 60
    Points : 32
    Points
    32
    Par défaut
    Ce n'est pas très encourageant
    Je ne vois vraiment pas pourquoi ces objets sont obligés de se vider à l'ouverture ??

  6. #6
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Je le vois comme ça. Soit tu utilises des plages de cellules, soit tu remplis les contrôles avec AddItem ou autre. Dans ce dernier cas, tout se passe en mémoire, donc à la fermeture, Excel restitue la place mémoire... et ce qu'il y avait dedans.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  7. #7
    Nouveau membre du Club
    Profil pro
    Consultant MOA
    Inscrit en
    Juin 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2007
    Messages : 60
    Points : 32
    Points
    32
    Par défaut Solution temporaire
    Bonjour,
    J'ai temporairement utilisé une sauvegarde des valeurs (à la fermeture) + restitution (à l'ouverture).
    Cependant je ne considère pas vraiment comme "résolu" car j'avais déjà cette solution en tête mais je ne la trouve pas idéale...notamment parce qu'elle est visible par l'utilisateur à l'ouverture et risque de consommer de plus en plus de temps avec l'ajout de nouvelles données.

    Je laisse donc la discussion ouverte au cas où une meilleure solution me soit proposée un jour

  8. #8
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Une autre réponse du pays d'Oz :

    http://www.ozgrid.com/ :

    You cannot save selections in a listBox when the WorkBook is closed. You could save them on a hidden sheet then re-populate the listBox
    Donc, la même chose sauf l'idée de sauvegarder les données sur une feuille masquée.

    Je laisse donc la discussion ouverte au cas où une meilleure solution me soit proposée un jour
    C'est l'espoir qui fait vivre... mais tu me fais penser à un voyageur à la station de métro Gambetta et qui attendrait la rame pour Robespierre...
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  9. #9
    Nouveau membre du Club
    Profil pro
    Consultant MOA
    Inscrit en
    Juin 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2007
    Messages : 60
    Points : 32
    Points
    32
    Par défaut
    Merci pour les réponses Daniel !
    La méthode d'Oz est celle que j'ai employée : sauvegarde des valeurs sur une feuille masquée.
    Je pense que l'absence de propriété pour ne pas rafraîchir vient du fait que ces contrôles sont surtout destinés à des formulaires, donc données temporaires, et mon usage est différent.
    Ma solution marche mais l'espoir fait vivre
    Merci quand même d'avoir pris le temps de me répondre

Discussions similaires

  1. Comment empêcher les QRGRoupe de se recréer !
    Par menoulette dans le forum Débuter
    Réponses: 11
    Dernier message: 27/02/2014, 09h41
  2. Réponses: 2
    Dernier message: 18/08/2011, 16h52
  3. Comment empécher les @ dans mon script de test d'eMail actuel ?
    Par Jean-Seba dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 24/07/2011, 17h57
  4. [MySQL] Comment empêcher les messages erreur ?
    Par tremeur53 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 15/11/2007, 23h47
  5. Réponses: 5
    Dernier message: 06/04/2007, 08h28

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