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 :

ListBox : Initialize, Hide, Unload


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 46
    Par défaut ListBox : Initialize, Hide, Unload
    Bonjour tout le monde !

    J'ai un problème avec une userform. La procédure qui suit ne fonctionne pas : elle ne génère pas d'erreur mais pas de résultat non plus... Pour avoir fait différents tests, je sais que "cel.CurrentRegion" fait référence à la bonne plage et "cel.Rows.CurrentRegion.Count - 1" renvoit le bon chiffre. Mais la procédure n'affiche même pas le résultat de la MsgBox. Je crois que le problème vient de l'évènement "Initialize"; peut-être que je l'utilise mal ? Je veux que ces instructions s'effectuent lorsque l'on ouvre la boite de dialogue avec "UserForm3.Show".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub UserForm_Initialize()
        'A l'ouverture de la boite de dialogue on réinitialize la zone de liste
        Dim i As Integer
        Dim cel As Range
        Set cel = ThisWorkbook.Worksheets("Min & Max").Range("B183")
        MsgBox cel.CurrentRegion.Rows.Count - 1
        For i = 0 To cel.Rows.CurrentRegion.Count - 1
        UserForm3.ListBox1.Clear
        UserForm3.ListBox1.AddItem cel.Offset(i, 0).Value
        Next i
    End Sub
    J'ai également une autre petite question à propos de la différence entre Hide et Unload : ces deux évènements ferment tous les deux la boite de dialogue mais Hide garde en mémoire les infos associées comme les valeurs qui remplissaient la listbox et on les retrouvera lors de la prochaine ouverture, contrairement à Unload qui ne garde rien en mémoire ? Est-ce bien cela ? Je voudrais être sur d'avoir bien compris...

  2. #2
    Membre expérimenté
    Inscrit en
    Février 2008
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 208
    Par défaut
    Bonjour

    Essaye ceci (Activate plutôt qu'Initialize, car tu pourras lancer plusieurs fois la procédure d'initialisation de ta UserForm) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub UserForm_Activate()
        'A l'ouverture de la boite de dialogue on réinitialize la zone de liste
        Dim i As Integer
        Dim cel As Range
        Set cel = ThisWorkbook.Worksheets("Min & Max").Range("B183")
        MsgBox cel.CurrentRegion.Rows.Count - 1
        UserForm3.ListBox1.Clear
        For i = 0 To cel.Rows.CurrentRegion.Count - 1
            UserForm3.ListBox1.AddItem cel.Offset(i, 0).Value
        Next i
    End Sub
    Ton "UserForm3.ListBox1.Clear" était mal placé.

    Pour "Hide et Unload" tu as bien compris

    à plus

  3. #3
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 46
    Par défaut
    Si j'ai bien compris Hide garde en mémoire les valeurs de la ListBox entre deux appels de la UserForm au cours du même programme. Moi ce que je voudrais c'est qu'il les garde en mémoire entre deux lancements de programmes (et fermeture du fichier entre les deux).
    En fait ma ListBox contient des noms de fichiers à "traiter". L'utilisateur peut sélectionner celui/ceux qu'il veut traiter. Mais comme au cours des années certains fichiers peuvent être déplacés, crées ou supprimés je lui ai laissé la possibilité de modifier cette liste (tout ça dans une Userform). Evidemment je ne veux pas qu'il ait à faire cette modification à chaque fois qu'il ouvre le fichier et lance le programme.
    Je peux copier cette liste dans une feuille à la fermeture du programme et réinitialiser la listbox à l'ouverture du programme grâce à cette liste. Mais peut-être y a-t-il une solution plus simple ?

  4. #4
    Membre expérimenté
    Inscrit en
    Février 2008
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 208
    Par défaut
    Bonjour

    Voici une proposition pour tenir à jour ta liste. Plutôt que de stocker en mémoire, je stocke les données sur la feuille Min & Max à partir de B183.
    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
    Private Sub ListBox1_Click()
        If NewValeur <> "" Then Exit Sub
        x = UserForm3.ListBox1.ListIndex
        y = UserForm3.ListBox1.Value
        NewValeur = InputBox("Saisir une nouvelle valeur", "Mise à jour", y)
        If NewValeur <> "" Then
            UserForm3.ListBox1.List(x, 0) = NewValeur
            If UserForm3.ListBox1.ListCount - 1 = x Then
                UserForm3.ListBox1.AddItem ""
            End If
        End If
        NewValeur = ""
    End Sub
     
    Private Sub UserForm_Activate()
        'A l'ouverture de la boite de dialogue on réinitialize la zone de liste
        Dim i As Integer
        Dim cel As Range
        Set cel = ThisWorkbook.Worksheets("Min & Max").Range("B183")
        'MsgBox cel.CurrentRegion.Rows.Count - 1
        UserForm3.ListBox1.Clear
        For i = 0 To cel.Rows.CurrentRegion.Count
            UserForm3.ListBox1.AddItem cel.Offset(i, 0).Value
        Next i
    End Sub
     
    Private Sub UserForm_Terminate()
        'Sauvegarde des données modifiées
        Set cel = ThisWorkbook.Worksheets("Min & Max").Range("B183")
        For i = 0 To UserForm3.ListBox1.ListCount - 1
            cel.Offset(i, 0).Value = UserForm3.ListBox1.List(i, 0)
        Next i
    End Sub
    colle aussi cette partie dans un Module :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public NewValeur As String
     
    Sub test()
        UserForm3.Show
        Unload UserForm3
    End Sub
    Cette feuille (que tu peux masquer) est à intégrer à ton fichier de travail.
    Est-ce que ça répond à tes attentes ?
    à plus

  5. #5
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 46
    Par défaut
    C'est ce que j'avais fais à peu de choses près pour garder ma ListBox à jour. Et pour permettre à l'utilisateur de modifier la liste mon code est plus long mais un peu plus simple à mes yeux.
    Merci !

  6. #6
    Membre expérimenté
    Inscrit en
    Février 2008
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 208
    Par défaut
    Bonjour

    Voici une autre solution avec les données sauvegardées dans un petit fichier texte.
    La création et la mise à jour du fichier texte est réalisée par le module : http://cjoint.com/?iAoJXc6dtx
    Ensuite, pour les fichiers utilisateurs voici un exemple : http://cjoint.com/?iAoK1QSUhT
    Dans ce dernier cas, le code est plus simple puisqu'il suffit de lire le fichier texte dans le répertoire du classeur en cours. Pour la mise à jour en cours d'année tu ne distribues que le petit fichier texte actualisé.

    Si tu as beaucoup de fichiers utilisateurs, c'est peut être plus simple d'utilisation comme ceci.

    à plus

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

Discussions similaires

  1. [XL-2007] Unload un UserForm déjà en .hide
    Par YassDumb dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 05/07/2012, 14h49
  2. Hide ou Unload ?
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 18/03/2009, 11h20
  3. Me.Hide ou unload me
    Par casefayere dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/07/2008, 19h29
  4. DrawItem d'un listbox...
    Par scorpiwolf dans le forum C++Builder
    Réponses: 5
    Dernier message: 22/06/2007, 15h50
  5. [Listbox] ScrollBar Horizontal
    Par haleem dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 20/04/2005, 07h53

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