Créer une classe en vb pour recuperer le contenu d'un userform

sabrine1311bb -  
Zoul67 Messages postés 2001 Statut Membre -
Bonjour,

Je souhaite remplir les cellules de plusieurs feuilles excel à partir d'un formulaire que j'ai crée.
Le probléme est que je dois d'abord utiliser ces champs partout dans le code et non pas que dans le userform.
Je n'arrive pa à creer une classe en vb pour récuperer le contenu de tous les controls dans des variables et pouvoir ensuite les utiliser pour remplir les differentes cellules.

j'ai commencé à créer une classe, mais je ne sais pas comment utiliser les propriétes Let et Get ?
Et si on doit declarer le contenu des controls dansces propriétes??
Classe Variables_Formulaire
'---------------------

Dim Business_Assurance_RESP As Variant
Dim BnB_Date As Variant
Dim Date_Ouverture As Variant
Dim Strategic_Deal As Variant
Dim IC_Name As Variant
Dim Process_Step As Variant
Dim Decision As Variant
Dim Date_Submission As Variant
Dim Other_Region As Variant
Dim Lead_Region As Variant
Dim contract_Lengh As Variant
Dim G_Margin As Variant
Dim TCV_EURO As Variant
Dim RiskL As Variant
Dim NSiebel As Variant
Dim Scope_Deal As Variant
Dim Categorie_Deal As Variant
Dim Customerr As Variant

'--------------------------
'
' Business_Assurance_RESP
'
'--------------------------
Public Property Get Resp() As Variant
nom de mon control dans user form = Business_Assurance_RESP '( cest bien ce qu'il faut mettre dans get ??)
End Property
Public Property Let Business_Assurance_RESP(Value As String)
Business_Assurance_RESP = Value
End Property

'
Merci de votre aide

3 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,

    Je souhaite remplir les cellules de plusieurs feuilles excel à partir d'un formulaire que j'ai crée.
    Pas besoin d'un module de classe si ce n'est que ça.

    Le probléme est que je dois d'abord utiliser ces champs partout dans le code et non pas que dans le userform.
    Si le contenu de vos champs, stockés dans des variables, doit être utilisé dans d'autres Modules (standard, modules de feuille etc.), vous pouvez les déclarer comme étant des variables publiques, en tête d'un module standard. Elles seront ainsi lisibles depuis tout le projet VBA.
    Exemple :
    Un Userform avec 1 textbox (TextBox1) et un bouton (CommandButton1).
    Dans le module de l'userform ce code :
    Private Sub CommandButton1_Click()
    If TextBox1 = "" Then
        MaVar = "Vous n'avez rien écrit dans le TextBox"
    Else
        MaVar = TextBox1.Value
    End If
    Call Message
    End Sub


    Dans un module standard :
    Option Explicit
    
    Public MaVar As String
    
    Public Sub Message()
      MsgBox MaVar
    End Sub


    Attention également à ne pas typer toutes vos variables As Variant, à moins que cela ne vous soit indispensable.
    0
  2. sabrine1311bb Messages postés 15 Statut Membre
     
    voici le code (mis à jour)
    ---------------------
    ' Classe Variables_Formulaire
    '---------------------

    Dim V_Business_Assurance_RESP As Variant
    Dim V_BnB_Date As Variant
    Dim V_Date_Ouverture As Variant
    Dim V_Strategic_Deal As Variant
    Dim V_IC_Name As Variant
    Dim V_Process_Step As Variant
    Dim V_Decision As Variant
    Dim V_Date_Submission As Variant
    Dim V_Other_Region As Variant
    Dim V_Lead_Region As Variant
    Dim V_contract_Lengh As Variant
    Dim V_G_Margin As Variant
    Dim V_TCV_EURO As Variant
    Dim V_RiskL As Variant
    Dim V_NSiebel As Variant
    Dim V_Scope_Deal As Variant
    Dim V_Categorie_Deal As Variant
    Dim V_Customerr As Variant

    '--------------------------
    '
    ' Business_Assurance_RESP
    '
    '--------------------------
    Public Property Get Business_Assurance_RESP() As Variant
    Business_Assurance_RESP = V_Business_Assurance_RESP
    End Property
    Public Property Let Business_Assurance_RESP(ByVal vNewValue As Variant)
    V_Business_Assurance_RESPl = vNewValue
    End Property
    '--------------------------
    '
    'Strategic_Deal
    '
    '--------------------------
    Public Property Get StrategicDeal() As Integer
    StrategicDeal = V_Strategic_Deal
    End Property
    Public Property Let Strategic_Deal(ByVal vNewValue As Variant)
    V_Strategic_Deal = vNewValue
    End Property

    '-------------------------
    '
    'BnB_Date
    '
    '--------------------------

    Public Property Get BnB_Date() As Integer
    BnB_Date = V_BnB_Date
    End Property
    Public Property Let BnB_Date(ByVal vNewValue As Variant)
    V_BnB_Date = vNewValue
    End Property

    '-------------------------
    '
    'Date_Ouverture
    '
    '--------------------------

    Public Property Get Date_Ouverture() As Integer
    Date_Ouverture = V_Date_Ouverture
    End Property
    Public Property Let Date_Ouverture(ByVal vNewValue As Variant)
    V_BnB_Date = vNewValue
    End Property

    '-------------------------
    '
    'IC_Name
    '
    '--------------------------

    Public Property Get IC_Name() As Integer
    IC_Name = V_IC_Name
    End Property
    Public Property Let IC_Name(ByVal vNewValue As Variant)
    V_IC_Name = vNewValue
    End Property

    '-------------------------
    '
    'Process_Step
    '
    '--------------------------

    Public Property Get Process_Step() As Integer
    Process_Step = V_Process_Step
    End Property
    Public Property Let Process_Step(ByVal vNewValue As Variant)
    V_Process_Step = vNewValue
    End Property

    '-------------------------
    '
    'Decision
    '
    '--------------------------

    Public Property Get Decision() As Integer
    Decision = V_Decision
    End Property
    Public Property Let Decision(ByVal vNewValue As Variant)
    V_Decision = vNewValue
    End Property

    '-------------------------
    '
    'Date_Submission
    '
    '--------------------------

    Public Property Get Date_Submission() As Integer
    Date_Submission = V_Date_Submission
    End Property
    Public Property Let Date_Submission(ByVal vNewValue As Variant)
    V_Date_Submission = vNewValue
    End Property

    '-------------------------
    '
    'Other_Region
    '
    '--------------------------

    Public Property Get Other_Region() As Integer
    Other_Region = V_Other_Region
    End Property
    Public Property Let Other_Region(ByVal vNewValue As Variant)
    V_Other_Region = vNewValue
    End Property

    '-------------------------
    '
    'Lead_Region
    '
    '--------------------------

    Public Property Get Lead_Region() As Integer
    Lead_Region = V_Lead_Region
    End Property
    Public Property Let Lead_Region(ByVal vNewValue As Variant)
    V_Lead_Region = vNewValue
    End Property

    '-------------------------
    '
    'contract_Lengh
    '
    '--------------------------

    Public Property Get contract_Lengh() As Integer
    Other_Region = V_contract_Lengh
    End Property
    Public Property Let contract_Lengh(ByVal vNewValue As Variant)
    V_Other_Region = vNewValue
    End Property

    '-------------------------
    '
    'G_Margin
    '
    '--------------------------

    Public Property Get G_Margin() As Integer
    G_Margin = V_G_Margin
    End Property
    Public Property Let G_Margin(ByVal vNewValue As Variant)
    V_G_Margin = vNewValue
    End Property

    '-------------------------
    '
    'TCV_EURO
    '
    '--------------------------

    Public Property Get TCV_EURO() As Integer
    TCV_EURO = V_TCV_EURO
    End Property
    Public Property Let TCV_EURO(ByVal vNewValue As Variant)
    V_TCV_EURO = vNewValue
    End Property
    '-------------------------
    '
    'RiskL
    '
    '--------------------------

    Public Property Get RiskL() As Integer
    RiskL = V_RiskL
    End Property
    Public Property Let RiskL(ByVal vNewValue As Variant)
    V_RiskL = vNewValue
    End Property
    '-------------------------
    '
    'NSiebel
    '
    '--------------------------

    Public Property Get NSiebel() As Integer
    NSiebel = V_NSiebel
    End Property
    Public Property Let NSiebel(ByVal vNewValue As Variant)
    V_NSiebel = vNewValue
    End Property

    '-------------------------
    '
    'Scope_Deal
    '
    '--------------------------

    Public Property Get Scope_Deal() As Integer
    Scope_Deal = V_Scope_Deal
    End Property
    Public Property Let Scope_Deal(ByVal vNewValue As Variant)
    V_Scope_Deal = vNewValue
    End Property

    '-------------------------
    '
    'Categorie_Deal
    '
    '--------------------------

    Public Property Get Categorie_Deal() As Integer
    Categorie_Deal = V_Categorie_Deal
    End Property
    Public Property Let Categorie_Deal(ByVal vNewValue As Variant)
    V_Categorie_Deal = vNewValue
    End Property

    '-------------------------
    '
    'Customerr
    '
    '--------------------------

    Public Property Get Customerr() As Integer
    Customerr = V_Customerr
    End Property
    Public Property Let Customerr(ByVal vNewValue As Variant)
    V_Customerr = vNewValue
    End Property

    '--------------------------
    '
    ' methode Remplir
    '
    '--------------------------
    Sub Remplir(BnB_Date)
    MsgBox (BnB_Date)
    End Sub

    '--------------------------
    '
    ' methode Effacer
    '
    '--------------------------
    Sub regarder()
    MsgBox (Strategic_Deal)
    End Sub

    'La fonction de recuperation du contenu de control utilisée avant
    'mais avec le "Me" faisant referance au userform je ne peux pas utiliser les variables dans tts les modules

    V_Business_Assurance_RESP = Me.Resp.Value
    V_BnB_Date = Me.TextBox3.Value
    V_Date_Ouverture = Me.TextBox4.Value
    V_Strategic_Deal = Me.StrategicDeal.Value
    V_IC_Name = Me.IC.Value

    V_Process_Step = Me.ComboBox4.Value
    V_Decision = Me.Decision.Value
    V_Date_Submission = Me.DateRep.Value
    V_Other_Region = Me.OtherReg.Value
    V_Lead_Region = Me.ComboBox4.Value
    V_contract_Lengh = Me.CONTRACT.Value
    V_G_Margin = Me.GM.Value
    V_TCV_EURO = Me.TCV.Value
    V_RiskL = Me.RL.Value
    V_NSiebel = Me.Siebel.Value

    V_Scope_Deal = Me.Scope.Value

    V_Categorie_Deal = Me.CatDeal.Value

    V_Customerr = Me.cus.Value

    MsgBox "" & Customerr
    MsgBox "" & NSiebel

    Merci de votre aide
    0
  3. sabrine1311bb Messages postés 15 Statut Membre
     
    Merci infiniment pour ton aide,
    mais le pb c'est que meme si je declare mes variables en public et ma fonction de recup en public aussi si je fais un appel de ma fonction en dehors du module dans lequel est declarée, cela me renvoie une erreur de complilation sub ou function non definie!

    ''decalaration de mes variable en haut "
    Public Customerr As Variant, RiskL As Variant, TCV_EURO As Variant, G_Margin As Variant, NSiebel As Variant, contract_Lengh As Variant
    Public Lead_Region As Variant, Other_Region As Variant, Date_Submission As Variant, Decision_GO As Variant, Process_Step As Variant
    Public IC_Name As Variant, Categorie_Deal As Variant, Strategic_Deal As Variant, Scope_Deal As Variant, Date_Ouverture As Variant, BnB_Date As Variant, Business_Assurance_RESP As Variant


    "la fonction RECUP Appelée dans le mme module ca marche mais en dehorsn'est pas definie"

    Private Sub CommandButton9_Click()
    Call RECUP
    End Sub
    
     Public Sub RECUP()
     
    
    Business_Assurance_RESP = Me.Resp.Value
    BnB_Date = Me.TextBox3.Value
    Date_Ouverture = Me.TextBox4.Value
    Strategic_Deal = Me.StrategicDeal.Value
    IC_Name = Me.IC.Value
    
    Process_Step = Me.ComboBox4.Value
    Decision = Me.Decision.Value
    Date_Submission = Me.DateRep.Value
    Other_Region = Me.OtherReg.Value
    Lead_Region = Me.ComboBox4.Value
    contract_Lengh = Me.CONTRACT.Value
    G_Margin = Me.GM.Value
    TCV_EURO = Me.TCV.Value
    RiskL = Me.RL.Value
    NSiebel = Me.Siebel.Value
    
    Scope_Deal = Me.Scope.Value
    
    Categorie_Deal = Me.CatDeal.Value
    
    Customerr = Me.cus.Value
    
    MsgBox "" & Customerr
    MsgBox "" & NSiebel
    
    'calcul des variables auto
    'managername = manager(IC_Name)
    
    
    End Sub


    Cordialement,
    sabrine
    0
    1. Zoul67 Messages postés 2001 Statut Membre 149
       
      Bonjour,

      Je pense que tu as de bonnes connaissances dans les langages orientés objet. Mais...
      En VBA Excel, il y a moyen de faire des choses simplement pour couvrir des besoins simples (d'où pijaku : "Pas besoin d'un module de classe si ce n'est que ça").
      Or, remplir des cellules à partir de saisies dans un UserForm semble assez basique.
      Déjà, je ne comprends pas l'intérêt des variables intermédiaires entre les contrôles du UserForm et les cellules à remplir.

      Peux-tu réexpliquer ton besoin ou transmettre ton fichier via https://www.cjoint.com/ ?

      A+
      0
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Le problème ne vient pas de là.
      Le problème est que Me, se référant à ton UserForm, n'est pas référencé dans ton Module standard. Par conséquent inconnu...
      Le "truc" c'est de passer ton UserForm en paramètre de ta fonction.
      Du coup essaye ceci :

      dans ton module standard :
      Public Customerr As Variant, RiskL As Variant, TCV_EURO As Variant, G_Margin As Variant, NSiebel As Variant, contract_Lengh As Variant
      Public Lead_Region As Variant, Other_Region As Variant, Date_Submission As Variant, Decision_GO As Variant, Process_Step As Variant
      Public IC_Name As Variant, Categorie_Deal As Variant, Strategic_Deal As Variant, Scope_Deal As Variant, Date_Ouverture As Variant
      Public BnB_Date As Variant, Business_Assurance_RESP As Variant
      
      Public Sub RECUP(UF As UserForm)
      With UF
          Business_Assurance_RESP = .resp.Value
          BnB_Date = .TextBox3.Value
          Date_Ouverture = .TextBox4.Value
          Strategic_Deal = .StrategicDeal.Value
          IC_Name = .IC.Value
      
          Process_Step = .ComboBox4.Value
          Decision = .Decision.Value
          Date_Submission = .DateRep.Value
          Other_Region = .OtherReg.Value
          Lead_Region = .ComboBox4.Value
          contract_Lengh = .CONTRACT.Value
          G_Margin = .GM.Value
          TCV_EURO = .TCV.Value
          RiskL = .RL.Value
          NSiebel = .Siebel.Value '
      
          Scope_Deal = .Scope.Value
          
          Categorie_Deal = .CatDeal.Value
      
          Customerr = .cus.Value
      
          MsgBox "" & Customerr
          MsgBox "" & NSiebel
      End With
      'calcul des variables auto
      'managername = manager(IC_Name)
      End Sub


      Dans le module de l'userform :
      Private Sub CommandButton9_Click()
      Dim USF As UserForm
      
      Set USF = Me
      RECUP USF
      End Sub


      Bis Repetita : Ne déclare pas toutes tes variables As Variant...

      EDIT: j'avais oublié d'enlever les "Me"...

      Re-EDIT : Les codes sont plus jolis dans ce forum lorsqu'ils sont entourés des balises prévues à cet effet...
      0
    3. sabrine1311bb Messages postés 15 Statut Membre
       
      Merci beaucoup de votre aide
      j'ai testé cela fonctionne beaucoup mieux!
      cependant pour faire appel a ma fonction recup a partir d'un autre module (exemple le module qui active mon userform)
      Sub Formulaire()
      '
      ' Formulaire Macro
      ' Afficher le Formulaire
         
          UserForm3.Show vbModeless
          Dim USF As UserForm
      
      Set USF = Me
      RECUP USF
          ' Call RECUP
          'ActiveWorkbook.Save
          'Windows("Francebidtracking_Test.xlsm").Activate
          'MsgBox "Veuillez cliquer sur NewBid avant !"
      End Sub

      cela m'affiche erreur (utilisation incorrect du mot clé .ME)

      donc le probleme persiste, je ne pourrai pas utiliser cette fonction dans tt mon projet vb
      0
    4. sabrine1311bb Messages postés 15 Statut Membre
       
      Re-EDIT : Les codes sont plus jolis dans ce forum lorsqu'ils sont entourés des balises prévues à cet effet...

      Je suis nouvelle dans ce forum , veuillez m'indiquer comment les utiliser meme si cela parrait super sipmle :)
      merci
      0
    5. Zoul67 Messages postés 2001 Statut Membre 149
       
      En haut et à droite du cadre dans lequel tu écris, il y a les options de mise en forme.
      Sélectionne le code avec la souris puis clique sur la flèche pointant en bas et sélectionne basic.

      Recup, comme pijaku a écrit le code va coller les informations du UserForm dans les variables. Je ne suis pas sûr que tu fasses les imbrications correctement.
      0