Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
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
 

Discussions similaires

Réponses
16
Affichages
769
Réponses
16
Affichages
744
Réponses
9
Affichages
903
  • Question Question
Microsoft 365 Code listbox
Réponses
4
Affichages
517
Réponses
18
Affichages
1 K
Réponses
15
Affichages
701
Réponses
6
Affichages
708
  • Question Question
Microsoft 365 gestion des listbox
Réponses
21
Affichages
2 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…