Pré-remplissage d'un UserForm via les variables d'un module
Bonjour a tous,
Voilà je suis toujours en train de faire un Cartouch automatique.
J'ai réussi à récupérer des valeur en automatique et je les assigne à une variable pour l'afficher dans mon cartouch.
Maintenant, je souhaiterais afficher un UserForm à la fin de mon module afin d'afficher toute mes variables dans des TextBox pour pouvoir les faire vérifier et/ou les corriger par l'utilisateur.
Seulement je ne trouve pas comment faire appel à ma variable dans le UserForm ainsi qu'a préremplir la TextBox avec celle-ci.
Partie du code du module :
Public myname As String
myname = oFrontViewGB.Document.NameA partir de là, je peux réutiliser comme je veux la variable myname dans mon module.
Maintenant commen l'appeler dans mon UserForm et préremplir la TextBox ?
Code du UserForm ne fonctionnant pas:
Private Sub UserForm4_Initialize()
Public myname As String
TextBox1 = myname.Value
End Sub
Public Sub UserForm4()
End Sub
Private Sub TextBox1_Change()
TextBox1.Value = myname
End SubMerci d'avance pour votre aide.
Bonjour Thivoxs,
Il faut que tu récupères les variables dans la procédure "UserForm4_Initialize()" et qu'ensuite tu les affectes aux différents TextBox un peu comme ci-dessous (exemple bidon ... avec un fichier anonymisé l'exemple aurait été plus pertinent
' Déclaration des variables au niveau du module de code associé au UeserForm
Dim MyName as string
Dim MySurname as string
Private Sub UserForm4_Initialize()
' Récupération des variables
MyName = ActiveSheet.Cells(15, 1).value
MySurame = ActiveSheet.Cells(15, 2).Value
' Affectation aux Textbox
TextBox1.Value = MyName
TextBox2.value = MySurname
End SubSi tu veux remettre à jour les données dans la feuille d'origine, il faut que tu prévois un bouton de validation et que dans l'événement "Click" tu les mettes à jour. Si avant mise à jour, des étapes de vérification sont nécessaires tu pourrais les inclure soit dans la procédure associée à l'événement Click du bouton de validation soit dans les événements Change ou AfterUpdate du TextBox.
Je te conseille de prendre connaissance sur le site du tuto "Cours VBA" / "9 - Les formulaires et contrôles"
Merci de ton retour,
Cependant, tu récupère la valeur depuis une cellule d'un tableur excel or pour mon code, je souhaite récupérer la valeur d'un autre module.
J'ai un module A qui ouvre le UserForm4 (ainsi que son module B) et dans le module B je veux récupérer une variable déterminer dans le module A pour ensuite l'afficher dans le UserForm4.
Mon réel soucis est pour la récupération de la variable du module A dans le module B.
Si je reprend ton code :
' Déclaration des variables au niveau du module de code associé au UeserForm
Dim MyName as string
Dim MySurname as string
Private Sub UserForm4_Initialize()
' Récupération des variables
MyName = 'Variable d'un autre module
MySurame = 'Variable d'un autre module
' Affectation aux Textbox
TextBox1.Value = MyName
TextBox2.value = MySurname
End SubMerci :)
Dans ce cas, dans le module A, soit tu crées la variable en question en Public et elle deviendra accessible dans tous les autres module, soit voir ci-dessous un exemple pour la variable MyName.
' Module A
' Définition de la variable en Private pour qu'elle ne soit pas visible des autres modules
Private MyName as String
' Procédure accessible de tous les modules et alimentant la variable MyName qui, elle, n'est pas accessible depuis les autres modules.
' Cela permet aussi lorsque c'est nécessaire d'ajouter et de centraliser des contrôles avant de stocker la valeur.
Sub SetMyName(cName)
MyName = cName
End Sub
' Fonction récupérant la valeur de la variable MyName, fonction qui est utilisable dans tous les modules.
Function GetMyName() as String
GetMyname = MyName
End FunctionSi la réponse n'est pas la bonne, désolé mais dans ce cas joins le fichier (données persos anonymisées s'il en comporte) à ta réponse pour que la réponse soit pleinement adaptée
Je n'y arrive toujours pas...
Donc voici mon module "A" qui me permet de mettre mon calque à la bonne dimension.
Dedans je défini la variable myname de façon automatique en fonction du fichier traité.
A la fin j'affiche le UserForm4 dans lequel je souhaite avoir une zone de text près remplis avec la variable myname précédemment défini afin de la faire vérifier et corriger si besoin par l'utilisateur.
PS : Etant novice, le code est un peu un chantier... mais j'essaye petit à petit de l'éclaircir.
Public formatcalque As String 'formatcalque devient la variable du format du calque
Public myreference As String
Private myname As String
Public mymat As String
Public myscale As String
Public oAppliedMaterial As Material
Function Getmyname() As String
Getmyname = myname
End Function
Sub CATMain()
Dim CATIA As Object
Set CATIA = GetObject(, "CATIA.Application")
Dim MyDrawingDoc As DrawingDocument
Set MyDrawingDoc = CATIA.ActiveDocument
Dim MyDrawingSheets As DrawingSheets
Set MyDrawingSheets = MyDrawingDoc.Sheets
Dim MyDrawingSheet As DrawingSheet
Set MyDrawingSheet = MyDrawingSheets.ActiveSheet
Dim MyDrawingViews As DrawingViews
Set MyDrawingViews = MyDrawingSheet.Views
UserForm3.Show ' affiche la boite de dialogue
Dim TableauTXT() 'As String
Dim MyDoc 'As DrawingDocument
Set MyDoc = CATIA.ActiveDocument
'
Dim OCollectDrawingSheet 'As DrawingSheets
Set OCollectDrawingSheet = MyDoc.Sheets
Dim NbSheet 'As Integer
NbSheet = OCollectDrawingSheet.Count
'
Dim ODrawingSheet 'As DrawingSheet
'
Dim OCollectView 'As DrawingViews
Dim NbView 'As Integer
'
Dim Oview 'As DrawingView
'
Dim oFrontViewGB 'As DrawingViewGenerativeBehavior
'
Dim link3D 'As Document
'
For i = 1 To NbSheet
Set ODrawingSheet = OCollectDrawingSheet.Item(i)
MsgBox ODrawingSheet.Name, vbApplicationModal
Set OCollectView = ODrawingSheet.Views
NbView = OCollectView.Count
For p = 1 To NbView
Set Oview = OCollectView.Item(p)
If Oview.Name = "Main View" Or Oview.Name = "Background View" Then
Else
If Oview.Name = "Vue de face" Then
MsgBox Oview.Name, vbApplicationModal
Set oFrontViewGB = Oview.GenerativeBehavior
MsgBox oFrontViewGB.Document.Name, vbApplicationModal
Set link3D = Oview.GenerativeBehavior.Document.Parent
MsgBox link3D.Name, vbApplicationModal
End If
End If
Next
Next
' myWorksheet.Range("A" & line).Value = oInProduct.PartNumber reference
'myWorksheet.Range("B" & line).Value = oInProduct.Revision
' myWorksheet.Range("C" & line).Value = oInProduct.Definition
' myWorksheet.Range("D" & line).Value = oInProduct.Nomenclature
'myWorksheet.Range("E" & line).Value = oInProduct.Source
' myWorksheet.Range("F" & line).Value = oInProduct.DescriptionRef description produit
' myWorksheet.Range("G" & line).Value = oInProduct.Name nom
' Set myparameters = oFrontViewGB.ReferenceDocument.UserRefProperties
' On Error Resume Next 'évite le plantage de la macro si une des propriétés n'existe pas
' mat = myparameters.Item("MATERIAL").Value
' myWorksheet.Range("I" & line).Value = myparameters.Item("STATE").Value
' myWorksheet.Range("J" & line).Value = myparameters.Item("THICKNESS/DIAMETER").Value
' myWorksheet.Range("K" & line).Value = myparameters.Item("OBSERVATIONS").Value
' myWorksheet.Range("L" & line).Value = myparameters.Item("LENGHT").Value
' myWorksheet.Range("M" & line).Value = myparameters.Item("WIDTH").Value
' myWorksheet.Range("N" & line).Value = myparameters.Item("MASS").Value
' On Error GoTo 0
myreference = oFrontViewGB.Document.PartNumber
myname = oFrontViewGB.Document.Name
If formatcalque = "A0" Then '=> SI la condition 1 est vraie ALORS
X = 841 + 50
ElseIf formatcalque = "A1" Then '=> SINON, SI la condition 2 est vraie ALORS
X = 544
ElseIf formatcalque = "A2" Then '=> SINON, SI la condition 3 est vraie ALORS
X = 297
ElseIf formatcalque = "A3" Then '=> SINON, SI la condition 4 est vraie ALORS
X = 123
Else '=> SINON
X = 0
End If
MsgBox nom & " " & formatcalque & ", " & X & " ans" 'affiche le format
Set opic = CATIA.ActiveDocument.Sheets.ActiveSheet.Views.Item(2).Pictures
If formatcalque = "A0" Then '=> SI la condition 1 est vraie ALORS
Set onewpic = opic.Add("XXXX", 0, 0)
ElseIf formatcalque = "A1" Then '=> SINON, SI la condition 2 est vraie ALORS
Set onewpic = opic.Add("XXXX", 0, 0)
ElseIf formatcalque = "A2" Then '=> SINON, SI la condition 3 est vraie ALORS
Set onewpic = opic.Add("XXXX", 0, 0)
ElseIf formatcalque = "A3" Then '=> SINON, SI la condition 4 est vraie ALORS
Set onewpic = opic.Add("XXXX", 0, 0)
Else '=> SINON
Set onewpic = opic.Add("XXXX", 0, 0)
End If
Set opic = CATIA.ActiveDocument.Sheets.ActiveSheet.Views.Item(2).Pictures
Set onewpic = opic.Add("XXXX", 45 + X, 10)
Dim DrwViews As DrawingViews 'make background view active
Set DrwViews = MyDrawingSheet.Views
DrwViews.Item("Background View").Activate
'Set myText.... As DrawingText - adding texts
Set myText = MyDrawingViews.ActiveView.Texts.Add(myreference, 136 + X - 52, 84) 'coordinates x=22, y=38 of left bottom corner of the text location
'Set myText1 = MyDrawingViews.ActiveView.Texts.Add(mat, 128 + X - 52, 73)
Set myText2 = MyDrawingViews.ActiveView.Texts.Add(mymat, 229 + X - 52, 73)
Set myText2 = MyDrawingViews.ActiveView.Texts.Add(myname, 150 + X - 52, 26)
Dim iFortSize1 As Double 'font text size
iFontSize1 = 3.5
'myText1.SetFontSize 0, 0, 3.5 'iFontSize
'next lines with a different size for fonts - 2.5
Set myText10 = MyDrawingViews.ActiveView.Texts.Add(formatcalque, 228 + X, 40)
Set myText11 = MyDrawingViews.ActiveView.Texts.Add("AAAA", 250 + X, 0)
Dim iFortSize10 As Double
iFontSize10 = 2.5
myText10.SetFontSize 0, 0, 2.5 'iFontSize
Dim iFortSize11 As Double
iFontSize11 = 2.5
myText11.SetFontSize 0, 0, 2.5 'iFontSize
'Declarations
Dim DrwDocument As DrawingDocument
Dim DrwSheets As DrawingSheets
Dim DrwSheet As DrawingSheet
Dim DrwView As DrawingView
Dim DrwTexts As DrawingTexts
Dim Text As DrawingText
Dim Fact As Factory2D
Dim Point As Point2D
Dim line As Line2D
Dim Cicle As Circle2D
Dim Selection As Selection
Dim GeomElems As GeometricElements
Set DrwDocument = CATIA.ActiveDocument
Set DrwSheets = DrwDocument.Sheets
Set Selection = DrwDocument.Selection
Set DrwSheet = DrwSheets.ActiveSheet
Set DrwView = DrwSheet.Views.ActiveView
Set DrwTexts = DrwView.Texts
Set Fact = DrwView.Factory2D
Set GeomElems = DrwView.GeometricElements
'draw frame bottom line
Set Line1 = Fact.CreateLine(20, 5, 205, 5) 'these are the coordinates of the starting point x=20, y=5 of the line and end point of the line x=205, y=5
Line1.Name = "Line1"
CATIA.ActiveDocument.Selection.VisProperties.SetRealWidth 3, 1
CATIA.ActiveDocument.Selection.Clear
'draw frame upper line
Set Line2 = Fact.CreateLine(20, 292, 205, 292)
Line2.Name = "Line2"
CATIA.ActiveDocument.Selection.VisProperties.SetRealWidth 3, 1
CATIA.ActiveDocument.Selection.Clear
'draw a thin line
Set Line3 = Fact.CreateLine(20, 40, 120, 40)
Line3.Name = "Line3"
CATIA.ActiveDocument.Selection.Add Line3
Set visProperties1 = CATIA.ActiveDocument.Selection.VisProperties
visProperties1.SetRealLineType 1, 0.2
Set visProperties1 = CATIA.ActiveDocument.Selection.VisProperties
visProperties1.SetRealWidth 1, 0.2
CATIA.ActiveDocument.Selection.Clear
' You can continue to draw the rest of the lines and try other settings...
UserForm4.Show
End SubMerci beaucoup pour ton aide ;)
Si j'ai bien compris, la variable myname est défini dans le module A (extrait joint) et est initialisé dans la procédure Cat_main du même module et à la fin tu affiches le UserForm4.
Dans le code associé à UserForm4, tu as créé ou mis à jour l'événement Initialize ? voir ci-dessous (j'ai arbitrairement affecté la valeur à TextBox1)
Attention dans ton 1er message tu avais la ligne de code "TextBox1 = myname.value" le [.value] n'était pas du bon côté
Private Sub UserForm4_Initialize()
' Affectation aux Textbox
TextBox1.Value = Getmyname()
End SubBonjour,
Excuses moi je n'ai pu me remettre sur le sujet que ce matin...
Je ne comprends pas ce que je dois mettre dans mon module A ainsi que ce que je dois mettre dans le code du UserForm4