VBA variables d'un userform dans un module

Steve -  
EBasta Messages postés 37 Statut Membre -
Bonjour,

Je vous explique mon problème, c'est sûrement simple mais ... :s

Donc voilà, je suis actuellement en stage dans une société où l'on me demande de créer un serveur pour un appareil de mesure avec le matériel et les logiciels dont ils disposaient, rien d'autre, liste des logiciels :
-Office
c'est tout oui lol donc en cherchant un peu j'ai découvert les macros d'excel, ...

et je me suis lancé dans la programmations d'un module effectuant ce qu'ils me demandaient, et j'ai réussi, je reçois les valeurs de l'appareil, les affiche, les traite, ...

le problème c'est qu'au démarrage de la macro, je souhaite que l'utilisateur puisse indiquer sur quel port COM est branché l'appareil, j'ai donc réalisé un petit userform, et je veux que quand l'oppérateur choisis par exemple com1, la variable valcom soit égale à 1, (c un exemple) donc je réussi mais là où je bloque c'est pour envoyer la variable vers le module une fois l'userform fermé ou meme avant ce n'est pas important, (j'ai des difficultés à fermer le userform, si vs avez des conseils ...) donc voilà mon problème c'est juste ça, l'explication est peut-etre longue désolé j'essayai d'etre precis.

Je vs remercie. (j'ai cherché partout avant de poser la question mais étrangement je ne trouve pas.)
Configuration: Windows Vista
Internet Explorer 7.0

3 réponses

  1. steve
     
    Merci beaucoup, je teste ça dans la journée et vous redonne très vite des nouvelles.
    1
  2. steve
     
    Ca y est je teste,
    je vous montre une partie du code :

    'Utilisations touches clavier
    Private Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal vkey As Long) As Integer
    
      Public valcom As Single 'je l'ai mise ici pour testet c'est bien ça ?
    
     Sub OLE_Demo()
    
    'déclarations
        '(1 To 99) numero de test
        Dim objServerResult As Object
        Dim vntResult(1 To 99)  As Variant
        Dim vntMin(1 To 99) As Variant
        Dim vntMax(1 To 99) As Variant
        Dim vntMnem(1 To 99) As Variant
        Dim vntTestPass(1 To 99) As Variant
        Dim vntAllPAss As Variant
        Dim vntPol(1 To 99) As Variant
        Dim vntNumberOfTests As Variant
        Dim vntUnit(1 To 99) As Variant
      
        
        UserForm2.Show
        
        Do
        Loop Until (valcom = 1) 
    'ce n'est pas ce que je veux faire mais c'est un test simple qui me permet de savoir si ça fonctionne
        
        Cells(4, 1) = UserForm2.ComboBox1.Value


    pour ce qui est du userform, pour tester je vais faire très simple aussi, juste le clique sur un bouton par exemple :

    Private Sub CommandButton1_Click()
    valcom = 1
    End Sub


    une declaration nécessaire ici je pense non ?

    comme ça ?

    Public valcom As Single
    
    
    Private Sub CommandButton1_Click()
    valcom = 1
    End Sub
    


    bon et bien voilà, ça ne fonctionne pas vraiment, ça va surement vous sembler logique mais désolé je n'ai jamais programmé de cette façon.

    MERCI
    0
    1. EBasta Messages postés 37 Statut Membre 31
       
      Public valcom as single n'est à définir qu'une seule fois. Sinon, il va y avoir conflit ! Le premier a bien été placé.

      Définir des variables ainsi permet de garder leur valeur pour tout le projet et entre les différents Sub, Function et Userform... mais il faut éviter de trop en placer : cela prend trop de mémoire. Pour cette raison, j'ai mis un Single au lieu d'un Interger, largement suffisant pour un définir les ports COM.
      0
  3. EBasta Messages postés 37 Statut Membre 31
     
    Bonjour,

    Pour envoyer une variable dans d'autres modules, il existe en gros 2 façons :

    - comme c'est sous Excel, venir copier la valeur de la variable dans une cellule du classeur,

    - définir la varible comme Public à tout le projet : A l'extérieur de tout Sub, il suffit d'écrire...

    Public valcom as Single

    Il existe aussi les passages de paramètres, mais c'est plus restrictif...

    Pour fermer un formulaire, c'est juste...

    Unloab NomFormulaire

    J'espère avoir un peu aidé !
    -1