Creation dynamique de controls

akibodo

XLDnaute Junior
Bonjour à tous,

Je cherche une solution pour cree dynamiquement des onglets sur un control Multipage en leur donnant le nom des feuilles du classeur.

Puis remplir chaque page du Multipage avec une Listview et mettre dans celles-ci les données qui se trouve dans les feuilles correspondantes.

Sur chaque feuilles une colonne quantité permet de mettre la quantité necessaire et donc doit être modifiable dans les Listview.

Un bouton permet de récupérer les informations, un simple copier/coller de toutes les lignes sur chaque feuilles ou la quantité et égale ou supérieure à 1 sur la feuille total qui logiquement doit aussi se trouver sur une des pages du Multipage.

Je pense que celà est possible j'ai pas tout le code sous le coude mais je met un exemple pour vous aider à comprendre.

J'ai réussi à bouclé sur toutes les feuilles, à créé dynamiquement les onglets du Multipage avec chaque page portant le nom de chaque feuilles du classeur et je bloque là. Je n'arrive pas à créé dynamiquement les listview et surtout à les remplir dynamiquement.

Est-ce que c'est trop tiré par les cheveux ?
Est-ce que je me complique trop la vie ?

Mon principal problème est du à l'évolution du classeur qui doit être le plus modulable possible, c'est à dire pouvoir ajouter des feuilles et des données et que celà soit pris en compte.

Merci pour vos conseils.
Akibodo

Edit: mise à jour pièce jointe
 

Pièces jointes

  • exemple_Aki.zip
    14.5 KB · Affichages: 105
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : Creation dynamique de controls

Bonjour akibodo,

Tout ce que je peux dire c'est que pour avoir un peu manipulé les Listview, tu vas avoir beaucoup de mal à permettre la modification de "cellules" choisies pour l'utilisateur...

Après, l'autre question est : Pourquoi refaire Excel dans un Userform quand on est déjà dans Excel ?
 

PMO2

XLDnaute Accro
Re : Creation dynamique de controls

Bonjour,

Un exemple de code pour, dans un UserForm, créer dynamiquement (à la volée)
un contrôle MultiPage avec ses Pages (dont le nombre dépend du nombre de feuilles de chaque classeur ouvert)
et un contrôle ListView comportant les données de chaque feuille (la 1ère ligne est la ligne de titres).

Marche à suivre :

1) dans un classeur contenant plusieurs feuilles renseignées, créez un UserForm1
2) dans la fenêtre de code du UserForm, copiez le code suivant

Code:
'### Nécessite les références suivantes ###
'Library MSForms
'    C:\WINDOWS\system32\FM20.DLL
'    Microsoft Forms 2.0 Object Library
'
'Library MSComctlLib
'    C:\WINDOWS\system32\MSCOMCTL.OCX
'    Contrôles communs Microsoft Windows 6.0
'##########################################

Private Sub UserForm_Initialize()
Dim WB As Workbook
Dim WS As Worksheet
Dim R As Range
Dim PGE As MSForms.Page
Dim LV As MSComctlLib.ListView
Dim cpt&
Dim var
Dim i&
Dim j&
Dim MP As MSForms.MultiPage
With Me
  .Width = 600
  .Height = 400
End With
Set MP = Me.Controls.Add("forms.Multipage.1")
With MP
  .Left = 0
  .Top = 0
  .Width = Me.Width
  .Height = Me.Height - 100   '- 100 pour laisser de la place pour les boutons éventuels
End With
MP.Pages.Clear
For Each WB In Application.Workbooks
  For Each WS In WB.Worksheets
    Set R = WS.UsedRange
    If R.Cells.Count > 1 Then   'si la feuille ne comporte qu'une cellule on ne fait pas le traitement
      var = R
      cpt& = cpt& + 1
      Set PGE = MP.Pages.Add
      PGE.Caption = WS.Name
      Set LV = PGE.Controls.Add("MsComCtlLib.ListViewCtrl.2", "ListView" & cpt&)
      With LV
        .Name = "monListView" & cpt&
        .Left = 0
        .Top = 0
        .Width = MP.Width - 12
        .Height = MP.Height - 12
        .View = lvwReport
        For i& = 1 To UBound(var, 2)
          .ColumnHeaders.Add Text:=var(1, i&), Width:=80
        Next i&
        With .ListItems
          For i& = 2 To UBound(var, 1)
            .Add Text:=var(i&, 1)
          Next i&
        End With
        For j& = 2 To UBound(var, 2)
          For i& = 2 To UBound(var, 1)
            .ListItems(i& - 1).ListSubItems.Add Text:=var(i&, j&)
          Next i&
        Next j&
      End With
    End If
  Next WS
Next WB
End Sub

3) chargez les références susnommées en faisant, dans le VBE, menu Outils/Références…
4) dans un module de code standard, copiez le code suivant

Code:
Sub Lancer_USF()
UserForm1.Show vbModeless
End Sub

Exécutez la macro Lancer_USF

Cordialement.

PMO
 

YANN-56

XLDnaute Barbatruc
Re : Creation dynamique de controls

Bonjour akibodo, tototiti, PMO2, et à ceux qui passeront par ici.

Voici un p'tit bout d'une appli, que j'ai en cours, où il y a réponse
(Je pense) à une partie de ce que tu recherches.

Le choix du chemin du Dossier "SERVICE" n'est là
que pour une idée ultérieure d'utilisation en réseau.

Tu regardes, et tu me dis.
J'espère que tu pourras y pomper qq trucs.

Amicalement

Yann
 

Pièces jointes

  • LIST_V.zip
    41.9 KB · Affichages: 118
  • SERVICE.zip
    46.2 KB · Affichages: 106
  • SERVICE.zip
    46.2 KB · Affichages: 115
  • SERVICE.zip
    46.2 KB · Affichages: 118

akibodo

XLDnaute Junior
Re : Creation dynamique de controls

Bonjour à tous,

merci pour ces réponses, je m'y suis intéressé de près et il est vrai que cela reste un peu tirer par les cheveux malgré tous.

Mon idée principale été de ne pas à avoir à revenir dessus.

Au final j'ai trouver une solution beaucoup moins compliqué qui fonctionne très bien.

Je la posterait mais il faut que je modifie les données avant.

merci encore pour vos réponses,

Aki
 

Discussions similaires

Réponses
7
Affichages
284
Réponses
8
Affichages
431

Statistiques des forums

Discussions
312 506
Messages
2 089 121
Membres
104 038
dernier inscrit
Helpme59