IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Problème avec le module microsoft communication controle


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 16
    Points : 5
    Points
    5
    Par défaut Problème avec le module microsoft communication controle
    Bonjour a tous,

    Ayant besoin de faire un programme qui doit recevoir des données d'un port RS232, j'ai installer le module "microsoft communication controle version 6.0" pour pouvoir acceder à la commande MSComm.

    Seulement quand j'essaye de la placer sur un UserForm j'ai cette erreur: "Le controle n'a pas était créé car il n'est pas correctement licencié"

    Est-ce que quelqu'un peut m'aider a résoudre se problème ? =)

  2. #2
    Membre expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 477
    Points : 3 865
    Points
    3 865
    Par défaut
    Bonjour,

    En cherchant, j'ai trouvé ceci:

    Le problème d'ocx non licencié à l'air de revenir assez souvent. Il est possible de trouver toutes les infos en anglais sur le site de microsoft mais en résumé voici une démarche pour résourdre ce problème.

    L'origine du problème :

    Il existe trois package de VB6 : initiation, pro et entreprise. Chaque package est livré avec un certain nombre d'ocx :


    ActiveX Control FileName Version Edition
    ------------------------------------------ -------------------------------
    ADO Data Control 6.0 MSADODC.OCX 6.00.8171 L,P,E
    Chart Control 6.0 MSCHRT20.OCX 6.00.8177 P,E
    Comm Control 6.0 MSCOMM32.OCX 6.00.8169 P,E
    Common Dialog Control 6.0 COMDLG32.OCX 6.00.8169 L,P,E
    Data Bound List Controls 6.0 DBLIST32.OCX 6.00.8169 L,P,E
    DataGrid Control 6.0 SDATGRD.OCX 6.00.8169 L,P,E
    DataList Controls 6.0 MSDATLST.OCX 6.00.8169 L,P,E
    DataRepeater Control 6.0 MSDATREP.OCX 6.00.8169 P,E
    FlexGrid Control 6.0 MSFLXGRD.OCX 6.00.8169 L,P,E
    Hierarchical FlexGrid Control 6.0 MSHFLXGD.OCX 6.00.3005 L,P,E
    Internet Transfer Control 6.0 MSINET.OCX 6.00.8169 P,E
    MAPI Controls 6.0 MSMAPI32.OCX 6.00.8169 P,E
    Masked Edit Control 6.0 MSMASK32.OCX 6.00.8169 P,E
    Multimedia Control 6.0 MCI32.OCX 6.00.8169 P,E
    PictureClip Control 6.0 PICCLP32.OCX 6.00.8169 P,E
    RemoteData Control 6.0 MSRDC20.OCX 6.00.8169 E
    Rich Textbox Control 6.0 RICHTX32.OCX 6.00.8169 L,P,E
    SysInfo Control 6.0 SYSINFO.OCX 6.00.8169 P,E
    Tabbed Dialog Control 6.0 TABCTL32.OCX 6.00.8169 L,P,E
    Windows Common Controls-3 6.0 COMCT332.OCX 6.00.8169 P,E
    Windows Common Controls 5.0 (SP2) COMCTL32.OCX 6.00.8022 L,P,E
    Windows Common Controls 6.0 MSCOMCTL.OCX 6.00.8177 L,P,E
    Windows Common Controls-2 5.0 (SP2) COMCT232.OCX 6.00.8022 L,P,E
    Windows Common Controls-2 6.0 MSCOMCT2.OCX 6.00.8177 L,P,E
    Winsock Control 6.0 MSWINSCK.OCX 6.00.8169 P,E

    L = Learning Edition
    P = Professional Edition
    E = Enterprise Edition

    Si tu as une version base, en chargeant des sources venant de version pro ou entreprise tu te trouves avec le message "Le controle n'a pas été créé parce qu'il n'est pas correctement licencié" même si tu as récupéré le fichier ocx manquant.

    Dans certains cas, c'est mscomm32.ocx.

    Tu peux le récupérer et le mettre dans system32 et lancer la commande
    <Path to RegSvr32>\REGSVR32.EXE /u <Path to OCX>\OCXFILE.OCX (comme indiqué sur le site microsoft).

    Ensuite, tu télécharges les deux fichiers :



    Exécution des .exe et le problème devrait être résolu.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    Effectivement j'avais déjà esssayer cette solution, mais quand je lance les deux .exe j'ai des messages d'erreur.

    VB6CLI me dit que visual basic 6.0 n'est pas présent sur dans mon système
    et VBUCS me dit que visual basic n'est pas présent dans mon système.

  4. #4
    Membre expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 477
    Points : 3 865
    Points
    3 865
    Par défaut
    Re-,
    Bon, j'ai vu ceci aussi

    1-En effet le controle MSCOMM n'est pas fourni avec EXCEL (donc pas de licence). Par contre, il est tout à fait exploitable.
    Copier le fichier MSComm32.ocx dans le dossier system de windows
    (en principe c:\windows\system32)
    Enregistrer l'ocx MSComm32.ocx dans le registre Windows par la commande Shell: Regsvr32 MSComm32.ocx.
    2-En VBA, il suffit ensuite d'instancier une nouvelle classe du controle

    On déclare d'abord la variable :
    Dim comm as Object

    Puis on l'instancie :
    Set comm = CreateObject("MSCommLib.MSComm")
    With comm
    .CommPort = 1
    .Settings = "9600,n,8,1"
    .PortOpen = True
    End With

    Pour savoir si des données sont arrivées :
    If comm.InBufferCount > 0 Then
    ...

    L'utilisation du controle se fait alors sans problème pour lire des données :
    Dim strin as String
    strin = comm.Input

    ou pour en envoyer
    Dim strout as String
    comm.Output =strout

    Pour libérer le controle utiliser
    comm.PortOpen = False
    Set comm = Nothing
    Ou ici : http://www.developpez.net/forums/d11...ode-xp-resolu/

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    En utilisant la solution VBA j'obtiens cette erreur:

    erreur '429'
    Un composant ActiveX ne peut pas être créé

    Pour la solution en utilisant les clefs je ne sais pas comment l'utiliser, je n'ai jamais fait ça, si tu peux m'expliquer comment faire ? :/

  6. #6
    Membre expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 477
    Points : 3 865
    Points
    3 865
    Par défaut
    Re-

    voici encore de quoi chercher et ... trouver
    http://caron.developpez.com/dotnet/port_serie/
    http://www.developpez.net/forums/d10...win-7-64-bits/
    Tu pourrais aussi voir ceci : la classe "System.IO.Ports.SerialPort"


    Aussi non, vu ceci (Principe : Les ActiveX possèdent tous deux méthodes qui s'appellent 'DLLRegisterServer' et 'DLLUnRegisterServer' ; REGSVR32 ne fait rien d'autres que les appeller suivant le cas... )


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    Option Explicit
     
    ' #####################################################################################
    ' # Reg auto d'un ActiveX
    ' # Peut être utile pour un plug in
    ' #####################################################################################
     
    Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
    Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
    Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
    Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Any, ByVal wParam As Any, ByVal lParam As Any) As Long
    Private Const ERROR_SUCCESS = &H0
     
    Public Function RegisterServer(ByVal Prm_L_hWnd As Long, ByVal Prm_S_DllServerPath As String, byval Prm_B_Register As Boolean) as boolean
     
        On Error Goto RegisterServer_Err
     
        Dim L_Lib As Long
        Dim L_ProcAdress As Long
     
        L_Lib = LoadLibrary(Prm_S_DllServerPath)
     
        If Prm_B_Register Then
            L_ProcAdress = GetProcAddress(L_Lib, "DllRegisterServer")
        Else
            L_ProcAdress = GetProcAddress(L_Lib, "DllUnregisterServer")
        End If
     
        If CallWindowProc(L_ProcAdress, Prm_L_hWnd, ByVal 0&, ByVal 0&, ByVal 0&) = ERROR_SUCCESS Then
          RegisterServer = True
        Else
            RegisterServer = False
        End If
     
        Call FreeLibrary(L_Lib)
     
        Exit Function
     
    RegisterServer_Err:
     
        Call MsgBox("Erreur numéro : " & Err.Number & vbCrLf & "Description : " & Err.Description)
     
    End Function
    Donc, pour l'utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call RegisterServer(Form1.hWnd, "COMCTL32.OCX", True) ' False pour Unregister

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    Re,

    J'avais déjà regarder la classe SerialPort et je garde cette solution si vraiment je n'arrive pas à utiliser MSComm.

    MSComm est pour moi beaucoup plus facile d'utilisation !

    Je viens de tester le code que tu m'avais donner et j'obtiens une erreur sur la variable erreur : membre de méthode ou de donnée introuvable

    EDIT: j'ai oublier de dire que je travail sous XP. C'est peut être un detail, mais comme tout les tutos que je trouve sont pour seven il y a peut être pas de compatibilité (après je dis ca, c'est peut être des conneries !)

Discussions similaires

  1. problème avec le module TK
    Par thierry7106 dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 12/05/2007, 14h50
  2. Probléme avec le module turtle
    Par Newbie46 dans le forum Général Python
    Réponses: 7
    Dernier message: 15/02/2007, 22h03
  3. Problème avec le xml microsoft
    Par stefma dans le forum Excel
    Réponses: 4
    Dernier message: 08/12/2006, 16h43
  4. problème avec le module DBI
    Par vbcasimir dans le forum SGBD
    Réponses: 6
    Dernier message: 08/10/2005, 13h48
  5. problème avec un module
    Par vbcasimir dans le forum Modules
    Réponses: 2
    Dernier message: 29/08/2005, 16h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo