Problème codage Visual Basic

Signaler
-
 Nimrod86 -
Bonjour,

j'ai un projet, je dois récupérer les données mesurées par un appareil et les envoyer sur excel par liaison RS232, j'ai compris qu'il fallait créer un macro sous excel seulement je ne comprend absolument rien, j'ai trouvé 2/3 programmes mais lorsque je les exécute j'ai un message d'erreur qui s'affiche : "objet requis" si quelqu'un peu m'aider soit à écrire un programme ou a débuguer ceux que j'ai trouvé sur internet.

Exemple de programme :


Private Sub CommandButton1_Click()

'Permet Theoriquement de stoper la boucle en fermant le port ...

Select Case CommandButton1.Caption
    Case "Start"
        NETComm1.PortOpen = True
        CommandButton1.Caption = "Stop"
    Case "Stop"
        NETComm1.PortOpen = False
        CommandButton1.Caption = "Start"
End Select




End Sub

Private Sub NETComm1_OnComm()


'Lecture en boucle du port tant que celui-ci est ouvert

Dim Buffer As String
Dim PauseTime, Start


Do While NETComm1.PortOpen = True


Select Case NETComm1.CommEvent
    Case "5"
        Buffer = (NETComm1.InputData)
    Case Else
        Buffer = "NO DATA"
End Select

    TextBox1.Text = Buffer
    
    PauseTime = 2
    Start = Timer
    Do While Timer < Start + PauseTime
      
    Loop


Loop





End Sub

Private Sub UserForm_Initialize()

'Parametrage du port

NETComm1.CommPort = "1"
NETComm1.Settings = "9600,n,8,1"



End Sub


Merci d'avance.

EDIT: Ajout de la coloration syntaxique.

24 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
De quoi s'agit-il exactemenjt ?
1) de piloter Excel DEPUIS UN PROJET VB6 et un mscomm se trouvant DANS VB6
2) ou piloter Excel DEPUIS UN PROJET VB6 et un mscomm se trouvant DANS Excel ?
3) ou de développer DEPUIS VBA/Excel et un mscomm se trouvant DANS Excel (et donc SANS VB6 et dans ce cas tu n'es pas sur le bon sous-forum ! Et la solution VBA existe également !) ?
C'est très loin d'être la même chose et il importe que tu sois très clair sur ce point ESSENTIEL

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
J'attends ta réponse pour te donner la mienne (elle est sacrément dépendante de TA réponse) !
Lis ma signature ...

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Bonjour,
Tu ne dis pas sur quelle ligne tu as cette erreur.
Quel objet as-tu inséré et nommé NETComm1 ?
Bonjour,

Justement j'ai une erreur sur cette ligne apparemment : NETComm1.CommPort = "COM1" .

Je ne sais pas ce que c'est, comme je l'ai dit avant je n'y connais vraiment rien, j'ai pris ce code sur internet ...
(j'ai juste remplacé 1 par COM1 je sais pas si cela signifie quelque chose, cela ne marchait pas avec 1 non plus, je veux récupérer mon canal 1 qui correspond a ma liaison rs232)

Merci de vous attardez sur mon cas ! ^^
AH si autant pour moi NETComm1 j'ai mit l'icone de NETCOM dans l'userform.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
j'ai mit l'icone de NETCOM dans l'userform.

où as-tu pris cette "icône" ?
L'erreur dénoncée est claire : il n'y a aucun contrôle nommé NETComm1 sur ton usedrform.
Si pourtant j'ai un icone que j'ai obtenu en téléchargeant netcomm.ocx je l'ai mit dans mon userform et à coté de (name) il y a NETComm1 je ne comprends pas pourquoi ça ne fonctionne pas ...
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Désolé, mais tu as dit ceci :
lorsque je les exécute j'ai un message d'erreur qui s'affiche : "objet requis"

et ceci :
Justement j'ai une erreur sur cette ligne apparemment : NETComm1.CommPort = "COM1" .

et la conclusion, si l'on s'en tient à ce que tu as dit, ne peut qu'être celle que je t'ai dite.

Voyons voir :
ajoute à ton userform une textbox textbox1 dont la propriété multiline est mise à true. et un bouton de commande commanbutton2 et ce code :
Private Sub CommandButton2_Click()
TextBox1.Text = ""
For Each Control In Me.Controls
TextBox1.SelText = Control.Name & " : " & TypeName(Control) & vbCrLf
Next
TextBox1.SelText = Me.Name
End Sub

lance ===>> clique sur commanbutton2 ===>> copie/colle-nous ici ce que tu as dans la textbox textbox1

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Je viens de découvrir de surcroît que le composant (qui n'est pas de Microsoft) NETComm.ocx est lui-même dépendant du composant Microsoft MSCOMM32.OCX, qu'il "wraps" !
Se posent alors possiblement de nombreux problèmes :
- celui de la license de MSCOMM32.OCX, si NETComm.ocx distribue, lors de son installation, le composant Microsoft qu'il "englobe"
- celui de la présence sur la machine utilisatrice du composant MSCOMM32.OCX. Et de son enregistrement

Il est alors assez possible que le message que tu reçois (celui de l'absence d'un objet) n'est pas généré par ta propre application, mais par le composant NETComm. ocx qui cherche en vain à utiliser cette dépendance ( MSCOMM32.OCX) alors qu'elle est absente.

Si tel est bien le cas, nous ne pourrons rien pour toi. Il t'appartient de prendre l'attache du concepteur de NETComm.ocx et de lui demander (s'il n'a pas prévu une installation complète de son composant ... donc y compris de ses éventuelles dépendances) ce qu'il convient de faire pour compléter cette installation infirme.
Ce n'est plus là du ressort de ce forum.
Il est clair qu'en fouillant un peu, tu trouveras sur le net (je les ai vus) certains liens proposant le téléchargement d'un setup "complet" (y incluses, donc, les "dépendances" tierces).
Ce forum ne saurait prendre la responsabilité de te les conseiller. Un setup est un exécutable ... et un exécutable peut cacher des petites "bébêtes"...
A toi de jouer seul, donc ...

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Oui, c'est bien ce que j'ai dit plus haut.
Explication la plus vraisemblable : NETComm.ocx a été "fabricoté" par quelqu'un qui a voulu pallier l'absence de MSCOMM32.OCX, qui n'est pas distribué avec Excel (il l'est avec VB6).
Ce "quelqu'un" s'est apparemment contenté de s'y prendre en insérant dans "son" ocx, le composant MSCOMM32 !
Tout ce que je t'ai dit plus haut prend donc réellement tout son sens.

J'ajoute ceci : si tu distribues ton classeur, tu devras toi également distribuer et faire enregistrer le composant MSCOMM32 ! (légal ? ===>> je ne le sais pas !)
Bonne chance.
Ok Merci pour ton aide.

Seulement MSComm est payant non ?
Sinon j'ai vu qu'il y avait plusieurs ocx lequel serait le mieux à utiliser ?
Voilà j'ai trouvé un nouveau programme qui à l'air de fonctionner puisque je reçois une valeur (du COM1 j'espère) lorsque je le lance malheureusement elle est en hexa et elle s'affiche dans une fenêtre, pouvez m'aider à le modifier afin d'obtenir une valeur décimale et qui s'afficherait dans un tableau excel.
Merci d'avance.


Option Explicit

Dim ProductRqst, LectureHeure
Dim MyCom As New ClasseCom

Dim ChaineduCom As String

'ce module illustre l'emploi de ComTi sans utilisation d'un UserForm
'l'objet ComTi est déclaré dans ClasseCom. Ensuite il est toujours
'référencé dans le programme par MyCom.TiCom

Private Sub FermeCom()
  On Error Resume Next
  'Le port Com est fermé et TiCom = Nothing
  Set MyCom.TiCom = FermeComEvent
End Sub

Private Function OuvreCom(ComPort As Integer, _
                          Optional ParamCom As String, _
                          Optional DelaiTimer As Long) As Boolean
  On Error GoTo erreur

  'ferme le port com par sécurité s'il est ouvert
  With MyCom
    If Not .TiCom Is Nothing Then _
      If .TiCom.ComOuvert = Ouvert Then .TiCom.ComOuvert = Ferme
  End With

  If ComPort <= 0 Then ComPort = 1
  If ParamCom = "" Then ParamCom = "9600,n,8,1"

  'cet appel est obligatoire pour l'initialisation
  'cela permet plusieurs instances différentes
  Set MyCom.TiCom = InitialiseComEvent
  
  With MyCom.TiCom
    .ComNumCom = ComPort
    If DelaiTimer <> 0 Then .ComTimer = DelaiTimer
    .ComSettings = ParamCom
    .ComOuvert = Ouvert

    If .ComOuvert = Ferme Then
      'l'erreur est signalée depuis clsComTi
    Else
      OuvreCom = True
    End If
    Exit Function

erreur:
    FermeCom
  End With
End Function

Sub EvenementCOMTest(Chaine)
'c'est cette procédure qui est référencée depuis ClasseCom pour gérer
'la réception des données du port Com
'ici on se contente de copier la chaîne reçue dans la feuille Test
Dim Cel As Range
  'éviter les erreurs d'exécution
  On Error Resume Next
  ChaineduCom = Chaine
  With F2
    Set Cel = .Range("A65536").End(xlUp).Offset(1, 0)
  End With
  Cel = CleanStr(CStr(ChaineduCom))
End Sub

Sub TestComSansForm()
'Commandes pour un GPS Garmin
'évidemment ici les réponses sont reçues brutes et pas décodées
  ProductRqst = Array(16, 254, 0, 2, 16, 3)
  LectureHeure = Array(16, 10, 2, 5, 0, 239, 16, 3)

  On Error GoTo erreur
  'mon modem est sur le Com 3
  If OuvreCom(3) = True Then
    'si on voulait les infos du GPS
    'MyCom.TiCom.ComOutPut = Array2Str(ProductRqst)
    
    'ici j'interroge le modem
    MyCom.TiCom.ComOutPut = "ATV1Q0" & Chr$(13)
  End If
  'le port sera fermé après réception des données
  Delai 100
erreur:
  FermeCom
End Sub

Sub DetecteModem()
Dim Boucle As Integer
  'interroge les Com 1 à 4 pour trouver le modem
  'ça ne marchera qu'avec un bon vieux modem RTC !
  On Error GoTo erreur
  ChaineduCom = ""
  For Boucle = 1 To 4
    If OuvreCom(Boucle) = True Then
      MyCom.TiCom.ComOutPut = "ATV1Q0" & Chr$(13)
      Delai 100
      If ChaineduCom <> "" Then
        MsgBox "Le modem est sur le port :" & vbCr & vbCr & _
          "COM" & Boucle & ":", , "ComTi"
        Exit For
      End If
    End If
  Next Boucle
  
  If ChaineduCom = "" Then MsgBox "Aucun modem n'a pu être détecté", , "ComTi"
erreur:
  FermeCom
End Sub


EDIT: Ajout de la coloration syntaxique.
Messages postés
15175
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
1 décembre 2020
465
Bonsoir, c'est la deuxième fois que j'édite un message pour y ajouter la coloration syntaxique, tache de le faire tout seul la prochaine fois.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
elle est en hexa et elle s'affiche dans une fenêtre, pouvez m'aider à le modifier afin d'obtenir une valeur décimale et qui s'afficherait dans un tableau excel.

Elle s'affiche dans quelle "fenêtre" ? et sous quelle forme exacte ? (rmontre).
Je ne vois pas d'où et comment tu appelles la procédure EvenementCOMTest et quel paramètre tu lui "passes" !
Messages postés
4
Date d'inscription
lundi 13 avril 2015
Statut
Membre
Dernière intervention
15 avril 2015

Lorsque je clic sur le bouton j'obtient cette fenêtre :

(fichier joint)
Et j'ai une deuxième page ou les données reçu s'affiche dans un tableau seulement je ne sais pas à quoi elle correspondent.
Je voudrais recevoir la donnée lu par mon afficheur (en décimale) mais je ne sais pas quoi modifier dans le programme.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Je prends rendez-vous avec mon ophtalmologue ...
Messages postés
4
Date d'inscription
lundi 13 avril 2015
Statut
Membre
Dernière intervention
15 avril 2015

Je crois que j'ai la réponse à mon problème ... Vu qu'il m'ont donné un vieille ordinateur qui est encore sous XP , il doit manquer des mises à jours sur les modules complémentaires comme MSComm et ça doit être pour ça qu'il n'arrive pas à faire la connexion entre excel et le port COM.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
MSCOMM32.OCX est livré avec VB6 et tourne parfaitement sous XP

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Messages postés
4
Date d'inscription
lundi 13 avril 2015
Statut
Membre
Dernière intervention
15 avril 2015

Pourtant j'ai téléchargé VB6 mais sur excel quand je place l'icone dans l'userform il me met : le sujet n'est pas approuvé pour l'action spécifiée ...
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Excel n'est pas VB6, mais VBA !
Tu es ici dans le forum VB6 !
Messages postés
4
Date d'inscription
lundi 13 avril 2015
Statut
Membre
Dernière intervention
15 avril 2015

Ok et je fais comment alors pour récupérer des données sur excel avec VB6 ?
Oui désolé pour la clarté mais je ne connais rien langage VB , donc c'est difficile de dire ce que je veux...

Du coup j'ai MSComm dans VB6 et je voudrais récupérer les données sur excel.

Merci de ta patience :)