XL 2016 Variable d'un module de classe à un autre

marg55

XLDnaute Nouveau
Bonjour,

Je souhaite dans la réalisation de mon programme, récupérer un variable que je créer dans un module de classe dans un autre module de classe, bien que j'ai beaucoup lu sur le sujet, je ne trouve pas de solution.
Vous pouvez vous en douter, ma variable est déclaré en Public dans le module principe.

Ceci est une sous procédure de mon premier module de classe dans lequel j'utilise la variable "rec" pour la première fois,
VB:
Sub NomObj(i As Integer, rec As String, IDobjet As String, ComboBox As MSForms.ComboBox)
    
    Dim type_controle As String
    Set ComboBox = Initialisation.Controls("ComboBox1")
    'Associser à chaque choix de la ComboBox une lettre
    Select Case ComboBox
        Case "Controle mecanique"
            type_controle = "A"
        Case "Controle electrique"
            type_controle = "B"
    End Select
    
    'ne garder la chaine rec qu'a partir du 6ème élement
    rec = Mid(rec, 6)
    
    'regrouper les différents éléments du nom pour créer l'identifiant au complet
    IDobjet = type_controle & "0" & rec & Format((i - 4), "000")
        
End Sub

Je la déclare de la sorte dans la procédure principale :
Code:
NomObj i, (Cells(4, captionID.Column)), IDobjet, ComboBox


Ici, j'ai ma deuxième classe, dans laquelle je souhaiterai réutiliser le rec, le fait de l'avoir re-déclarer, fait qu'elle est vide, comme si c'était une variable nouvelle.
Code:
Option Explicit
Public WithEvents Bouton As MSForms.CommandButton


Sub Bouton_Click()
      
    Dim ComboBox As Control
    Dim i As Integer
    Dim letter As String
    Dim ctrl As Control
    Dim lettredutest As Control
    Dim X As String
    Dim rec As String
    
    Dim Multipage As MSForms.Multipage
    
    For Each ctrl In Initialisation.Controls
        If TypeOf ctrl Is MSForms.Multipage Then
            Dim page As MSForms.page
            For Each page In ctrl.Pages
                Dim pageCtrl As Control
                For Each pageCtrl In page.Controls
                    If TypeOf pageCtrl Is MSForms.ComboBox Then
                        X = Left(pageCtrl.Name, 1)
                    End If
                Next pageCtrl
            Next page
        End If
    Next ctrl
    
   ' For Each ctrl In Initialisation.Controls
   '     If TypeOf ctrl Is MSForms.TextBox Or TypeOf ctrl Is MSForms.ComboBox Then
   '        X = Left(ctrl.Name, 1)
   '     End If
   ' Next ctrl
    
    'Sanction en fonction du type de controle (lettre) et de la ligne du test
    For i = 1 To (DerniereLigne - 4)
        If Initialisation.Controls(X & "0" & rec & "00" & i) = "OK" Then
            Initialisation.Controls("L" & X & "000100" & i) = "CORRECT"
        ElseIf Initialisation.Controls(X & "000100" & i) = "NOK" Then
            Initialisation.Controls("L" & X & "000100" & i) = "ERREUR"
        End If
    Next i

End Sub

Comme je vous le disais, la variable est déclarée public dans le module initiale.
Je suis preneuse si quelqu'un à une solution que je n'ai pas capter !

Merci,
Margot.
 

dysorthographie

XLDnaute Accro
Bonjour,
Une variable public, dans un module de classe, est visible à l'extérieur de l'instance de la classe????

Un classe c'est un peu comme un type variable intelligente ! Tu peux donc instencier plusieurs variables avec ce type. Pour accéder à une propriété {variable} public sans risques d'embiguité il faut déclinner la propriété depuis la racine de l'instance.
Code:
dim MyClass as New classe2 'new instence 
MyClass.MyVarablePubic="Toto"
 
Dernière édition:

marg55

XLDnaute Nouveau
bonjour,
et merci pour votre réponse,
dans mon cas est ce que ca veut dire qu'il faut que je déclare au même endroit que la ou je déclare ma classe, ma variable ? Je ne comprends pas si je dois utiliser Dim, public ou autre chose? ou rien? Et va variable étant une varibale je ne peux pas lui assigner "toto" comment est ce que je peux faire ?
 

marg55

XLDnaute Nouveau
Bonjour à tous,

si quelqu'un tombe sur ca un jour car il a le même problème, en fait ma variable passe bien d'un module de classe à l'autre si je la déclare publique dans le module inital, il faut en revanche faire bien attention à comment on la défini. Car si on la modifie en cours de route et qu'on a a nouveau besoin de la premiere version, ou si on la modifie en cours de route et qu'elle passe d'une chaine de caractère de type rec_01 à 01 ce n'est plus une string mais une Variant.

C'était donc cela le problème pour moi ! Merci de m'avoir aidé @dysorthographie
 

Discussions similaires

Réponses
29
Affichages
911

Membres actuellement en ligne

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16