Bonjour je voudrais faire un tableau qui a partir de 2 listebox me remplie 3 textbox .
Alors la première étape est ok listebox je sélection le site il m'affiche le bon résulta dans la textbox1 c'est bon.
Pour le combobox2 c'est la ou je n'arrive pas, donc je passe par une listbox cela fonction bien ce que je recherche c'est que le résulta de la listebox s'affiche directement dans la textbox2 et de la je voudrais qui m'affiche dans la textbox3 le n° associer de la colonne ou il se trouve.
exemple comme sur la photo si Ecole Maternelle A1 = 211 textbox1 + Fonctionnement Travaux =61522.1 textbox2 alors textbox3 = 5160.
le probléme est que si je choisi Ecole Maternelle A1 = 211 textbox1 + Fonctionnement Travaux =611 textbox2 alors textbox3 = xxxx
J'ai du mal a l'expliqué
mais je ne trouve pas la formule.
Je joint mon tableau.
Si le but est la mise à jour du tableau feuille "Création de Bon" il serait souhaitable de prévoir un 3ième jeu de variables CLsB, CAsB, LCouB, TVLB() pour bénéficier des facilités de mise à jour.
S'il y aura là immanquablement des ComboBox qui taperont dans les autres tableaux, il serait souhaitable de grouper les contrôles dans des Frame, un pour pour tout ce qui est spécifique à l'entreprise, un autre pour la nomenclature, le troisième le bon qui les associe. Ça permettrait de réactiver les ComboBoxLiées qui s'y rapportent dans des Private Sub FrmN_Enter.
Re,
Le but est de sélectionner un bâtiments un code inter et une entreprise qui a le corps de métiers sachant que il peut y'avoir plusieur corps de métiers dans une même entreprise et de crée un bon d'intervention imprimer et sauvegarder.
Les procédures qui suivent la Sub UserForm_Initialize, je vous les indiquerai, bien sûr.
Quelle lettre voulez vous au lieu de E qui ne va pas pour les entreprises. Avez vous un synonyme de ce mot ?
"S" comme société ça irait ?
Revoyez le dessin de l'UserForm avec 3 Frame (Cadre dans la boite à outils) si cette solution vous convient, un pour le bâtiment, un pour la société et un pour l'intervention.
déclarez alors par exemple :
VB:
Option Explicit
Private WithEvents CLsB As ComboBoxLiées, CAsB As ControlsAssociés, LCouB As Long, TVLB() ' Bâtiment
Private WithEvents CLsS As ComboBoxLiées, CAsS As ControlsAssociés, LCouS As Long, TVLS() ' Société
Private WithEvents CLsI As ComboBoxLiées, CAsI As ControlsAssociés, LCouI As Long, TVLI() ' Intervention
Et dans la Sub UserForm_Initialize faites 3 paquets d'initialisation sur le même modèle que l'unique actuel.
Re Dranreb,
Option Explicit
Private WithEvents CLsB As ComboBoxLiées, CAsB As ControlsAssociés, LCouB As Long, TVLB() ' Bâtiment
Private WithEvents CLsS As ComboBoxLiées, CAsS As ControlsAssociés, LCouS As Long, TVLS() ' Société
Private WithEvents CLsI As ComboBoxLiées, CAsI As ControlsAssociés, LCouI As Long, TVLI() ' Intervention
Je l'avais fait c'est la suite au j'arrive pas j'ai que des erreurs.
Je vous joints mon fichier avec quelque explications sur votre userform.
Bonsoir.
Pour l'instant il y a une erreur de compilation sur la 1ère ligne car CLsN n'existe plus. C'est CLsB apparemment ?
J'avais mis ça comme exemple parce que vous parlier en dernier de bâtiments, plus de nomenclature.
Menez une petite réflexion pour bien fixer définitivement qu'est ce qui s'appelle comment, et surtout par quelle lettre en suffixe, sachant que le E ne va pas à cause du CAsE qui fait Case, alors prenons S comme société si vous n'y voyez pas d'inconvénient.
À part ça, oui, vous me semblez bien parti pour continuer …
Remarque il n'est peut être pas nécessaire de restituer tout ce qu'il y a dans tous les tableaux
Dans le tableau des interventions, qui est celui à mettre à jour si j'ai bien compris, il n'y a que 9 colonnes après tout. C'est peut être par celui là qu'il aurait fallu commencer, surtout si les deux autres ne sont qu'en consultation, dans cet UserForm là.
Un peu étonné qu'il ne soit pas prévu dans les interventions une date ?
Oui, c'est loin d'être terminé, tout çà, mais je pense que je verrai moi même ces détails. Pour votre info, et si c'est ça qui vous gène déjà, je dirais déjà que rien ne s'affiche dans les listes de CBxSociete et CBxPrestation parce qu'il manque l'instruction CLsS.Actualiser derrière. Mais je viens d'ailleurs de voir que vous les avez de toute façon confié à CAsS, non à CLsS, or l'objet ControlsAssociés ne prépare jamais de liste pour les ComboBox. Pour que je fasse ce qu'il faut pour garnir les TextBox, ce sont elles qu'il faut confier à CAsS.
Faites ensuite les initialisations pour Intervention. À tout hasard ne mettez plus les .Actualiser et ne tentez plus d'exécution, pour éviter un danger (risque de plantage sévère et silencieux d'Excel si une même ComboBox est gérée simultanément par plusieurs ComboBoxLiées).
Vous parlez des fins de titres ? Non, ils étaient comme ça dans le classeur de Linda42. Je ne sais pas ce que ça lui apportait de mettre ça. Mais ils étaient comme ça, alors je les reproduisis comme ça dans les .Add
C'est bien, mais Il ne fallait pas de Sub CBxSociete_Change, il fallait ça :
VB:
Private Sub CLsS_Change(ByVal Complet As Boolean, ByVal NbrLgn As Long)
If NbrLgn = 1 Then Exit Sub
ReDim TVLS(1 To 1, 1 To CLsS.Colonnes.Count)
CAsS.ValeursDepuis TVLS
End Sub
Private Sub CLsS_BingoUn(ByVal Ligne As Long)
TVLS = CLsS.Lignes(Ligne).Range.Value
CAsS.ValeursDepuis TVLS
End Sub
Sur le même modèle que les CLsB_Change et CLsB_BingoUn
Et il faudra à peu près la même chose pour les Interventions avec en plus LCouI = Ligne. Ce n'est que dans celles ci qu'il y aura les CBnEntrée.Enabled = True ou False, je pense puisque ce bouton validera l'ajout ou la modification d'une ligne du tableau à mettre à jour.
Pourquoi avoir mis deux contrôles pour la société ? La CBxSociete suffit, pas besoin de la TBxEntreprise.
Pas besoin non plus de détailler les écritures dans les Interventions, la CBnEntrée_Click s'écrira probablement comme ça :
Code:
Private Sub CBnEntrée_Click()
CAsI.ValeursVers TVLI
If LCouI = 0 Then
CLsI.ValeursVers TVLI
CLsI.Lignes.Add.Range.Value = TVLI
CLsI.Actualiser
Else
CLsI.Lignes(LCouI).Range.Value = TVLI
End If
End Sub
C'est tout l'intérêt de ces objets: grace aux .Add de la Sub UserForm_Initialize ils savent tout seul à quelles colonnes se trouvent les données et savent les mettre à la bonne place dans un tableau dynamique. D'où moins de code et de risque d'erreurs.
Édition: je viens de me rendre compte que la Sub BtCree_Click que vous aviez mise n'écrit pas dans la feuille "Création de bon". C'est autre chose. Dans ce cas bien sûr c'est différent. Mais deux remarques :
1) — Il vaut mieux reprendre si possible les infos des TVLB, TVLS et TVLI car ce sont de bonnes valeurs de cellules, non des textes comme les valeurs de contrôles: Ils sont déjà convertis en nombres s'il y a lieu.
2) — Il vaut mieux autant que possible ranger ces informations dans les éléments d'un tableau dynamique et verser celui ci à la fin en une fois dans la feuille. Parce que, tandis que la modification d'un élément de tableau est extrêmement rapide, chaque Cells(x, y) = UnTruc est pratiquement tout aussi long à exécuter que l'affectation de tout le tableau à la propriété Value d'un Range de plusieurs cellules !