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 :

Sauvegarder les Paramètres des Contrôles [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 58
    Points : 40
    Points
    40
    Par défaut Sauvegarder les Paramètres des Contrôles
    Bonsoir à tous (Ou Bonjour suivant l'heure),

    J'ai entrevu ici
    http://silkyroad.developpez.com/VBA/UserForm/#LV-F

    Une fonction qui m'intéresse au plus haut point.

    "Sauvegarder les Paramètres des Contrôles". (En bas de la fenêtre)

    J'ai dans une appli en cours des ListView chargées de la liste d'articles
    de différents fournisseurs. (Elles sont mises dans le Multipage d'un USF).

    Le temps d'initialisation est assez long!

    Il serait donc confortable de savoir les sauvegarder pour pouvoir les
    restituer ainsi que le montre l'exemple avec les TextBoxes.

    Le faire sur une feuille ne changerait rien au temps,
    car ce dernier ne serait pas plus court que l'opération initiale.

    Cela est-il possible avec "SaveSetting" ?

    Merci d'avance à qui pourra m'aider.

    Amicalement

    Yann

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut heu!...
    bonjour


    oui je pense que c'est possible par le "save setting mais ca n'est pas le plus rapide et en plus ca ne fonctionnera que sur l'ordi que tu a utilisé pour sauvegarder
    alors mais a moins que ta liste fasse 100000 lignes le temp n'est pas trop long a mon avis

    peut etre faudrais t'il revoir comment tu les remplies

    donne un bout de code que l'on vois ca

    deja une idée comme ca pourquoi ne pas les remplir des l'ouverture du fichier
    et garder cette liste dans une variable collection par exemple



    au plaisir

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 58
    Points : 40
    Points
    40
    Par défaut Merci Patrick
    Bonsoir Patrick,

    C'est sympa de ta part de m'avoir répondu.

    Ta remarque relative au fait que les ListView ne resteraient en mémoire que sur l'ordi de l'utilisateur
    m'amène effectivement à en déduire que ce n'est pas une bonne solution dans mon cas.
    (Une douzaine de postes en réseau, et des actualisations de données sur serveur fréquentes)

    D'autant que tu me dis que cela ne serait pas plus rapide.

    Pour information; il s'agit d'une base avec une cinquantaine de Fournisseurs dont 4 ou 5 principaux
    ont de l'ordre de 20.000 références... Les autres beaucoup moins.
    Chaque référence a 7 critères devant être chargés dans les ListView... Au total l'ordi chauffe un peu!!!

    Le chargement de l'ensemble n'est pas extrêmement lent (Et j'ai mis une barre de défilement pour rassurer)
    Mais je ne doute que ma méthode peut être améliorée.

    Pour ce qui est du "Bout de Macro", Je vais construire un exemple, car en l'état actuel c'est impossible.
    Mon USF est créé d'une façon dynamique, les ListView idem dans un Multipages au nombre d'onglets variable suivant les Fournisseurs présents... Et c.
    De plus, les évènements sur ces dernières sont mis dans un module de Classe. Bonjour l'imbroglio!!!

    Je reviens pour te soumettre ma façon de charger une ListView à partir d'une base de données.

    En ne doutant pas que tu seras de bon conseil, ainsi que tu viens de me démontrer.

    A plus tard, et Merci pour ton regard.

    Amicalement

    Yann

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 58
    Points : 40
    Points
    40
    Par défaut Voici ce bout de Bidouille
    Re Patrick,

    Voici ma façon de faire:

    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 Sub UserForm_Initialize()
     
    With Me.ListView1: .Gridlines = True: .View = 3
        With .ColumnHeaders 'LES ENTETES SONT EN LIGNE 4
           For i = 1 To ActiveSheet.UsedRange.Columns.Count
           .Add , , ActiveSheet.Cells(4, i).Value, 70
           Next i
        End With
    ' INITIALISATION (Les données à charger commencent à la ligne 5)
           For i = 5 To ActiveSheet.UsedRange.Rows.Count + 5
             .ListItems.Add , , ActiveSheet.Cells(i, 1).Value
                 For j = 2 To ActiveSheet.UsedRange.Columns.Count
                 .ListItems(.ListItems.Count).ListSubItems.Add , , ActiveSheet.Cells(i, j).Value
                 Next j
           Next i
    End With
     
    End Sub
    Je joins le Classeur exemple, s'il passe!...

    Au plaisir de lire tes éventuels commentaires ainsi que de ceux qui passeraient par ici.

    La rapidité est importante, car qui se lasse plus que les utilisateurs
    d'une application lente et mal construite??? .... Je suis donc avide d'accélérer le processus.

    Merci encore pour l'aide.

    Yann
    Fichiers attachés Fichiers attachés

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    bonjour


    c'est bien ce que je dis tu rempli dynamiquement ta liste



    en utilisant une variable tableau serai peut etre plus judicieux et certainement plus rapide
    je démontre
    ici on va remplir une listbox avec toute le cellule de la colonne"A"

    tu n'a qu'a essayer ça sur un nouveau classeur
    rempli la colonne "A" jusqu'à la fin si tu veux
    ajoute lui un userform avec une listbox

    et dans le activate du userform tu met ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
       Private Sub UserForm_Activate()
    l = Sheets(1).Range("a65536").End(xlUp).Row 'trouve la derniere ligne utilisée dans la colonne "A"
    tableau = Sheets(1).Range("a2:a" & l).Value 'inscrit toute les cellule dans la variable tableau
    ListBox1.List() = tableau 'inscrit le tableau dans la listbox
    end sub
    meme si tu a 5000 lignes c'est pratiquement instantané

    il te reste plus q'ua adapter ca a ta listview



    au plaisir

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 58
    Points : 40
    Points
    40
    Par défaut
    Patrick,

    Je suis bigrement heureux que tu m'aides.

    Je vais tenter d'adapter ton code.

    Mon application est utilisée depuis 4 ans dans l'entreprise dont je faisais partie.
    (Je suis actuellement à la retraite, mais toujours en cordial contact)

    A noter que mon job n'avait rien à voir avec VBA.

    C'est donc un challenge personnel d'améliorer l'efficacité de cet outil.
    Sinon un passe-temps fort agréable pour tenir en éveil mes neurones.

    Je teste, et te tiens au courant.

    Amicalement, et Merci encore,

    Yann

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 58
    Points : 40
    Points
    40
    Par défaut
    Re Patrick,

    Je plante totalement dans l'adaptation pour une ListView!

    Il me semble que la propriété ".List" n'est pas compatible avec cette dernière...

    Sinon; la rapidité est indubitable pour la ListBox.

    As-tu tenté de le faire de ton coté avec mon exemple?

    Au plaisir de te lire.

    Amicalement.

    Yann

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    je viens de tester ton fichier en ayant ajouter des lignes jusque a 5000 lignes
    et effectivement il met 3 seconde a apparaître mais selon la structure du remplissage je ne vois pas comment faire mieux avec une listview

    j'essaierais avec une listbox si j'étais toi


    mais il faudrais que j'en sache un petit peu plus sur les événements de la listview

    au plaisir

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 58
    Points : 40
    Points
    40
    Par défaut
    Merci Patrick,

    J'ai apprécié ton aide et ton dévouement,
    en étant bien conscient du temps que tu y as investi.

    Dans mon projet, il est hors de question que je me passe des possibilités
    qu'offre une ListView par rapport à de celles limitées d'une ListBox.
    (Sans parler de la souplesse de visualisation)

    Il n'est pas pour rien que même Bill nous la mise à toutes les sauces.

    Tant pis pour ceux qui n'auront pas envie d'aller faire pipi
    le temps de chargement de mon appli

    "Patience et longueur de temps font mieux que force et que rage"

    N'est-il pas?

    Merci encore à toi, et au plaisir de te croiser à nouveau ici.

    Amicalement.

    Yann

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    mais il n'en tient qu'a toi d'avoir les memes possibilités que la listview moyennant un peu de code

    je viens moi meme d'essayer celle que je tai envoyé avec cette fois ci le 12 mois et 6500 lignes ca met moins d'une seconde a s'afficher
    alors je te parle pas de l'economie de l'UC

    mais je vais potasser encore sur ta listview je suis sur qu'il y a encore quelque chose a faire je ne m'avoue jamais vaincu moi

    cela dit la ou tu a

    "unload nom de l'userform"

    tu peut les remplacer par

    "nomde l'userform.hide"
    et suprimer le remplisage a chaque fois que l'userform est activé


    au plaisir

  11. #11
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut
    re

    c'est bien ce que je pensais finalement les chose les plus simples sont les meilleures


    alors
    dans le module thisworkbook

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Private Sub Workbook_Open()
    UserForm1.Show 0
    UserForm1.Hide
    End Sub
    et dla macro qui te rempli la listview

    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
     
    Private Sub UserForm_Initialize()
     
    With Me.ListView1: .Gridlines = True: .View = 3
        With .ColumnHeaders 'LES ENTETES SONT EN LIGNE 4
           For i = 1 To ActiveSheet.UsedRange.Columns.Count
           .Add , , ActiveSheet.Cells(4, i).Value, 70
           Next i
        End With
    ' INITIALISATION (Les données à charger commencent à la ligne 5)
           For i = 5 To ActiveSheet.UsedRange.Rows.Count + 5
             .ListItems.Add , , ActiveSheet.Cells(i, 1).Value
                 For j = 2 To ActiveSheet.UsedRange.Columns.Count
                 .ListItems(.ListItems.Count).ListSubItems.Add , , ActiveSheet.Cells(i, j).Value
                 Next j
           DoEvents
           Next i
    End With
     
    End Sub
    alors l'ors de l'ouverture du fichier
    le userform est loader et mis a hide tout de suite 'deja un peu d'economie d'afichage

    ensuite dans la boucle qui te remplis la listview j'ai mis un doevents pour garder le control du fichier
    et bien essaie tu va voir le gain de temp c'est magique hihihihi
    quand tu clique sur le bouton pour afficher le userform c'est pratiquement imediat

    au plaisir

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 58
    Points : 40
    Points
    40
    Par défaut Compliment pour ta ténacité!
    Compliment pour ta ténacité!

    Mais ne t'es-tu pas mélangé les pinceaux, car je n'ai jamais parlé de
    Unload USF, ni USF.Hide?
    (Sauf dans ma question relative à la fermeture des VBAProjects
    qui reste toujours sans réponse... Mais ce n'est pas le présent sujet)

    Quant aux codes permettant d'avoir les mêmes possibilités qu'une
    ListBox, je n'ai pas tenté, car jusqu'à présent ce n'était pas ma tasse de thé!

    De plus, modifier les SubItems.Text, changer la couleur, en extraire calculs
    et en modifier le format ne me semble pas être de la tarte...

    Je serai attentif à tes résultats sur une ListView.

    Au plaisir.

    Yann

  13. #13
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    alors je repete


    tu avait un probleme de lenteur du au remplissage de ta listview

    et bien en le remplissant des l'ouverture du classeur et un doevents dans la boucle au cas ou tu te servirais pas de l'userform tout de suite a l'ouverture du fichier tu gagne a peu pres 60% de temp j'ai testé


    au plaisir

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 58
    Points : 40
    Points
    40
    Par défaut
    Bonjour Patrick,

    Je dois avouer les limites de ma compétence en VBA!
    Do Event, je ne sais pas faire.

    Ne doutant pas que ce soit là un bon conseil; je vais fouiller
    dans les aides.

    A moins qu'il t'amuse de modifier mon Classeur initial...
    J'en serais preneur par avoir économisé beaucoup de temps.

    Amicalement, et Bravo pour ta patience.

    Yann

  15. #15
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    bonjour


    alors c'est très facile

    tout d'abords comment ouvrais tu ton userform avec ta listview

    si c'est avec un bouton

    tu change rien a ce niveau la de façon a avoir la possibilité d'y faire appel quand tu veux
    la ou on peut changer ça c'est a l'ouverture du fichier tu ouvre et tu hide ton usf

    je dis bien "hide" et pas unload

    et tout simplement dans ta boucle comme tu la présenté dans ton exemple
    tu marque "doevents" juste avant le next

    doevents saire a libérer la mémoire en cas de l'utilisation du fichier

    j'explique:

    a supposer que tu ai un boucle qui tourne 5000 fois selon le type de données traitée sa peut être long et ton sablier tourne tourne

    et bien le doevents te sert a pouvoir faire autre chose sur le fichier en même temps tout simplement sa ralenti la boucle mais vu que ca va plus vite puisque l'affichage du usf et a hide donc la mémoire graphique utilisé pour l'a mise a jour de l'affichage de l'usf et libre pour être utilisé a autre chose


    vu configuration tu va devoir passer par des astuces comme ça



    au plaisir

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 58
    Points : 40
    Points
    40
    Par défaut
    Bonsoir Patrick,

    Je pense que l'on va pouvoir clore ici cette discussion.

    Grand Merci pour tout ce que tu m'auras appris, je vais le mettre en application.

    Il m'a été agréable de te rencontrer ici.

    Amicalement, et au plaisir de te croiser à nouveau.

    Yann

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Sauvegarder les paramètres des contrôles
    Par Regor dans le forum Excel
    Réponses: 2
    Dernier message: 21/11/2013, 21h28
  2. Réponses: 3
    Dernier message: 29/05/2008, 11h59
  3. Récupérer les ropriétés des contrôles dynamiques
    Par soso78 dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 21/03/2007, 20h43
  4. Cacher les paramètres des liens
    Par DarkWark dans le forum Struts 1
    Réponses: 8
    Dernier message: 31/01/2007, 18h06
  5. Lister les paramètres des procédures d'un schéma
    Par raoulbranche dans le forum Oracle
    Réponses: 4
    Dernier message: 20/09/2006, 12h27

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