Suite mutipage

bonjour a tous et toutes

pour faire suite a l'excellente réponse de Gélinotte https://forum.excel-pratique.com/excel/probleme-avec-mutipage-t84867.html

y a t'il une solution pour raccourcir le code des listbox du mulitipage car il y a 8 en tout et chacune se charge très bien des données qui sont sur C: le souci est que le clic sur une ligne l'envoie très bien dans les textbox adéquates, c'est ce clic qui est multiplier d'autant de listbox, est ce l'on peux raccourcir de code, voici le code pour 3 listbox mais il y a 8 pour l'instant et peut etre plus a fur et mesure

Private Sub ListBox1_Click()
      With ListBox1
      'charger les textbox au clic sur une ligne du textbox

       TextBox1 = .List(.ListIndex, 0) 'règlage des textbox de réception
       TextBox2 = .List(.ListIndex, 1)
        TextBox3 = .List(.ListIndex, 2)
        TextBox4 = .List(.ListIndex, 3)
       'TextBox5 = .List(.ListIndex, 4)

      End With

    End Sub
 Private Sub ListBox2_Click()
      With ListBox1
      'charger les textbox au clic sur une ligne du textbox

       TextBox1 = .List(.ListIndex, 0) 'règlage des textbox de réception
       TextBox2 = .List(.ListIndex, 1)
        TextBox3 = .List(.ListIndex, 2)
        TextBox4 = .List(.ListIndex, 3)
       'TextBox5 = .List(.ListIndex, 4)

      End With

    End Sub
   Private Sub ListBox3_Click()
      With ListBox1
      'charger les textbox au clic sur une ligne du textbox

        TextBox1 = .List(.ListIndex, 0) 'règlage des textbox de réception
       TextBox2 = .List(.ListIndex, 1)
        TextBox3 = .List(.ListIndex, 2)
        TextBox4 = .List(.ListIndex, 3)
       'TextBox5 = .List(.ListIndex, 4)

      End With

    End Sub

Bonjour,

Je ne sais pas faire plus court ... une proposition :

Public Z As Byte  ' à placer tout au haut de la fenêtre
Private Sub ListBox1_Click()
    Call LesListBox(1)
End Sub

Private Sub ListBox2_Click()
    Call LesListBox(2)
End Sub
''''''''''' il reste à ajouter les autres Listbox

Sub LesListBox(Z as byte)
Dim Y As Byte
With Me.Controls("ListBox" & Z)
    For Y = 1 To 8    ' ajuster avec le nombre de Textbox
        Me.Controls("TextBox" & Y) = .List(.ListIndex, Y - 1)
    Next Y
End With  

Gelinotte

bonsoir Gélinotte

Merci car ce que tu as fait fonctionne très bien sur le classeur test, mais pas sur le bon car tout les contrôles sont nommé donc cette ligne bug

 Me.Controls("TextBox" & Y) = .List(.ListIndex, Y - 1)

ca me donne une erreur d'objet spécifié introuvable j'ai 5 textbox de réception j'ai mis 5 a for i et c'est pareil

Bonjour,

C'est la difficulté de travailler sur des exemples qui ne reflètent pas la réalité.

Peux-tu soumettre un fichier anonymisé comportant la bonne nomenclature ?

Gelinotte

bonsoir Gélinotte

merci

voici un classeur que tu connais puisque c'est toi qui l'as mis dans l'autre post

le tout est zippé et se met dans D: test il faut mettre la copie sur le bureau pour les test où du moins l'ouvrir et l'extraire du dossier

8articles.zip (40.14 Ko)

Bonjour,

Je n'ai modifié que la macro "LesListBox" du Userform.

À voir si ça convient ....

Gelinotte

Bonjour Gélinotte

merci beaucoup ça me convient comme cela mais je testerai plus tout a l'heure

c'est pareil pour les classeur sur d: ils sont appelelé via

Set Wb = Workbooks.Open("D:\Test\LB_" & X & ".xlsx")
Set Wb = Workbooks("LB_" & X & ".xlsx")
Set Ws = Worksheets(1)

c'est la même chose qu'avec les listbox LB_1 ; LB_2 etc... c'est très impersonnel, ce serait plus compréhensif si chaque feuille a un nom

ce classeur que je fais n'est pas pour moi et c'est un copie du mien que je fais, mais sans listview qui pose problème sur beaucoup de machines

encore merci

bonjour a tous et toutes

gélinotte pour ce qui est des textbox c'est bon j'ai modifier le code et ca fonctionne

reste le nom des classeurs

voila ce que j'ai fait pour les textbox

With USF_articles("ListBox" & Z)
       TBnum = .List(.ListIndex, 0)
       TBarticles = .List(.ListIndex, 1)
       TBpu = .List(.ListIndex, 3)
       TBunité = .List(.ListIndex, 2)
    End With

End Sub

Bonjour,

Pour le nom des classeurs, j'ai une recette où le nombre de classeurs doit correspondre au nombre de Listbox.

Pour l'instant, je cherche à gérer les erreurs si le nombre de classeurs (présent dans le dossier) est moins grand ou plus grand que le nombre de Listbox.

Gelinotte

bonsoir Gélinotte

tu peux mettre ta recette a exécution car ce sera toujours le même nombre de listbox que de classeurs amoins que tu ai une solution autre car chaque listbox n'auras pas plus de 5 colonnes

et pas plus de 10 listbox et classeurs

Bonjour,

Bon, voici ce qui semble fonctionner ...

Lis le nombre de Listbox dans le Userform ... donc le nombre peut varier selon le projet.

Décompte les nombres de fichiers qui sont ouvert à tour de rôle.

Les boucles s'arrêtent sous deux conditions possibles.

1- Le nombre de fichiers est plus grand que le nombre de Listbox : Si le nombre de Listbox est atteint. La boucle s'arrête et les autres fichiers sont ignorés.

2- Le nombre de fichiers est plus petit que le nombre de Listbox : Si le nombre de fichier est atteint. La boucle s'arrête et les autres Listbox restent vides.

Note : les fichiers lus portent l'extension .xlsx

Le code n'est pas nécessairement optimisé et les variables déclarées n'ont pas toutes été validées si elles sont encore utiles.

La fatigue me dicte de me reposer

Gelinotte

Bonjour Gélinotte

très bien ton dernier classeur et réussi parfaitement a le transposer sujet clos

Rechercher des sujets similaires à "suite mutipage"