XL 2013 Remplir plusieurs tableaux depuis un unique formulaire

Leguyl

XLDnaute Occasionnel
Bonjour à tou(te)s.

J'aimerais, depuis un unique formulaire de saisie, remplir le tableau correspondant au type de pièce que je sélectionne dans le premier ComboBox.

Chaque tableau est mis en forme et se trouve dans une feuille différente.

Auriez-vous une piste ?

Merci d'avance,
Leguyl
 

Pièces jointes

  • test 2020-10-29.xlsm
    96.4 KB · Affichages: 21

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Après avoir renommé la feuille 'Droit' en 'Droite' et vérifier que tous vos tableaux structurés de pièces soit bien nommés, vous pourrez utiliser les lignes ci-dessous pour retrouver le bon tableau.
Je les ai mises dans cboTypePièce_Change mais on peut imaginer le faire uniquement au moment de l'enregistrement des données.

VB:
 '
    ' Choix du tableau final
    If cboTypePièce.ListIndex > -1 Then
        Set loTabCoûts = ThisWorkbook.Sheets(cboTypePièce.Value).ListObjects("TabCoûts_Cap" & cboTypePièce.Value)
    End If

J'ai également raccourci vos lignes successive de if par :

Code:
    cboRéhausse.Enabled = cboTypePièce = "Réhaussé" ' Si le type réhaussé est sélectionné, alors
    lblRéhausse.Enabled = cboRéhausse.Enabled
    tboAngle.Enabled = cboRéhausse.Enabled
    lblAngle.Enabled = cboRéhausse.Enabled

Cordialement
 

Pièces jointes

  • test 2020-10-29.xlsm
    95.1 KB · Affichages: 11

Leguyl

XLDnaute Occasionnel
J'essaye de comprendre comment adapter au vrai fichier auquel c'est destiné mais pas évident à mon niveau.

Il y a plus de tableaux, les feuilles sont nommées quelque peu différemment et la désignation des produits et plus longue que dans le fichier exemple... et je ne peux pas raccourcir pour faire correspondre noms de produits et feuilles. Mais je cherche...
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

De combien de feuilles parlons-nous ?
Si vos noms réels de feuilles de correspondent pas à vos noms de type de pièces,
Vous pouvez ajouter une colonne masquée à cboTypePièce dans laquelle vous pourriez mettre le nom de la feuille concernée, puis charger cboTypePièce à partir du tableau 'TabCaract' de la feuille 'Données'. Tableau auquel vous aurez rajouté une colonne avec le nom de la feuille également.

Ce qui a été fait dans le fichier ci-joint.
Voyez comment est paramétrée cboTypePièce (columnCount et ColumnWidths) puis comment elle est chargée dans UserForm_Initialize.
1604054246072.png


Là les noms sont identiques, mais ils pourraient être totalement différents.
Avec Excel, il y a toujours moyen d'établir une correspondance entre un nom et une feuille.

En parlant de correspondance, je suis tombé sur la formule du calcul du coût matière (Feuille 'Droite') et vous propose là aussi un tableau d'équivalence pour retrouver le coefficient multiplicateur en fonction de l'épaisseur. Cela vous permettra de faire évoluer les coefficients dans le temps sans avoir à les modifier dans chaque formule, l'important étant que les épaisseurs soient en ordre croissant (voir aide sur EQUIV et son dernier paramètre)

Cordialement
 

Pièces jointes

  • test 2020-10-29.xlsm
    96.5 KB · Affichages: 16
Dernière édition:

Leguyl

XLDnaute Occasionnel
Bonjour Roblochon,

Merci de vous attarder sur mon cas.

Il y a 13 types de pièces.

J'ai modifié ColumnCount et ColumnWidths comme sur votre image, ajouté la colonne "Feuille" dans la table TabCaract et juste modifié le nom de feuille de votre code

VB:
cboTypePièce.List = ThisWorkbook.Sheets("Données").Range("TabCaract[[Feuille]:[Type de pièce]]").Value

vu que dans le fichier de travail, ces données se trouvent dans la feuille "Caractéristiques"

VB:
cboTypePièce.List = ThisWorkbook.Sheets("Caractéristiques").Range("TabCaract[[Feuille]:[Type de pièce]]").Value

Le souci est que j'obtiens le message "Erreur d'exécution '70': Permission refusée" lorsque je lance le formulaire. J'ai dû me planter quelque part mais où ?

Quant à la "reformulation" du calcul de coût matière, en effet, c'est beaucoup plus court et simple avec votre méthode, merci.
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Comme ça je ne peux savoir d'où vient votre problème.
J'ai modifié ColumnCount et ColumnWidths comme sur votre image, ajouté la colonne "Feuille" dans la table TabCaract
Si la colonne 'Feuille' est à gauche de la colonne 'Type de pièce', ColumnWidths de cboTypePièce doit être "0 pt;" au lieu de ";0 pt" et la propriété BoundColumn (colonne de la valeur qui sera retourner par .Value ) doit être 2.

1604054289128.png


Et dans l'évènement cboTypePièce_Change : nomFeuille = .List(.ListIndex,0)

Il faut que vous vous aidiez de l'aide en ligne sur les propriétés et méthodes des contrôles que vous ne connaissez pas. Sinon vous ne saurez jamais adapter les exemples.

Cordialement
 
Dernière édition:

Leguyl

XLDnaute Occasionnel
Re,

J'utilise déjà souvent l'aide en ligne pour tenter de comprendre mais cette fois, elle ne m'aide pas. Quoi que je fasse, je reste toujours bloqué sur cette fichue Erreur d'exécution 70 dès le lancement du formulaire et ça me prend le chou... d'autant plus quand on me met la pression, genre "si ça pouvait être fait pour hier !"

Enfin, merci quand même à vous et désolé pour le temps que je vous fais perdre, je pensais vraiment y arriver mais...

Bonne journée.
 

soan

XLDnaute Barbatruc
Inactif
@Leguyl

Lis d'abord mon post précédent.

tu as aussi écrit : « ... cette fichue Erreur d'exécution 70 dès le lancement du formulaire »

voici la sub Initialize() de ton unique formulaire :

VB:
Private Sub UserForm_Initialize()
  cboRéhausse.Enabled = False
  lblRéhausse.Enabled = False
  tboAngle.Enabled = False
  lblAngle.Enabled = False
End Sub
chacune des 4 instructions met à False la propriété Enabled du contrôle utilisé en objet ;
pour moi, ce n'est pas ça qui provoque l'erreur 70 ; il faut chercher ailleurs... mais aussi,
peut-être que c'est dans la sub Initialize() de ton vrai fichier, qui elle est plus "étoffée" ?


soan
 

Leguyl

XLDnaute Occasionnel
Re Roblochon, bonjour soan,

En repartant d'une version du fichier de début de matinée, plus d'erreur 70. Par contre, maintenant j'ai une erreur 1004 "Erreur définie par l'application ou par l'objet" o_O

Le debug s'arrête sur cette ligne :

VB:
cboTypePièce.List = ThisWorkbook.Sheets("Caractéristiques").Range("TabCaract[[Feuille]:[Type de pièce]]").Value

Je vais revérifier les noms de mes tableaux et des feuilles, sait-on jamais

Roblochon, j'avais bien effacé le contenu de RowSource
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 023
Messages
2 084 715
Membres
102 637
dernier inscrit
TOTO33000