XL 2019 Userform.

RichardS

XLDnaute Junior
Bonjour à tous,
Et d'avance merci pour votre réponse que j'attends impatiemment.
Mon fichier Excel se compose d'une seule feuille "Feuil1" qui contient une liste dans la colonne A. Mon programme permet d'augmenter ou de diminuer le nombre de ligne de la liste.
J'ai créé une Userform "Usf1". Dans Usf1, j'ai une zone de liste déroulante dans laquelle je souhaite que s'affiche la liste de Feuil1.
Si j'utilise l'option "RowSource" des propriétés de la liste et que j'y mets "Feuil1!A:A", ma liste comportera toutes les lignes non remplie de la colonne de Feuil1. Pas facile à travailler.
Si par contre j'y inscrit "Feuil1!A1:A50" il n'affichera que les 50 première lignes. Ce qui peut être trop ou pas assez.
En fait je souhaite un affichage dynamique qui varie en fonction du nombre de lignes de ma liste.
Pouvez vous m'aider ?

RichardS
 

patricktoulon

XLDnaute Barbatruc
re
Magnifique job75
VB:
tablo = [OFFSET(Feuil1!$A$1,,,COUNTA(Feuil1!$A:$A))]
ListBox1.List = tablo ' TypeName(tablo)

quand tu aura un moment si tu peux expliquer OFFSET
je doute que cela soit juste pour prendre le reste comme formule matricielle et donc un tableau

bravo du coup je suis ennuyé on se sert pas d'evaluate je ne sais donc pas dans quelle ( librairies de mes astuces ) le mettre :p ;)
quoi que "[...]" est la formule abrégée de evaluate ;)
 

job75

XLDnaute Barbatruc
Pour que ListBox1.List = tablo fonctionne il faut que tablo soit un Array.

Cela ne fonctionne pas si la liste n'a qu'un élément (scalaire).

Pour qu'il y en ait au moins 2 utiliser 2 colonnes, voyez ce fichier (2) avec :
VB:
Private Sub UserForm_Initialize()
tablo = [OFFSET(Liste!A1,,,COUNTA(Liste!A:A),2)]
If IsArray(tablo) Then ListBox1.List = tablo
End Sub
 

Pièces jointes

  • Classeur enregistrement(2).xls
    315 KB · Affichages: 17

RichardS

XLDnaute Junior
Désolé, j'ai été contraint de m'absenter.
Je reprends et ça marche !
Merci.
ça me pose une autre question : le
ListBox1.List = tablo semble fonctionner à l'initialisation de ma Userform1. Est ce que le fait de faire UserForm1.Show repasse la fonction initialize ?
En d'autres termes, si j'affiche ma Userform1 par show, puis que je fasse un autre traitement et que j'ajoute des lignes, si je fais à nouveau userform1.show, l'affichage tiendra t-il compte de la liste mise à jour ?
 

job75

XLDnaute Barbatruc
Bonjour RichardS, patricktoulon,
j'ajoute des lignes, si je fais à nouveau userform1.show, l'affichage tiendra t-il compte de la liste mise à jour ?
Chez moi si par exemple j'exécute ce code dans UserForm1 :
VB:
Private Sub CommandButton1_Click()
With Sheets("Liste").[A1].CurrentRegion
    .Cells(.Rows.Count + 1, 1) = "ZZZ" 'à adapter
End With
UserForm1.Show
End Sub
j'ai le message d'erreur "Feuille déjà affichée ; affichage modal impossible".

Par contre pas de problème avec :
VB:
Private Sub CommandButton1_Click()
With Sheets("Liste").[A1].CurrentRegion
    .Cells(.Rows.Count + 1, 1) = "ZZZ" 'à adapter
End With
UserForm_Initialize 'lance la macro
End Sub
A+
 

patricktoulon

XLDnaute Barbatruc
re
VB:
Private Sub CommandButton1_Click()
Cells(Rows.Count, 1).End(xlUp).Offset(1).FormulaLocal = "=ligne()"
UserForm_Activate
End Sub

Private Sub UserForm_Activate()
ListBox1.List() = [A1].CurrentRegion.Value
End Sub

demo3.gif


cela dit en ce qui me concerne il serait plus intelligeant de faire ceci
Code:
Private Sub CommandButton1_Click()
Cells(Rows.Count, 1).End(xlUp).Offset(1).FormulaLocal = "=ligne()"
listage
End Sub

Private Sub UserForm_Activate()
listage
End Sub

Private Sub listage()
ListBox1.List() = [A1].CurrentRegion.Value
End Sub
 

Statistiques des forums

Discussions
312 492
Messages
2 088 908
Membres
103 982
dernier inscrit
krakencolas