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

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

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

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

Merci :)

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 Function

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

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

Bonjour,

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

Rechercher des sujets similaires à "pre remplissage userform via variables module"