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

Fermé
sabrine1311bb - 11 mars 2014 à 15:03
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 - 12 mars 2014 à 17:48
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
A voir également:

3 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
11 mars 2014 à 16:02
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
sabrine1311bb Messages postés 14 Date d'inscription mardi 11 mars 2014 Statut Membre Dernière intervention 12 mars 2014
11 mars 2014 à 16:03
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
sabrine1311bb Messages postés 14 Date d'inscription mardi 11 mars 2014 Statut Membre Dernière intervention 12 mars 2014
Modifié par pijaku le 11/03/2014 à 18:30
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
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
11 mars 2014 à 16:47
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
Modifié par pijaku le 11/03/2014 à 16:51
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
sabrine1311bb Messages postés 14 Date d'inscription mardi 11 mars 2014 Statut Membre Dernière intervention 12 mars 2014
Modifié par pijaku le 11/03/2014 à 18:31
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
sabrine1311bb Messages postés 14 Date d'inscription mardi 11 mars 2014 Statut Membre Dernière intervention 12 mars 2014
11 mars 2014 à 17:30
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
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
11 mars 2014 à 17:55
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