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 :

Définir une ListBox avant d'afficher l'Userform dans lequel elle est contenu? [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Responsable QSE
    Inscrit en
    Novembre 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable QSE

    Informations forums :
    Inscription : Novembre 2017
    Messages : 14
    Points : 7
    Points
    7
    Par défaut Définir une ListBox avant d'afficher l'Userform dans lequel elle est contenu?
    Bonjour à tous !

    Dites moi, j'ai besoin de vos lumières.

    Actuellement, j'ai modifié le ruban pour afficher une userform avec la liste des salariés dans une listbox.

    Aujourd'hui, je clique sur le ruban, il ouvre l'userform et dans l'initialisation il rempli la listbox. L'appuie sur le bouton Ok fait tout fermer.
    Je voudrais tout centraliser dans des Modules pour ne pas avoir de macro dans les userforms (histoire de m'y retrouver).

    Là où je bloque, c'est que je voudrais remplir une listbox puis ouvrir la Userform: Sauf que je rempli une listbox qui n'existe pas, ou sinon je n'arrive pas à initialiser la listbox par le code de la macro. Quelqu'un aurait une piste?

    Contenu de la macro du ruban:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Sub GpSalaries_ControleFiches(ByVal control As IRibbonControl)
     
        ControleFichesExistantes
     
    End Sub
    Contenu de la macro appelée par le ruban:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub ControleFichesExistantes()
     
         Dim Lb_Salaries As MSForms.ListBox
     
         Call GenererListeSalaries(Lb_Salaries)
         Set Lb_Salaries = Lb_ListeSalaries
     
         Uf_ControleSalaries.Show
     
    End Sub
    Et mon code pour générer la liste:
    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
    34
     
    Sub GenererListeSalaries(ByVal lb As MSForms.ListBox)
     
        Dim Ws As Excel.Worksheet
        Dim ListeSalaries()
        Dim Temporaire As String
        Dim i As Integer, j As Integer
     
        i = 1
        For Each Ws In ThisWorkbook.Worksheets
            If (Left(Ws.Name, 3) = "FSE") Then
                ReDim Preserve ListeSalaries(i)
                ListeSalaries(i) = Mid(Ws.Name, 7)
                i = i + 1
            End If
        Next
     
        For i = 1 To UBound(ListeSalaries) - 1                  ' Du premier nom à l'avant-dernier
            For j = i + 1 To UBound(ListeSalaries)              ' Du 2eme au dernier
                If ListeSalaries(i) > ListeSalaries(j) Then
                    Temporaire = ListeSalaries(j)
                    ListeSalaries(j) = ListeSalaries(i)
                    ListeSalaries(i) = Temporaire
                End If
            Next j
        Next i
     
        lb.Clear
     
        For i = 1 To UBound(ListeSalaries)
            lb.AddItem ListeSalaries(i)
        Next i
     
    End Sub
    J'ai un beug dans cette dernière, variable objet non définie sur lb.clear.
    A noter que la listbox de mon userform s'appelle "Lb_ListeSalaries".

    Merci par avance !

    Vincent

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Responsable QSE
    Inscrit en
    Novembre 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable QSE

    Informations forums :
    Inscription : Novembre 2017
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Bonjour !

    Uniquement le fait de tout mettre dans un module Rien d'autre: Toutes les actions venant du ruban vont vers une macro.

    Concernant le tri, je vais me pencher sur la question ! Mais en soit, je ne touche à VBA que depuis 2 semaines... Alors je suis un peu étudiant

    Merci pour ta réponse !

    Vincent

  3. #3
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Points : 2 156
    Points
    2 156
    Par défaut
    Avec un tri alphabétique rapide (Quick-Sort). Le tri Bubble-Sort est très lent: le temps est proportionnel à n*n.

    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
     
    Option Compare Text
    Sub affiche()
      Set f = Sheets("Feuil1")
      temp = Application.Transpose(Range(f.[a2], f.[a2].End(xlDown)).Value)
      Tri temp, LBound(temp), UBound(temp)
      UserForm1.ListBox1.List = temp
      UserForm1.Show
    End Sub
     
    Sub Tri(a, gauc, droi) ' Quick sort
      ref = a((gauc + droi) \ 2)
      g = gauc: d = droi
      Do
        Do While a(g) < ref: g = g + 1: Loop
        Do While ref < a(d): d = d - 1: Loop
        If g <= d Then
           temp = a(g): a(g) = a(d): a(d) = temp
           g = g + 1: d = d - 1
        End If
      Loop While g <= d
      If g < droi Then Call Tri(a, g, droi)
      If gauc < d Then Call Tri(a, gauc, d)
    End Sub
    Boisgontier
    http://boisgontierjacques.free.fr
    Fichiers attachés Fichiers attachés

  4. #4
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    Dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim Lb_Salaries As MSForms.ListBox
     
         Call GenererListeSalaries(Lb_Salaries)
         Set Lb_Salaries = Lb_ListeSalaries
    tu n'aurais pas au moins comme la vague impression que Lb_salaries n'étant initialisée qu'après, cette variable est Nothing lorsque tu la passes en paramètre à la procédure GenererListeSalaries ?

    Par ailleurs : lorsque l'on invoque un objet situé ailleurs (sur un userform en l'occurrence) il est bien évidemment indispensable d'en préciser le conteneur (ton userform) également !
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Responsable QSE
    Inscrit en
    Novembre 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable QSE

    Informations forums :
    Inscription : Novembre 2017
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Bonsoir !

    Merci Jacques pour ton nouvel envoi. Je vais étudier ça de près !

    Unparia, oui, j'avoue, j'avais inversé pour voir si, peut être, ça marcherai Quel abruti...

    J'ai 2 userform qui seront utilisé pour plusieurs choses. En passant les infos par macro, ça me permet de modifier le titre, etc. avant de l'afficher et, surtout, sur une page qui regroupe les même fonctions. Je trouve cela plus lisible.

    Vincent

  6. #6
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Points : 2 156
    Points
    2 156
    Par défaut
    1- Un formulaire peut être exporté et importé. Quand le code est inclus dans le formulaire, celui ci est également exporté et importé avec le formulaire.
    2- Il faudra bien du code dans le formulaire pour gérer les évènements endogènes du formulaire (click sur la ListBox e.g.)

    Boisgontier
    http://boisgontierjacques.free.fr

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 13/08/2009, 09h31
  2. [XL-2003] affichage de donnée dans une listbox ou textbox d'un userform
    Par revemane dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/05/2009, 20h13
  3. [Toutes versions] Extraire une valeur d'une ListBox pour l'afficher dans une cellule
    Par stid59 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/04/2009, 22h05
  4. Réponses: 3
    Dernier message: 30/08/2007, 16h23
  5. Réponses: 5
    Dernier message: 13/07/2007, 15h13

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