XL 2019 Peupler une listbox à partir de plusieurs feuilles ayant un nom spécifique.

WG95

XLDnaute Nouveau
Bonjour,

Je me permets de venir demander de l’aide car je bloque complètement sur un code.
D’habitude j’arrive à me dépatouiller en fouillant les forums mais la c’est visiblement trop complexe pour un débutant comme moi.

Voilà l’idée :

J’ai un classeur regroupant plusieurs onglets :
- des onglets « ville »

-des onglets « quartier » commençant tous par « Q_ »

Le nombre de ville et de quartier va varier avec le temps d’où l’idée de faire une nomenclature avec le nom de l’onglet.


Chaque onglet quartier comporte la même structure de tableau allant de « A7 :AA » jusqu’à la dernière ligne. (A7 est la ligne d’entête du tableau)

Des informations de synthèses remontent dans les onglets villes affiliées aux quartier.

J’ai un onglet de synthèse appelé « INTERFACE » qui regroupe les informations de synthèse de toutes les villes.
Je souhaiterais faire une listbox dans l’onglet « INTERFACE » regroupant tous les tableaux de quartier (onglet commençant par Q_ avec la possibilité par la suite de le trier (ce qui me semble moins dur) par commerciaux et par d’autre point d’intérêt (dossier à suivre, date de rappel etc…) et si possible modifier les données des tableaux quartier à partir de la listbox et d’un UserForm dédié.

J’ai tenté trois choses :
1) Peupler directement la listbox avec des fonctions comme

For Each f In Worksheets If f.Name Like "Q*" Then

Mais visiblement mon code ne fonctionne pas.

2) Peupler la listbox avec tous le range "A7:AA" & f.[a65000].End(xlUp).Row de tous les onglets du dossier.

Ca fut un echec.


3) Créer un tableau de synthèse puis peupler la listbox avec (ce qui m’arrangerait moins car je souhaiterais également pouvoir modifier les données des tableaux quartier à partir de la listbox et d’un UserForm dédié) mais si c’est la seule méthode alors je m’y résous… Cela dit je n’arrive pas nom plus avec cette méthode…




Visiblement c’est la recherche des sheets en fonction de leurs noms qui pose problème mais également l’alimentation ListBox1.AddItem que je n’arrive pas à bien agencé dans le code.


Si quelqu’un à un idée, en remerciant par avance ceux qui prendrons de leur temps pour m’aider.

Même si je n’obtiens pas de réponse, un grand merci au forum pour toute l’aide qu’il m’a fourni jusqu’alors.
 

WG95

XLDnaute Nouveau
Bonjour,

Merci pour ton intérêt et ton temps.

Ci-joint le fichier.

Les tests de macro se trouve dans l'onglet INTERFACE.
l'onglet Synthèse devait servir pour la solution 3 évoquée ci-dessus.
Les onglets "base" servent à la création des villes et quartiers.
 

Pièces jointes

  • Test macro architecture listbox.xlsm
    170.7 KB · Affichages: 7

patoq

XLDnaute Occasionnel
Salut WG95, le forum

J'ai viré toutes les macros et remplacé l'initialisation de la listbox.
J'ai l'impression que ça marche, teste et dit moi.
 

Pièces jointes

  • Test macro architecture listbox.xlsm
    174.5 KB · Affichages: 18

WG95

XLDnaute Nouveau
Bonjour,

Merci encore pour ton temps.

Ca me mets "Erreur d'éxecution '380': Valeur de propriété incorrecte".
Pourtant la première ligne s'ajoute à la listbox : " a , Beauchamp , gare "

Par ailleurs, pourrais tu m'expliquer le code " .List(j, 0) = (a(i, 1)) " s'il te plait ? Notamment pourquoi s'arrête t il à " .List(j, 10) = (a(i, 11))"

Merci d'avance.
 
Dernière édition:

WG95

XLDnaute Nouveau
Ci dessous le code actuel
VB:
Private Sub UserForm_Initialize()
  Dim ws As Worksheet
  Dim i As Long
  Dim j As Long
  Dim a As Long
  ListBox1.ColumnWidths = "20;50;80;80;50;50;50;50;30;30;80;0;0;0;0;0;0;50;0;0;50;0;0;0;0;50;0;0;0;0;0;0;0;0;0;0"
  ListBox1.ColumnCount = 27
 
  ListBox1.Clear
 
  j = 0
  For Each ws In Worksheets
    Select Case Left(ws.Name, 1)
    Case Is <> "Q"
    Case Else
        a = ws.Range("A7:AA" & ws.Cells(ws.Rows.Count, "A").End(xlUp).Row)
      With ListBox1
        For i = 1 To UBound(a)
          .AddItem
          .List(j, 0) = (a(i, 1))
          .List(j, 1) = (a(i, 2))
          .List(j, 2) = (a(i, 3))
          .List(j, 3) = (a(i, 4))
          .List(j, 4) = (a(i, 5))
          .List(j, 5) = (a(i, 6))
          .List(j, 6) = (a(i, 7))
          .List(j, 7) = (a(i, 8))
          .List(j, 8) = (a(i, 9))
          .List(j, 9) = (a(i, 10))
          .List(j, 10) = (a(i, 11))
          j = j + 1
        Next i
    End With
    End Select
  Next ws
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 943
Membres
101 849
dernier inscrit
florentMIG