Microsoft 365 ListBox Multipage

eric72

XLDnaute Accro
Bonjour à tous,
je fais un essai sur un userform "multipage", ma listbox de l'onglet "pot" s'alimente bien mais j'ai un souci sur la listbox de l'onglet "plaque", j'ai tout essayé en vain.
Mais je suis bien sur que l'un d'entre vous va trouver le bug en 15 secondes.
Merci pour votre aide
Eric
 

Pièces jointes

  • Fiche Produit test.xlsm
    268.5 KB · Affichages: 10

patricktoulon

XLDnaute Barbatruc
Bonjour
oui c'est pas mal @ChTi160 quand Tableau structuré les utiliser
alors oui mais on est pas obligé d'utiliser le range (....).listobject
range(nom du listobject tout court).value suffit!!!
apres malheureusement tu faille une erreur de conception

l'erreur ou est elle ?
et bien tu fait un test if not range(....).listobject is nothing then .......
et bien tiens imaginons un TS qui n'existe pas
pour tester on va changer le le nom

if not range("tartampion").listobject is nothing then .......

on est bien d'accord que le TS "tartampion n'existe pas
que va t il se passer d’après toi mon cher @ChTi160

et bien c'est simple le range("tartampion") n'existe pas le (.listobject) encore moins donc !!!!!
je te le donne dans le mille ; le code va PLANTER

donc les seules solutions que nous avons sont :
lister dans une boucles les names pour chopper le TS
gestion d'erreur -->next

pour le coup fort de toutes ces constatations c'est simple on prend l'option de facilité
donc gestion d'erreur et range tout court
VB:
Sub Alimenter_ListPot()
    On Error Resume Next
    Me.LstPot.Clear
    Me.LstPot.List = Range("TbPot").Value
End Sub
Sub Alimenter_ListPlaque()
    On Error Resume Next
    Me.LstPlaque.Clear
    Me.LstPlaque.List = Range("TbPlaque").Value
End Sub

voilà c’était la leçon du jour
 

eric72

XLDnaute Accro
ReBonjour Ch Ti160,

J'ai encore une interrogation, dans mon userform onglet "Comm.Centr, lorsque je le lance j'aimerais que le prix au Kg se mette à jour , j'ai donc mis une formule:
If TxtPoidsBox.Value <> "" And TxtCoutBox.Value <> "" And TxtCoeffTransBox.Value <> "" Then
TxtPrixKgTrans = (CDec(TxtCoutBox) / CDec(TxtPoidsBox)) * CDec(TxtCoeffTransBox)
Mais je ne sais pas si je la met au bon endroit, j'ai tenté sur le click de la listbox, ça ne marche pas, j'ai aussi essayé dans le change des textbox et ça ne marche pas non plus!!!
Auriez-vous une idée?
Merci Eric
 

ChTi160

XLDnaute Barbatruc
Re
pour patricksi je mets
VB:
if not range(....).listobject is nothing then .......
Ca ne me sert qu'à vérifié si mon tableau contient des lignes de données.
Je connais donc le mon de mon tableau .
Mais tu as raison , je vais y regarder de plus près .
Pour ce qui est de
Code:
Range( nomdutableau).value
Ca concerne donc que les lignes du DataBodyRange ?
Merci pour ton intervention
Amicalement
jean marie
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
oui ca concerne que le databodyrange

Ca ne me sert qu'à vérifié si mon tableau contient des lignes de données.

VB:
if not range(blablabla).listobject is nothing

heu non!!!
avec ça tu contrôle seulement si le TS est quelque chose ou pas
SAUF QUE CA NE PEUT PAS MARCHER SI LE TS N'EXISTE PAS ,CA PLANTERA
c'est donc faire pipi dans un violon
non pas parce que c'est pas un listobject mais parce que le nom n'existe pas
autrement dit (si je peux m'exprimer ainsi ) ça plante juste avant le ".listobject"
en tout cas l'erreur de conception est là
 

ChTi160

XLDnaute Barbatruc
Re
j'ai dans la journée
travaillé sur comment savoir si après un filtre le ListObject est vide de lignes visibles (DataBodyRange )Lol
j'avais trouvé ceux ci
VB:
'j'ai trouvé cette méthode !
'On regarde la Hauteur du DataBodyRange si = à 0 c'est qu'il n'y a pas de ligne Visible !
If Worksheets("STOCK").ListObjects("Tableau2").DataBodyRange.Height = 0 Then Exit Sub
d'où mon erreur dans cette discussion lol
Ca ne me sert qu'à vérifié si mon tableau contient des lignes de données.
j'ai retrouvé le Comment faire pour vérifier si ListObject est vide Lol
VB:
Range("t_Test").ListObject.ListRows.Count 'sera égale à 0 si pas de données dans DataBodyRange'
Merci encore
jean marie
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
ben si le filtre est vide c'est simple le range visible du TS avec header contient qu'une ligne me semble til non ?


tiens comme ca vite fait
si c'est true il reste au moins une ligne sinon si il reste que le header c'est false

je filtre la colonne 1 et je contrôle si la colonne(1) du tableau contient plus d'une cellule de visible
c'est pas compliqué
VB:
Sub test()
    With ActiveSheet.ListObjects("Tableau1").Range
        .AutoFilter Field:=1, Criteria1:="cregerh"
        MsgBox .Columns(1).SpecialCells(xlVisible).Cells.Count > 1
      End With
End Sub
;)
 

patricktoulon

XLDnaute Barbatruc
re
allons allons cesse tes enfantillages;):p😂
tiens pour éviter les erreurs on prend le #all
VB:
Sub test()
    With ActiveSheet.ListObjects("Tableau1").Range
        .AutoFilter Field:=1, Criteria1:="blablabla"
        MsgBox .Columns(1).SpecialCells(xlVisible).Cells.Count > 1
      End With
End Sub

maintenant tu sais comment savoir si un filtre dans un TS donne un tableau visible ou pas
demo7.gif
 

Statistiques des forums

Discussions
312 749
Messages
2 091 645
Membres
105 010
dernier inscrit
sam333