Appel de control qui se créer dynamiquement...
Résolu/Fermé
GermPeru
Messages postés
172
Date d'inscription
mercredi 7 décembre 2016
Statut
Membre
Dernière intervention
27 mars 2018
-
Modifié par GermPeru le 13/02/2017 à 23:32
GermPeru Messages postés 172 Date d'inscription mercredi 7 décembre 2016 Statut Membre Dernière intervention 27 mars 2018 - 2 mars 2017 à 19:28
GermPeru Messages postés 172 Date d'inscription mercredi 7 décembre 2016 Statut Membre Dernière intervention 27 mars 2018 - 2 mars 2017 à 19:28
A voir également:
- Appel de control qui se créer dynamiquement...
- Créer un compte google - Guide
- Créer un compte gmail - Guide
- Comment créer un groupe whatsapp - Guide
- Créer un compte instagram sur google - Guide
- Appel inconnu - Guide
5 réponses
thev
Messages postés
1951
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
2 février 2025
698
Modifié par thev le 14/02/2017 à 01:00
Modifié par thev le 14/02/2017 à 01:00
Bonsoir,
1 - Il te faut d'abord créer une classe correspondant aux événements à gérer dans tes TextBox.
ci-dessous un exemple d'une classe nommée "Txtbox" avec l'événement "Change"
2- Dans ton UserForm,
a) créer une collection de type dictionnaire avec pour clé chaque élément de ta classe et déclarer cette collection publique afin de pouvoir y accéder dans le module de classe pour activer l'événement de classe dans le formulaire
b) déclarer les événements de classe
comme ceci :
1 - Il te faut d'abord créer une classe correspondant aux événements à gérer dans tes TextBox.
ci-dessous un exemple d'une classe nommée "Txtbox" avec l'événement "Change"
Option Explicit
'# Formulaire appelant
Private USF As Object
'# Evénement déclenché par la classe
Public Event Change()
'# Evénements pour zone de texte
Private WithEvents Tbox As MSForms.TextBox
Public Property Set Obj_UserForm(ByVal formulaire As Object)
Set USF = formulaire
End Property
Public Property Set Obj_TextBox(ByVal champ As MSForms.TextBox)
Set Tbox = champ
End Property
Public Property Get Obj_TextBox() As MSForms.TextBox
Set Obj_TextBox = Tbox
End Property
Private Sub Tbox_Change()
'activation évenements de la classe dans le formulaire
Set USF.Tbox_i = USF.CollectTxt(Tbox.Name)
'activation événement Change
RaiseEvent Change
End Sub
2- Dans ton UserForm,
a) créer une collection de type dictionnaire avec pour clé chaque élément de ta classe et déclarer cette collection publique afin de pouvoir y accéder dans le module de classe pour activer l'événement de classe dans le formulaire
b) déclarer les événements de classe
comme ceci :
Option Explicit
Public CollectTxt As Object
Private Ctrl As Control
Private valeur_textbox As String
Public WithEvents Tbox_i As Txtbox
Private Sub CmdCalc_Click()
'création collection zones de texte
Set CollectTxt = CreateObject("Scripting.Dictionary")
For Each Ctrl In Me.Controls
'stockage zone de texte dans la collection
CollectTxt.Add Key:=Ctrl.Name, Item:=Nothing
Set CollectTxt(Ctrl.Name) = New Txtbox
Set CollectTxt(Ctrl.Name).Obj_TextBox = Ctrl
Set CollectTxt(Ctrl.Name).Obj_UserForm = Me
Next Ctrl
End Sub
Private Sub Tbox_i_Change()
valeur_textbox = Tbox_i.Obj_TextBox.Value
End Sub
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 753
15 févr. 2017 à 11:09
15 févr. 2017 à 11:09
Bonjour,
Il y a peut-être plus simple que la création d'un module de classe.
Ici les textbox sont ajoutés dynamiquement, mais n'ont pas besoin d'un événement particulier. Si?
Par contre, ce qui nous manque pour t'aider c'est le code créant tes premières textbox. A l'initialisation de mon usf j´ai des textbox qui se créent dynamiquement.
Donne nous ce code stp.
Il y a peut-être plus simple que la création d'un module de classe.
Ici les textbox sont ajoutés dynamiquement, mais n'ont pas besoin d'un événement particulier. Si?
Par contre, ce qui nous manque pour t'aider c'est le code créant tes premières textbox. A l'initialisation de mon usf j´ai des textbox qui se créent dynamiquement.
Donne nous ce code stp.
GermPeru
Messages postés
172
Date d'inscription
mercredi 7 décembre 2016
Statut
Membre
Dernière intervention
27 mars 2018
15 févr. 2017 à 14:31
15 févr. 2017 à 14:31
Bjr pijaku,
Je vais te donner tout le code pour que cela soit plus explicite, avant tout je vais téxpliquer un peu le deroulement:
- lútilisateur rentre un N° via un inputbox, ce numero qui correspond a un fichier (N°), ce qui lóuvre et copie les données, crée une nouvelle feuille en position 2 et les colles, puis ferme le fichier (N°)
- charge certaines données de la feuille (2) dans mon usf a son iniatilisation
- et a la fermeture de mon usf cela supprime cette feuille.
Comme tu peux le voir je crée 9 txtboxs, qui ont chacune des propriétés différentes, avec des positions et des tailles particulieres, pour cela que je fais une par une.
Associé a ce code j´ai 2 module de classe:
- classe1 pour mes txtbox a l´initialisation
-classnumbox pour limiter des valeurs numerique dans 2 de mes txtbox: "txtselladas"et "txtfrac"
Cést tres fortement possible que ce code peut etre optimisé ; mais ne voulant pas créer d´interaction entre mes variables et mes modules j´en ai créer une pour chacun.
Je pense que thev a raison pour l´evenement change; car mon objectif est que l´utilisateur erntre des valeur numerique dans mes txtbox "txtselladas"et "txtfrac", a partir de ces valeurs et de 2 valeur deja dans mon tableau, j'ai créé 6 fonctions qui me donne 6 resultats, du coup ce que je cherche a faire c´est créer 6 txtbox m'affichant ces resultat dans mon usf pour ensuite imprimer certaines de ces données dans un format particulier....
Tu pourras constater que j´utilise des collections pour créer dynamiquement mes txtbox et thev utilise un dictionnaire, je pense encore qu´il a raison et que c´est la bonne facon de faire, car moins gourmand en temps de réalisation mais plus simple de compréhension, tout du mois au premier abords... Je vais étudier la réponse de thev bien attentivement, mais voila tu sais a peu prés tout...
Dans tous les cas merci pour ton temps, et je continue d´essayer de finir mes phrases ;)
Je vais te donner tout le code pour que cela soit plus explicite, avant tout je vais téxpliquer un peu le deroulement:
- lútilisateur rentre un N° via un inputbox, ce numero qui correspond a un fichier (N°), ce qui lóuvre et copie les données, crée une nouvelle feuille en position 2 et les colles, puis ferme le fichier (N°)
- charge certaines données de la feuille (2) dans mon usf a son iniatilisation
- et a la fermeture de mon usf cela supprime cette feuille.
Option Explicit Dim TNumBox() As New ClassNumBox 'variable en debut pour rester en memoire Private Sub UserForm_Initialize() 'Pour la creation dynamique des txtbox Dim Obj As Control, Ctrl As Control Dim Cl As Clase1 Dim i As Integer, NbLignes As Integer, T As Integer '(i boucle nb lignes,T boucle tag 1 numbox) 'ctrl spé a la limitation num Dim ctrlNumBox As Control 'On compte le nb de lignes NbLignes = Sheets(2).Range("A1", Selection.End(xlDown)).Cells.Count 'chargement automatique des lbl LblProd.Caption = Range("D2").Value LblCodProd.Caption = Range("C2").Value LblLote.Caption = Range("F2").Value LblFecha.Caption = Format(Now(), "dddd dd/mm/yyyy") LblUsuario.Caption = Sheets(5).Range("E65536").End(xlUp).Value 'boucle pour la création des Lbl Set CollectTxt = New Collection For i = 2 To NbLignes 'dimension de l'usf Me.Height = 50 + 22 * i 'N° de lignes Set Obj = Me.Controls.Add("forms.textbox.1") With Obj .Name = "TxtN" & i .Object.Value = i - 1 .Left = 1 .Top = 22 * i + 4 .Width = 22 .Height = 16 .Enabled = False .TextAlign = fmTextAlignLeft End With 'le nom de chaque matiere premiere Set Obj = Me.Controls.Add("forms.textbox.1") With Obj .Name = "TxtMP" & i .Object.Value = Sheets(2).Range("J" & i) .Left = 25 .Top = 22 * i + 4 .Width = 262 .Height = 16 .Enabled = False End With 'le codigo chaque matiere premiere Set Obj = Me.Controls.Add("forms.textbox.1") With Obj .Name = "TxtCodMP" & i .Object.Value = Mid(Sheets(2).Range("I" & i), 4, 5) .Left = 289 .Top = 22 * i + 4 .Width = 36 .Height = 16 .TextAlign = fmTextAlignCenter .Enabled = False End With 'N° lote de chaquew mat pemiere Set Obj = Me.Controls.Add("forms.textbox.1") With Obj .Name = "TxtLote" & i .Object.Value = Sheets(2).Range("O" & i) .Left = 327 .Top = 22 * i + 4 .Width = 53 .Height = 16 .Enabled = False End With 'cantidad requirida mat pemiere Set Obj = Me.Controls.Add("forms.textbox.1") With Obj .Name = "TxtCantRec" & i .Object.Value = Sheets(2).Range("M" & i) .Left = 382 .Top = 22 * i + 4 .Width = 61 .Height = 16 .TextAlign = fmTextAlignCenter .Enabled = False End With 'cantidad practica mat pemiere Set Obj = Me.Controls.Add("forms.textbox.1") With Obj .Name = "TxtCantPract" & i .Object.Value = Sheets(2).Range("N" & i) .Left = 445 .Top = 22 * i + 4 .Width = 61 .Height = 16 .TextAlign = fmTextAlignCenter .Enabled = False End With 'unidad Set Obj = Me.Controls.Add("forms.textbox.1") With Obj .Name = "TxtUnidad" & i .Object.Value = Sheets(2).Range("L" & i) .Left = 508 .Top = 22 * i + 4 .Width = 34 .Height = 16 .TextAlign = fmTextAlignCenter .Enabled = False End With 'fraccion de chaque mat prim Set Obj = Me.Controls.Add("forms.textbox.1") With Obj .Name = "TxtFrac" & i .Left = 544 .Top = 22 * i + 4 .Width = 43 .Height = 16 .BackColor = RGB(180, 205, 205) .Tag = "2" End With 'selladas de chaque mat prim Set Obj = Me.Controls.Add("forms.textbox.1") With Obj .Name = "TxtSelladas" & i .Left = 589 .Top = 22 * i + 4 .Width = 51 ' 53 ojo - 2 car dernier .Height = 16 .Tag = "1" End With 'ajout de l'objet dans la classe Set Cl = New Clase1 Set Cl.textbox = Obj CollectTxt.Add Cl Next i 'limitation valeur numerique de mes txtbox For Each ctrlNumBox In Me.Controls If TypeOf ctrlNumBox Is MSForms.textbox Then Select Case ctrlNumBox.Tag Case Is = "1", Is = "2" T = T + 1 ReDim Preserve TNumBox(1 To T) Set TNumBox(T).NumBox = ctrlNumBox End Select End If Next ctrlNumBox End Sub
Comme tu peux le voir je crée 9 txtboxs, qui ont chacune des propriétés différentes, avec des positions et des tailles particulieres, pour cela que je fais une par une.
Associé a ce code j´ai 2 module de classe:
- classe1 pour mes txtbox a l´initialisation
Option Explicit Public WithEvents textbox As MSForms.textbox
-classnumbox pour limiter des valeurs numerique dans 2 de mes txtbox: "txtselladas"et "txtfrac"
Public WithEvents NumBox As MSForms.textbox Private Sub NumBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) Select Case KeyAscii Case Is < 48, Is > 57 KeyAscii = 0 MsgBox "Solemente se puede ingresar cifras", 32, "Mensaje informativo" End Select End Sub
Cést tres fortement possible que ce code peut etre optimisé ; mais ne voulant pas créer d´interaction entre mes variables et mes modules j´en ai créer une pour chacun.
Je pense que thev a raison pour l´evenement change; car mon objectif est que l´utilisateur erntre des valeur numerique dans mes txtbox "txtselladas"et "txtfrac", a partir de ces valeurs et de 2 valeur deja dans mon tableau, j'ai créé 6 fonctions qui me donne 6 resultats, du coup ce que je cherche a faire c´est créer 6 txtbox m'affichant ces resultat dans mon usf pour ensuite imprimer certaines de ces données dans un format particulier....
Tu pourras constater que j´utilise des collections pour créer dynamiquement mes txtbox et thev utilise un dictionnaire, je pense encore qu´il a raison et que c´est la bonne facon de faire, car moins gourmand en temps de réalisation mais plus simple de compréhension, tout du mois au premier abords... Je vais étudier la réponse de thev bien attentivement, mais voila tu sais a peu prés tout...
Dans tous les cas merci pour ton temps, et je continue d´essayer de finir mes phrases ;)
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 753
Modifié par pijaku le 15/02/2017 à 15:14
Modifié par pijaku le 15/02/2017 à 15:14
Cést tres fortement possible que ce code peut etre optimisé
En effet.
On va procéder par étapes.
Essaye ce code dans ton bouton :
Pour le reste on verra après
Avant, j'arrivais jamais à finir mes phrases... mais maintenant je
En effet.
On va procéder par étapes.
Essaye ce code dans ton bouton :
Private Sub CmdCalc_Click() Dim Ctrl As Control For Each Ctrl In Me.Controls If Ctrl.Name Like "TxtSelladas*" Or Ctrl.Name Like "TxtFrac*" Then MsgBox Ctrl.Name & " contient : " & Ctrl.Value End If Next Ctrl End Sub
Pour le reste on verra après
Avant, j'arrivais jamais à finir mes phrases... mais maintenant je
GermPeru
Messages postés
172
Date d'inscription
mercredi 7 décembre 2016
Statut
Membre
Dernière intervention
27 mars 2018
Modifié par GermPeru le 15/02/2017 à 19:55
Modifié par GermPeru le 15/02/2017 à 19:55
oui cela me donne le nom de ma txtbox et la valeur qu´elle contient... Pourrais tu m´en dire plus?
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 753
16 févr. 2017 à 08:17
16 févr. 2017 à 08:17
Bonjour,
Pourrais tu m´en dire plus?
Certainement, mais tu dis :
Ce que je cherche a faire cést lors d´un évenement cmd clik, appeler ces txtbox et en fonction de leur valeur (qui doit etre numerique) je crée de nouveux textbox....
et aussi :
5- toujours concernant la création, pour l´asigantion des valeurs a mes nouvelles txtbox, qui depend dúne fonction dont les variables la composant sont des valeurs dáutres txtbox ds mon usf.
Nous ne savons pas combien créer de TextBox, ni comment, ni qu'elle fonction tu utilises, ni ou les créer, etc...
Ta question initiale est toutefois résolue, tu sais maintenant les appeler et récupérer leur valeur.
Tente donc de faire quelque chose.
Après cela, je te montrerai 3-4 petites choses à améliorer dans ton code.
Pourrais tu m´en dire plus?
Certainement, mais tu dis :
Ce que je cherche a faire cést lors d´un évenement cmd clik, appeler ces txtbox et en fonction de leur valeur (qui doit etre numerique) je crée de nouveux textbox....
et aussi :
5- toujours concernant la création, pour l´asigantion des valeurs a mes nouvelles txtbox, qui depend dúne fonction dont les variables la composant sont des valeurs dáutres txtbox ds mon usf.
Nous ne savons pas combien créer de TextBox, ni comment, ni qu'elle fonction tu utilises, ni ou les créer, etc...
Ta question initiale est toutefois résolue, tu sais maintenant les appeler et récupérer leur valeur.
Tente donc de faire quelque chose.
Après cela, je te montrerai 3-4 petites choses à améliorer dans ton code.
GermPeru
Messages postés
172
Date d'inscription
mercredi 7 décembre 2016
Statut
Membre
Dernière intervention
27 mars 2018
Modifié par GermPeru le 16/02/2017 à 14:41
Modifié par GermPeru le 16/02/2017 à 14:41
Bonjour Pijaku,
C´est vrai que j´ai bcp écrit et peut etre pas été assez concis, et certaines infos sont passés a la trappe. De plus ce n´est pas clair non plus dans ma tete pcq novice en VBA, je me pose plein de question sur la conception du programme, et le faire bien!
A l´initialisation de mon USF, j´ai 9 txtbox par ligne, 7 qui charge des info de ma feuille en position 2 et 2 txtbx que l´utilisateur rentre des infos. Jai autant de ligne ds mon USF que dans ma feuille 2.
Si ces 2 dernieres txtbox ne sont pas vide je voudrais, en créer 6 autres (evenemnt clik ou initialisation: je ne sais pas quel est le mieux...) sur la meme ligne et utiliser leur valeur comme variable de mes fonction et botter mes résultats dans mes 6 nvlles txtbx.
En poste 1, cad ma premiere question, je prends l ' exemple juste de la premiere des 6 txtbox que je veux créer, je la positionne a un left definit et a un top qui depend de i. La valeur que je souhaiterai serait le resultat de ma premiere fonction: "Selladas". Celle que j´emploie dans mon premiere exemple.
Cette premiere fction selladas a 3 variables qui sont :
-cantidad: sa valeur est chargé a l ínitialisation de mon USF "TxtCantPract" & i
-Fracion: sa valeur est une des 2 txtbox que renseigne l útilisateur "TxtFrac" & i
-sellada: sa valeur est la 2ieme txtbox que renseigne lútilisateur "TxtSelladas" & i
Pour le moment je n´arrive pas a créer les 6 nouvelles txt box (ou tout du moins une pour commencer), au cmdclik et en fonction des valeurs de mes autres textbox et encore moins leur assigné la valeur des résultats de mes fonctions....
Mon casse tete est loin d´être résolu....
Mais tu as raison je vais essayé de faire avec ce que j´ai... c´est a dire que ces 6 autres txtbox je vais les créer a l´initialisation de mon usf, je vais essayer de faire appel a mes fonction seulement a l´événement cmdclik... voir si je m´en sors avec ca mais sinon ca sera un autre sujet de discution.
J´espere avoir été plus clair et explicite dans mes problematique.
Merci Pijaku pour le temps consacré a mes pb, et pour les 3-4 petites choses a améliorer je suis prenneur et meme plus si tu as :)
C´est vrai que j´ai bcp écrit et peut etre pas été assez concis, et certaines infos sont passés a la trappe. De plus ce n´est pas clair non plus dans ma tete pcq novice en VBA, je me pose plein de question sur la conception du programme, et le faire bien!
A l´initialisation de mon USF, j´ai 9 txtbox par ligne, 7 qui charge des info de ma feuille en position 2 et 2 txtbx que l´utilisateur rentre des infos. Jai autant de ligne ds mon USF que dans ma feuille 2.
Si ces 2 dernieres txtbox ne sont pas vide je voudrais, en créer 6 autres (evenemnt clik ou initialisation: je ne sais pas quel est le mieux...) sur la meme ligne et utiliser leur valeur comme variable de mes fonction et botter mes résultats dans mes 6 nvlles txtbx.
En poste 1, cad ma premiere question, je prends l ' exemple juste de la premiere des 6 txtbox que je veux créer, je la positionne a un left definit et a un top qui depend de i. La valeur que je souhaiterai serait le resultat de ma premiere fonction: "Selladas". Celle que j´emploie dans mon premiere exemple.
'quantité de selladas Function Selladas(Cantidad, Fraccion, Sellada) As Double If Fraccion = 1 Then Selladas = Fix(Cantidad / Sellada) ElseIf Fraccion >= 1 Then CantReg = Round(Cantidad / Fraccion, 3) SellReg = Abs(Fix(CantReg / Sellada)) FracReg = Fraccion - 1 CantIReg = Cantidad - CantReg * FracReg SellIReg = Fix(CantIReg / Sellada) If SellIReg <= 0 Then Selladas = SellReg * FracReg ElseIf SellIReg > 0 Then Selladas = SellReg * FracReg + SellIReg End If Else MsgBox "Falta dato de fraccion", 48, "Error" End If End Function
Cette premiere fction selladas a 3 variables qui sont :
-cantidad: sa valeur est chargé a l ínitialisation de mon USF "TxtCantPract" & i
-Fracion: sa valeur est une des 2 txtbox que renseigne l útilisateur "TxtFrac" & i
-sellada: sa valeur est la 2ieme txtbox que renseigne lútilisateur "TxtSelladas" & i
Pour le moment je n´arrive pas a créer les 6 nouvelles txt box (ou tout du moins une pour commencer), au cmdclik et en fonction des valeurs de mes autres textbox et encore moins leur assigné la valeur des résultats de mes fonctions....
Mon casse tete est loin d´être résolu....
Mais tu as raison je vais essayé de faire avec ce que j´ai... c´est a dire que ces 6 autres txtbox je vais les créer a l´initialisation de mon usf, je vais essayer de faire appel a mes fonction seulement a l´événement cmdclik... voir si je m´en sors avec ca mais sinon ca sera un autre sujet de discution.
J´espere avoir été plus clair et explicite dans mes problematique.
Merci Pijaku pour le temps consacré a mes pb, et pour les 3-4 petites choses a améliorer je suis prenneur et meme plus si tu as :)
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 753
>
GermPeru
Messages postés
172
Date d'inscription
mercredi 7 décembre 2016
Statut
Membre
Dernière intervention
27 mars 2018
16 févr. 2017 à 16:18
16 févr. 2017 à 16:18
1- j'espère que toutes tes textbox sont situées dans un Frame sur l'userform. Si beaucoup de lignes dans ta feuille, ton userform va déborder de l'écran...
2- tes 6 textbox à ajouter "dynamiquement" peuvent être ajoutées lors de l'initialisation, en étant simplement cachées (propriété Visible = False). Il suffirait de les afficher (Propriété Visible = True) en fonction des valeurs contenues dans tes 2 textbox gérées par la classe.
3- tu souhaites que :
>>3a - tes 6 textbox s'affichent dès la saisie des 2 textbox de la ligne
>>3b - tes 6 textbox par ligne s'affichent tous en même temps pour toutes les lignes
>>3c - autre solution?
4- pour la suite, et selon tes réponses, il va nous falloir le fichier...
2- tes 6 textbox à ajouter "dynamiquement" peuvent être ajoutées lors de l'initialisation, en étant simplement cachées (propriété Visible = False). Il suffirait de les afficher (Propriété Visible = True) en fonction des valeurs contenues dans tes 2 textbox gérées par la classe.
3- tu souhaites que :
>>3a - tes 6 textbox s'affichent dès la saisie des 2 textbox de la ligne
>>3b - tes 6 textbox par ligne s'affichent tous en même temps pour toutes les lignes
>>3c - autre solution?
4- pour la suite, et selon tes réponses, il va nous falloir le fichier...
Utilisation d'un site de pièces jointes (ex : Cjoint.com) |
---|
Pour joindre un fichier sur les forums de ccm il faut : |
> se rendre sur le site : https://www.cjoint.com/
> cliquer sur "Parcourir" > rechercher le fichier > cliquer sur "Ouvrir" > cliquer sur "Créer le lien Cjoint" > copier le lien > revenir ici le coller dans une réponse |
GermPeru
Messages postés
172
Date d'inscription
mercredi 7 décembre 2016
Statut
Membre
Dernière intervention
27 mars 2018
Modifié par GermPeru le 16/02/2017 à 17:38
Modifié par GermPeru le 16/02/2017 à 17:38
1-Non pour le coup elles ne sont pas dans une fram mais je nái jamais eu de cas a plus de 20 lignes, eta ce que jái testé l usf peut afficher jusqu´a 22; mais c´est une possibilité que je devrais prendre en compte
2- Ton deuxieme points est une trés bonne reflexion qui serait une solution de substitution adequat, de plus ca me donne l´idée de proceder a l ´utilisation de mes formules directement dans ma deuxieme feuille puis rappatrié les résultats dans mon usf...
3-ce detail de conception est flou car je ne sais pas trop d'un point de vue utilisateur quel est le mieux. Mais jáurais envie de te repondre a partir du moment que toute les informations sont presentes, lútilisateur clik sur cmdcalc pour calculer et toues mes 6 nouvelles txtbox apparaissent avec les resultats
4- je ne peux pas te donner le fichier tel quel pour la simple raison que jái acheté un petit programme excel pour limiter l ´acces et la protection. De plus a travers une inputbox j áccede a une base de données, que je peu te fournir non plus. Alors j ái exporté tous les modules suffisant et nenecessaire dans un nvx fichier, j´ai copié une feuille exmple, essayé de faire en sorte que tu es a disposition toutes les données me parraissant utiles.
Mais en soit a l´affichage de mon usf j´ai un code d érreur que je n´ai pas sur le fichier originel... J´ai essayé de comprendre le pk du comment, mais pas reussi...Tu m´en excusera... Je te le fournis quand meme...
https://www.cjoint.com/c/GBqqEDVWrjF
Un grand merci pour ces idées nouvelles qui vont permettre de faire de nouveaux essais, etudier de nouvelles pistes pour faire avec les connaissances que jái, en esperant qu´avec ce paliatif je pourrais remedier a mon probleme initiale dúne autre maniere. Merci, et j´ai hate de lire
2- Ton deuxieme points est une trés bonne reflexion qui serait une solution de substitution adequat, de plus ca me donne l´idée de proceder a l ´utilisation de mes formules directement dans ma deuxieme feuille puis rappatrié les résultats dans mon usf...
3-ce detail de conception est flou car je ne sais pas trop d'un point de vue utilisateur quel est le mieux. Mais jáurais envie de te repondre a partir du moment que toute les informations sont presentes, lútilisateur clik sur cmdcalc pour calculer et toues mes 6 nouvelles txtbox apparaissent avec les resultats
4- je ne peux pas te donner le fichier tel quel pour la simple raison que jái acheté un petit programme excel pour limiter l ´acces et la protection. De plus a travers une inputbox j áccede a une base de données, que je peu te fournir non plus. Alors j ái exporté tous les modules suffisant et nenecessaire dans un nvx fichier, j´ai copié une feuille exmple, essayé de faire en sorte que tu es a disposition toutes les données me parraissant utiles.
Mais en soit a l´affichage de mon usf j´ai un code d érreur que je n´ai pas sur le fichier originel... J´ai essayé de comprendre le pk du comment, mais pas reussi...Tu m´en excusera... Je te le fournis quand meme...
https://www.cjoint.com/c/GBqqEDVWrjF
Un grand merci pour ces idées nouvelles qui vont permettre de faire de nouveaux essais, etudier de nouvelles pistes pour faire avec les connaissances que jái, en esperant qu´avec ce paliatif je pourrais remedier a mon probleme initiale dúne autre maniere. Merci, et j´ai hate de lire
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 753
17 févr. 2017 à 10:29
17 févr. 2017 à 10:29
Bonjour,
Voici comment je verrais les choses à ta place :
https://www.cjoint.com/c/GBrjBupyYhE
Ce n'est qu'un test, essaye le.
Tu clic sur la listbox, ou tu veux, plusieurs fois sur chaque ligne, et vois.
Avantages :
> plus de classe
> plus de textbox dynamiques
inconvénient :
> esthétique pas top
Voici comment je verrais les choses à ta place :
https://www.cjoint.com/c/GBrjBupyYhE
Ce n'est qu'un test, essaye le.
Tu clic sur la listbox, ou tu veux, plusieurs fois sur chaque ligne, et vois.
Avantages :
> plus de classe
> plus de textbox dynamiques
inconvénient :
> esthétique pas top
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 753
17 févr. 2017 à 12:44
17 févr. 2017 à 12:44
Voici une seconde version un peu plus complète.
https://www.cjoint.com/c/GBrlSpj3MZE
https://www.cjoint.com/c/GBrlSpj3MZE
GermPeru
Messages postés
172
Date d'inscription
mercredi 7 décembre 2016
Statut
Membre
Dernière intervention
27 mars 2018
Modifié par GermPeru le 17/02/2017 à 14:01
Modifié par GermPeru le 17/02/2017 à 14:01
Bonjour Pijaku,
C'est beau, simple et propre... Je ne connaissais pas ces possibilités, ca libere de léspace dans l´usf, cela simplifie tres grandement le code, et de visue ca rend bien...
J´avais commencé a cacher toutes les nouvelles txtbox, a faire mes calculs dans la feuille 2, et rappatrier les résultats dans mon usf.... Mais avec ces nouvelles données; vu que j´ai le temps, je vais essayé de développer les différentes interfaces pour voir ce qui correspond le mieux a mes nécéssité.
Du coup pb résolu, voir mieux: simplifié!! avec dáutres pistes a étudier, jái beaucoup de taf devant moi; je ne sais pas comment te remercier pour ton aide et le partage de tes connaissance... Avec une telle distance je peux juste te dire merci Pijaku
C'est beau, simple et propre... Je ne connaissais pas ces possibilités, ca libere de léspace dans l´usf, cela simplifie tres grandement le code, et de visue ca rend bien...
J´avais commencé a cacher toutes les nouvelles txtbox, a faire mes calculs dans la feuille 2, et rappatrier les résultats dans mon usf.... Mais avec ces nouvelles données; vu que j´ai le temps, je vais essayé de développer les différentes interfaces pour voir ce qui correspond le mieux a mes nécéssité.
Du coup pb résolu, voir mieux: simplifié!! avec dáutres pistes a étudier, jái beaucoup de taf devant moi; je ne sais pas comment te remercier pour ton aide et le partage de tes connaissance... Avec une telle distance je peux juste te dire merci Pijaku
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 753
>
GermPeru
Messages postés
172
Date d'inscription
mercredi 7 décembre 2016
Statut
Membre
Dernière intervention
27 mars 2018
17 févr. 2017 à 14:04
17 févr. 2017 à 14:04
je ne sais pas comment te remercier pour ton aide
C'est fait.
A+ n'hésite pas !
C'est fait.
A+ n'hésite pas !
14 févr. 2017 à 18:17
1- Je pensais que cela serait plus pratique de proceder a la creation de nouvelles txtbox et leur assigner une valeur par líntermediaire de lévenement clik sur un btn. Mais a ce que je vois tu declares tes variables en debut de module, ce qui veut dire qu' elles restent en mémoire (arrete moi si je dis des aneries), ce qui signifie que meme si l'evenement initialise de mon usf est terminé je peux créer mes nvx txtbox a partir de l´événement change comme tu l´as fait? Cela est possible car tu créer les caractéristiques de ces nouvelles txtbox au travers du module de classe?
2- Ne sachant pas comment je pouvais interagir au travers du nom de ces 2 txtbox je leur est assigné un tag pour interagir avec eux et leur assigner obligatoirement une valeur numerique, grace a un autre module de classe.
Est ce que tu pense que je peux utiliser leur propriété tag pour appeler ces txtbox associé a l´evenemnt change? Je pose la question car je pense que cela pourrait permettre de gagner du temps a línitialisation de mon usf...
3- Je vois que tu utilises le dictionary pour associer des valeurs a des clés, comme tu me léxpliques. Pourrais tu mén dire plus, car sincerement je n´ai pas compris comment tu le programmais... Pk tu ný associes aucune valeur en item?
4- De plus je "comprends" que cela permet la création des nouvelles txtbox grace a ton module de classe. Mais comment procéder pour sa construction , cad sa position dans l´USF? Concernant les propriété, je dois les définir dans le code de mon usf?
5- toujours concernant la création, pour l´asigantion des valeurs a mes nouvelles txtbox, qui depend dúne fonction dont les variables la composant sont des valeurs dáutres txtbox ds mon usf. Je vois que tu ne fais pas de boucles pour la création de ces nouvelles boucles, simplement pcq la création dúne nouvelle txtbox est corrélé a l´evenement change dúne txtbox qui est deja lié a ma variable i ? dans ce cas je dois rajouter une boucle pour aller chercher mes valeur de i?
Je suis dsl pour toutes ces questions; qui j´espere ne sont pas nul de sens. Je ne suis pas adepte du pompage de code sans le comprendre, vu que je suis un novice de klk mois en vba, il me reste bcp a comprendre.
Dans tous les cas merci pour le partage de tes connaissances, c´est vraiment super.
15 févr. 2017 à 03:06
B-Une fois la classe définie et associée ici à l'événement Change, toute nouvelle TextBox est en fait rattachée à une instance de cette classe. Il faut ensuite stocker les instances de cette classe dans une collection de type dictionnaire afin de disposer d'une clé d'identification pour accéder à une instance quelconque de cette classe.
Cette instruction a un double rôle :
Elle crée une nouvelle instance de classe et la stocke en tant que valeur d'item dans la collection avec pour clé le nom du contrôle.
Les 2 instructions suivantes rattachent la nouvelle instance de classe à la TextBox considérée
Ces instructions renseignent les variables "USF" et "Tbox" de l'instance de classe.
C- Ces instructions sont à mettre dans ta boucle i en remplaçant Ctrl par Obj
16 févr. 2017 à 18:27
J´ai passé bcp de temps a essayé de decripter et de bien comprendre toutes les lignes du code que tu m´as fourni. De plus j´ai essyé de suivre tes instructions le plus précisemant possible.
Mais je ne suis pas arriver a grand chose de concluant, le code bloque et le msg d´erreur qui s´affiche est que la touche est associé a un élément de la collection...
Je pense que tu as raison dans la facon de faire et que cést un code que je califerais de propre mais qui dépasse mon entendement
Je ne sais pas si tu peux m´aider, mais dans tous les cas un merci pour le partage
17 févr. 2017 à 01:09
Je pense que cette instruction est erronée
l'instruction doit être
Si le module de classe est "Txtbox", alors l'instruction est
Par ailleurs, il n'est pas possible d'affecter à la collection et à une instance de cette classe un objet TextBox qui n'a pas encore été créé. Ce code devrait donc mieux convenir
17 févr. 2017 à 14:51
J´avais remplacé le nom du module de classe pour que cela soit plus clair dans ma tete quand je lisais le code...
Le code bloque a ce niveua:
En m´affichant le msg que ne coincide pas les types...
Si j´avais les connaissances suffisantes, je pense que j´aurais procédé avec ta facon de faire car intituivement c´est ce que je voulais, et je trouve le code propre. Mais il y a un mais, je n´arrive pas a bien programmer avec le dictionnaire et la notion de module de classe. J´ai pallié mes lacunes en ne rendant pas visible mes txtbox de calcul et en faisant mes calculs dans une feuille de mon classeur; pour le moment je vais appeler ca de la bidouille mais je vais continuer a travailler les infos que tu m' as transmises , car je penses que ce sont des notions trés importantes et tres utiles dans la conception de progrqamme VBA.
J´ai mis mon pb come résolu pcq je vais bidouiller mais entierement disponible pour continuer sur cette possibilité.
Un sincere Merci Thev