1. Ce site utilise des "témoins de connexion" (cookies) conformes aux textes de l'Union Européenne. Continuer à naviguer sur nos pages vaut acceptation de notre règlement en la matière. En savoir plus.

XL 2007 Remplissage d'une Listbox et format

Discussion dans 'Forum Excel' démarrée par Calvus, 11 Janvier 2017.

  1. Calvus

    Calvus XLDnaute Accro

    Inscrit depuis le :
    27 Octobre 2008
    Messages :
    1527
    "J'aime" reçus :
    99
    Habite à:
    Antibes
    Utilise:
    Excel 2007 (PC)
    Bonjour le forum,

    Dans le classeur joint, j'ai 2 Userforms.
    Ils sont identiques, mis à part la seconde partie du code.

    Je remplis une Listbox en fonction d'une Combobox.

    Le Userform1 utilise la méthode AddItem
    Le Userform utilise la méthode List.

    1/ Dans le Userform2, je n'ai que des résultats partiels, à savoir que toutes les lignes ne sont pas incrémentées, et qu'il me manque une colonne.
    J'aimerais comprendre pourquoi.
    Mon but est de comprendre les méthodes.

    2/ Pourquoi la propriété Me.ListBox1.ColumnWidths n'accepte que 2 valeurs, alors qu'il y a 4 colonnes ?

    Et je reviendrai dans cette discussion sur d'autres points ,car j'ai encore beaucoup de questions concernant ce projet.

    Merci de vos réponses.
     

    Pièces jointes:

  2. Lone-wolf

    Lone-wolf XLDnaute Barbatruc

    Inscrit depuis le :
    25 Mars 2010
    Messages :
    4771
    "J'aime" reçus :
    319
    Sexe :
    Masculin
    Travail/Loisirs :
    SE/Programmation (VBA Excel)
    Habite à:
    Ouest-Suisse
    Page d'accueil :
    Utilise:
    Excel 2013 (PC)
    Bonjour mon cher Calvus :)

    Pour la question 1: utilise RowSource pour avoir la même mise en forme de la feuille.
    ListBox1.RowSource = "Feuil1!$A$2:$M$65000"

    Pour la question 2: la réponse en image, et il faut mettre des ; et non des ,
    listbox.gif

    En PJ un exemple d'adaptation des colonnes de la listbox.
     

    Pièces jointes:

    Dernière édition: 11 Janvier 2017
  3. Marcel32

    Marcel32 XLDnaute Impliqué

    Inscrit depuis le :
    22 Mai 2008
    Messages :
    918
    "J'aime" reçus :
    24
    Utilise:
    Excel 2013 (PC)
    Bonjour,

    Je ne sais pas pourquoi il te manque une colonne, mais concernant la liste dite "partielle" j'ai bien l'impression qu'à chaque fois que tu utilises Listbox1.List= ça réinitialise la liste donc au final tu n'as que la dernière ligne correspondant à ta recherche. ;)
     
  4. Calvus

    Calvus XLDnaute Accro

    Inscrit depuis le :
    27 Octobre 2008
    Messages :
    1527
    "J'aime" reçus :
    99
    Habite à:
    Antibes
    Utilise:
    Excel 2007 (PC)
    Bonjour Lonewolf,:):)

    Ok, ça c'est cool !
    Mais, je pense que cette méthode ne permet pas de choisir les colonnes à afficher.
    Or je ne souhaites pas afficher toutes les colonnes.

    Super pour la 2ème question. Merci !
     
  5. Calvus

    Calvus XLDnaute Accro

    Inscrit depuis le :
    27 Octobre 2008
    Messages :
    1527
    "J'aime" reçus :
    99
    Habite à:
    Antibes
    Utilise:
    Excel 2007 (PC)
    Bonjour Marcel,

    C'est ce que j'avais déduit, mais je n'ai pas su corriger le problème.
    Comment fait on dans ce cas ?
    Merci
     
  6. laetitia90

    laetitia90 XLDnaute Barbatruc

    Inscrit depuis le :
    20 Juin 2010
    Messages :
    2211
    "J'aime" reçus :
    257
    Sexe :
    Féminin
    Utilise:
    Excel 2007 (PC)
    bonjour tous:):):):)
    en passant par un tablo peut être

    Code (Visual Basic):
    Option Explicit
    Dim m As Object, t(), t1(), i As Long, x As Long
    Private Sub UserForm_Initialize()
      Set m = CreateObject("Scripting.Dictionary")
      t = Range("A2:f" & Range("A" & Rows.Count).End(3).Row)
      For i = 1 To UBound(t)
      If t(i, 1) <> "" Then m(t(i, 1)) = ""
      Next i
      ComboBox1.List = m.keys
      ListBox1.ColumnCount = 4
    End Sub

    Private Sub ComboBox1_change()
    ListBox1.Clear: x = 0
    ReDim t1(1 To UBound(t), 1 To 6)
    For i = 1 To UBound(t)
      If t(i, 1) = ComboBox1.Text Then
      x = x + 1
      t1(x, 1) = t(i, 1): t1(x, 2) = t(i, 2): t1(x, 3) = t(i, 3): t1(x, 4) = t(i, 6)
      End If
      Next
      ListBox1.List = t1
    End Sub
     
  7. Si...

    Si... XLDnaute Barbatruc

    Inscrit depuis le :
    7 Octobre 2010
    Messages :
    2360
    "J'aime" reçus :
    344
    Salut
    Læti :D, pour simplifier, j’aime bien mélanger les tableaux mais Largo risque encore d’être Largué :oops:.

    Code (Visual Basic):
    Option Explicit
    Dim D, C As Range
    Private Sub UserForm_Initialize()
      Set D = CreateObject("Scripting.Dictionary")
      For Each C In [Os[Date]]: D(C.Value) = "": Next
      ComboBox1.List = D.keys
    End Sub

    Private Sub ComboBox1_change()
      Dim t(), i As Long
      ReDim t([Os].Rows.Count, 4)
      For Each C In [Os[Date]]
        If C = CDate(ComboBox1) Then _
          t(i, 0) = C: t(i, 1) = C(1, 2): t(i, 2) = C(1, 3): t(i, 3) = C(1, 6): i = i + 1:
      Next
      ListBox1.List = t
    End Sub
    Remarques : Calvus, le Dico est en lui-même très rapide ; quand on initialise avec .List, la liste commence par être vidée automatiquement
     

    Pièces jointes:

  8. Calvus

    Calvus XLDnaute Accro

    Inscrit depuis le :
    27 Octobre 2008
    Messages :
    1527
    "J'aime" reçus :
    99
    Habite à:
    Antibes
    Utilise:
    Excel 2007 (PC)
    Bonsoir,

    Laeti et Si, merci de vos réponses.
    Je suis sûr que vous travaillez pour Sanofi tous les deux.
    Vous pensez donc, comme je l'avais lu, qu'il vaut mieux passer par List que par AddItem....?

    Si, comment remplacer le nom du tableau par une variable ? Du moins lui donner un nom provisoire.

    Par exemple :
    g = OS
    For Each c In [g[Date]]

    Au lieu de
    For Each c In [OS[Date]]

    Pour l'instant, ça génère une erreur évidemment.
     
  9. Lone-wolf

    Lone-wolf XLDnaute Barbatruc

    Inscrit depuis le :
    25 Mars 2010
    Messages :
    4771
    "J'aime" reçus :
    319
    Sexe :
    Masculin
    Travail/Loisirs :
    SE/Programmation (VBA Excel)
    Habite à:
    Ouest-Suisse
    Page d'accueil :
    Utilise:
    Excel 2013 (PC)
    Bonsoir tout le monde. :)

    @ Calvus: entre c et c......(comme l'avais dit un jour J-C(Jean-Claude)): Mais où est donc passer l'OS??? :rolleyes::D
     
  10. Calvus

    Calvus XLDnaute Accro

    Inscrit depuis le :
    27 Octobre 2008
    Messages :
    1527
    "J'aime" reçus :
    99
    Habite à:
    Antibes
    Utilise:
    Excel 2007 (PC)
    Re,

    Que veux tu dire ?
     
  11. Lone-wolf

    Lone-wolf XLDnaute Barbatruc

    Inscrit depuis le :
    25 Mars 2010
    Messages :
    4771
    "J'aime" reçus :
    319
    Sexe :
    Masculin
    Travail/Loisirs :
    SE/Programmation (VBA Excel)
    Habite à:
    Ouest-Suisse
    Page d'accueil :
    Utilise:
    Excel 2013 (PC)
    Rien, c'est juste un jeu de mots. ;)
     
  12. Calvus

    Calvus XLDnaute Accro

    Inscrit depuis le :
    27 Octobre 2008
    Messages :
    1527
    "J'aime" reçus :
    99
    Habite à:
    Antibes
    Utilise:
    Excel 2007 (PC)
    Hey !!! Donne moi la solution au lieu de faire des jeux de mots foireux ! :D:D:D
    A+ ;):)
     
  13. Lone-wolf

    Lone-wolf XLDnaute Barbatruc

    Inscrit depuis le :
    25 Mars 2010
    Messages :
    4771
    "J'aime" reçus :
    319
    Sexe :
    Masculin
    Travail/Loisirs :
    SE/Programmation (VBA Excel)
    Habite à:
    Ouest-Suisse
    Page d'accueil :
    Utilise:
    Excel 2013 (PC)
    Re

    Je ne sais pas si c'est correct

    Code (Visual Basic):

    Option Explicit
    Dim Molaire As Range, MonChienChien As Range, D As Object

    Private Sub UserForm_Initialize()
      Set D = CreateObject("Scripting.Dictionary")
      Set MonChienChien = [Os[Date]]
      For Each Molaire In MonChienChien: D(Format(Molaire.Value, "dd.mmm")) = "": Next
      ComboBox1.List = D.keys
    End Sub
     
    EDIT: Test éffectué sans erreurs.
     
    Dernière édition: 11 Janvier 2017
  14. Calvus

    Calvus XLDnaute Accro

    Inscrit depuis le :
    27 Octobre 2008
    Messages :
    1527
    "J'aime" reçus :
    99
    Habite à:
    Antibes
    Utilise:
    Excel 2007 (PC)
    Re,

    Lonewolf, ton code fonctionne en effet, mais pas dans mon cas.
    C'est dans la 2nd partie que je voudrais pouvoir changer de nom.
    En fait ici :
    Code (Visual Basic):
    Private Sub ComboBox1_change()
      Dim t(), i As Long
      ReDim t([Données].Rows.Count, 4)
    g = Données
    For Each c In [g[Date]]
        If c = CDate(ComboBox1) Then _
           t(i, 0) = c: t(i, 1) = c(1, 2): t(i, 2) = c(1, 3): t(i, 3) = c(1, 6): i = i + 1:
      Next
      ListBox1.List = t
      End Sub
    Mon tableau s'appelle Données et je voudrais pouvoir changer l'initialisation du Combobox en fonction de paramètres de OptionButtons.
    L'idée est if OptionButton1 then g=xx
    if OptionButton2 then g=yy
    Etc..

    Et dans ce cas, je n'ai pas réussi à adapter ton code.
    Merci
     
  15. Lone-wolf

    Lone-wolf XLDnaute Barbatruc

    Inscrit depuis le :
    25 Mars 2010
    Messages :
    4771
    "J'aime" reçus :
    319
    Sexe :
    Masculin
    Travail/Loisirs :
    SE/Programmation (VBA Excel)
    Habite à:
    Ouest-Suisse
    Page d'accueil :
    Utilise:
    Excel 2013 (PC)
    Sacré Calvus :cool:

    Et pourtant tu aurais pu suivre mon exemple.

    1) Option Explicit
    2) Déclaration des variables

    Dans ton cas,
    Dim g As Range

    Set g = [Données[Date]]
     
  16. Calvus

    Calvus XLDnaute Accro

    Inscrit depuis le :
    27 Octobre 2008
    Messages :
    1527
    "J'aime" reçus :
    99
    Habite à:
    Antibes
    Utilise:
    Excel 2007 (PC)
    Oui en effet, erreur d'inattention et encore trop débutant.
    Je vais voir si ça marche avec le reste.
    Merci
     
  17. Lone-wolf

    Lone-wolf XLDnaute Barbatruc

    Inscrit depuis le :
    25 Mars 2010
    Messages :
    4771
    "J'aime" reçus :
    319
    Sexe :
    Masculin
    Travail/Loisirs :
    SE/Programmation (VBA Excel)
    Habite à:
    Ouest-Suisse
    Page d'accueil :
    Utilise:
    Excel 2013 (PC)
    Re Calvus

    Pour le nom du tableau, mieux vaut éviter les accents; sinon voici comment j'ai modifié.

    Code (Visual Basic):

    Option Explicit
    Dim C As Range, g As Range, D As Object, CB As Control

    Private Sub UserForm_Initialize()
        Set D = CreateObject("Scripting.Dictionary")
        Set g = [Donnees[Date]]
        Set CB = ComboBox1
        For Each C In g: D(Format(C.Value, "dd.mmm")) = "": Next C
        CB.List = D.keys
    End Sub

    Private Sub ComboBox1_change()
      If ComboBox1.Text <> "" Then
            Call Transmet_Donnees
      Else
             Exit Sub
      End If
    End Sub

    Private Sub Transmet_Donnees()
    Dim t(), i As Long

        ReDim t([Os].Rows.Count, 4)
        Set g = [Donnees[Date]]
        Set CB = ComboBox1

        For Each C In g
            If C = CDate(CB) Then _
               t(i, 0) = C: t(i, 1) = C(1, 2): t(i, 2) = C(1, 3): t(i, 3) = C(1, 6): i = i + 1:
        Next C
        ListBox1.List = t
    End Sub
     
     

Partager cette page