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

VB 6 et antérieur Discussion :

problème avec le contrôle timer.


Sujet :

VB 6 et antérieur

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut problème avec le contrôle timer.
    Bonjour,
    je bosse sur un programme en VB6 qui permet d'importer une feuille Excel dans une MSFlexgrid.
    la feuille contient 2 colonnes, numéro de téléphone et message
    quand la feuille est importé, une troisième colonne est ajouté, cette dernière contient des cases à cocher..
    alors normalement le but c'est d'envoyer tout les message cochés(SMS).
    Pour ce faire, j'utilise un Modem GSM..donc le contrôle MScomm.

    La partie qui me cause problème c'est la partie avec le contrôle Timer.
    en fait en cliquant sur le bouton Envoyer, un Timer se déclenche, et à chaque top du Timer, on teste si le modem a répondu la bonne réponse puis on continue...sinon c pas la peine.

    J'ai testé quand je coche un seule message, ça marche très bien.
    Le problème c'est quand plusieurs message sont cochés..
    voilà, le bouton envoyer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Private Sub Envoyer_Click()
    Timer2.Interval = 150 'déclenchement du Timer
    IntEtp_Seq = 0 'Contient l'étape de séquencement pour le dialogue entre PC et MODEM [Utilsé dans un Select Case]
    End Sub
    code du Timer :
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
    Private Sub Timer2_Timer()
    Dim x As Integer                  'Compteur à utiliser avec FOR       
    Dim ligne As Integer              'Ligne cochée
    Dim lignes As Integer             'Nombres de lignes à traiter
    Dim a_envoyer() As Integer    
    Dim CRow                             'Ligne courante
     
    lignes = grille.Rows - 1
    ReDim a_envoyer(lignes) As Integer
     
        With grille
            For CRow = 1 To .Rows - 1
                .Col = 2
                .Row = CRow
                If .Text = Chr(Checked) Then a_envoyer(CRow) = .Row     'Détection des Lignes cochés
            Next CRow
        End With
     
    For x = 1 To lignes
     
        If a_envoyer(x) <> 0 Then
        ligne = a_envoyer(x)
     
    Select Case IntEtp_Seq
    Case 0
            Text2.Text = ""
            ModemGSM.Output = "AT" & Chr$(13)
            IntEtp_Seq = 1
            Timer2.Interval = 150
    Case 1
     
                 If UCase$(Text2.Text) = "AT" & Chr$(13) & Chr$(13) & Chr$(10) & "OK" & Chr$(13) & Chr$(10) Then 'Vérifie que le modem a répondu OK
                    Text2.Text = ""
                    IntEtp_Seq = 2
                 Else: LngMess = MsgBox("Communication avec le terminal Impossible ! Revérifiez les branchements du modem et sa configuration :" & vbCrLf & "- Numéro de port COM saisit dans le fichier CONFIG.ini" & vbCrLf & "- Paramètres de l'objet MsComm dns le Form Load de l'application : vitesse, bits de parité, etc." & vbCrLf & vbCrLf & "Si vous avez des doutes, vérifier en premier lieu l'existance d'un dialogue entre votre modem GSM et votre PC depuis l'Hyperterminal de WINDOWS.", vbCritical, "Erreur: Dialogue IMPOSSIBLE...")
                      If (LngMess = vbOK) Then
                          IntEtp_Seq = -1
                      End If
                 End If
     
     
    Case 2
     
            Text2.Text = ""
            ModemGSM.Output = "AT+CMGF=1" & Chr$(13)
            IntEtp_Seq = 3
     
    Case 3
     
            Text2.Text = ""
            ModemGSM.Output = "at+cmgs=" & Chr$(34) & "+212" & Right(grille.TextMatrix(ligne, 0), 8) & Chr$(34) & Chr$(13)
            IntEtp_Seq = 4
     
    Case 4
     
            If UCase$(Text2.Text) = "AT+CMGS=" & Chr$(34) & "+212" & Right(grille.TextMatrix(ligne, 0), 8) & Chr$(34) & Chr$(13) & Chr$(13) & Chr$(10) & "> " Then
            Text2.Text = ""
            IntEtp_Seq = 5
            End If
     
    Case 5
     
            Text2.Text = ""
            ModemGSM.Output = grille.TextMatrix(ligne, 1) & Chr$(26)
            IntEtp_Seq = 6
    Case 6
            IntEtp_Seq = -1 'Termine l'envoi du SMS en bloquant le séquencement (Select Case)
            MsgBox ("message envoyé avec succés")
     
    End Select
    End If
    Next x
    End If
    End Sub
    Je fais un tableau a_envoyer(), qui contient les numéros de lignes des messages à envoyer...donc une ligne coché c'est a_envoyer(x)=ligne, sinon c'est a_envoyer(x)=0
    On doit envoyer alors touts les messages qui ont a_envoyer(x)<>0
    pour cela je fait une boucle FOR-NEXT
    Mais apparemment ça marche pas! parce que(à mon avis) tout le code contenu dans le Timer s'exécute à chaque Top Timer, y compris la boucle! qui se ré-exécute avant que le 1er message n'est envoyé, et c ça qui cause le problème !

    N.B: Quand je coche une seule ligne, la procédure passe quand même..!! et c'est ce que j'arrive pas à comprendre!

    J'espère que vous avez compris mon problème..
    Je serai très reconnaissant si vous m'aidez.
    Merci.

  2. #2
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 088
    Points : 16 654
    Points
    16 654
    Par défaut
    Toutes declarations de variables dans une procedure sont réinitialisées à Null lors de l'entrée dans la dite procedure.
    Comme Timer2.Interval = 150, ta variable a_envoyer(x)=, X etant declaré dans la procedure Timer2_Timer() X est remis a zero toutes les 150 mS.

    Fais la delaration des variables en debut du Form (apres Option Explicit, avant toute autre code de procedure ou fonction)
    pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Merci ProgElecT pour votre réponse..
    Mais ça résout pas mon problème.
    c'est toujours pareil.. quand je sélectionne plusieurs lignes..le programme s'arrête dans le case 1 sur LngMess = MsgBox("Communication avec le terminal Impossibl...")
    je pense je dois pas mettre tout ce code dans le timer! qu'en pensez vous?

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Il te faut revoir l'architecture de ton code... ta boucle est mal placé ...tu ne dois pas pouvoir envoyer simultanément plusieurs SMS... attends que l'envoi de sms en cours soit terminé avant d'en envoyer un autre ..

  5. #5
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 088
    Points : 16 654
    Points
    16 654
    Par défaut
    Sans analyse avec toute la precision, il me semble que tu devrais essayer comme sa
    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
    Private Sub Form_Load()
    Timer2.Enabled = False 'Arret du timer si non fait en desing
    Timer2.Interval = 150 'Initialise la frequence de bouclage de l'evenement Timer2_Timer()
    End Sub
     
    Private Sub Envoyer_Click()
    lignes = grille.Rows - 1
    ReDim a_envoyer(lignes) As Integer
         With grille
            For CRow = 1 To .Rows - 1
                .Col = 2
                .Row = CRow
                If .Text = Chr(Checked) Then a_envoyer(CRow) = .Row     'Détection des Lignes cochés
            Next CRow
        End With
    IntEtp_Seq = 0 'Contient l'étape de séquencement pour le dialogue entre PC et MODEM [Utilsé dans un Select Case]
    Timer2.Enabled = True ' lance la procedure Timer2_Timer()
    End Sub
    Dans Timer2_Timer() a la ligne Case 6
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Case 6
            Timer2.Enabled = False ' arret du bouclage <---------- Ajouter
    	IntEtp_Seq = -1 'Termine l'envoi du SMS en bloquant le séquencement (Select Case)
            MsgBox ("message envoyé avec succés")
    Bien sur dans cette procedure enlever ce qui à ete transferer dans la procedure Envoyer_Click()

    Une autre chose qui me trouble un peu, la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If UCase$(Text2.Text) = "AT" & Chr$(13) & Chr$(13) & Chr$(10) & "OK" & Chr$(13) & Chr$(10) Then 'Vérifie que le modem a répondu OK
    Transformée, mais equivalante (vbCrLf = Chr$(13)+Chr$(10))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If UCase$(Text2.Text) = "AT" & Chr$(13) & vbCrLf & "OK" & vbCrLf Then 'Vérifie que le modem a répondu OK
    n'y a t il pas un Chr$(13) de trop ?, mais tu connais mieux le dialogue des trames a envoyer et recevoir.
    pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  6. #6
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 088
    Points : 16 654
    Points
    16 654
    Par défaut
    Houla ......
    Je viens de créer un projet avec tes éléments, comme le signal bbil(salut), il y a du boulot, toute la chronologie est à revoir, certaines conditions sont bloquantes (boucle infini) d'autres risquent de ne jamais être positives(temps de reponse du modem 150mS), et de fait passe a la commande suivant le Else.

    Je ne sais pas comment te venir en aide sans tout réécrire, essai de te faire un algo, réécris un bout de code et reviens nous le proposé (l'algo et le code).
    Bon courrage
    A+
    pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  7. #7
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Merci à vous...c vrais mon code n'est pas très structuré! Mais j'ai eu une autre idée(que ça marche pas aussi) pour éviter de passer par le Timer qui me fait problème. j'ai pensé à utiliser l'API Sleep.. pour laisser au modem un pe de temp pour répendre.
    Qu'en pensez vous de ce code? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Option Explicit
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    Private Sub Envoyer_Click()
     
    lignes = grille.Rows - 1
    ReDim a_envoyer(lignes) As Integer
     
        With grille
            For CRow = 1 To .Rows - 1
                .Col = 2
                .Row = CRow
                If .Text = Chr(Checked) Then a_envoyer(CRow) = .Row
            Next CRow
        End With
     
    For x = 1 To lignes
     
    If a_envoyer(x) <> 0 Then
    ligne = a_envoyer(x)
     
    '1ère étape : Teste du modem.
    Text2.Text = ""
     
    ModemGSM.Output = "AT" & Chr$(13)
    Sleep 150 'je veux just attendre le temps pour que le modem répend!
     
    If UCase$(Text2.Text) = "AT" & Chr$(13) & vbCrLf & "OK" & vbCrLf Then 'Vérifie que le modem a répondu OK
        Sleep 150
     
    Else
        LngMess = MsgBox("Communication avec le terminal Impossible ! Revérifiez les branchements du modem et sa configuration :" & vbCrLf & "- Numéro de port COM saisit dans le fichier CONFIG.ini" & vbCrLf & "- Paramètres de l'objet MsComm dns le Form Load de l'application : vitesse, bits de parité, etc." & vbCrLf & vbCrLf & "Si vous avez des doutes, vérifier en premier lieu l'existance d'un dialogue entre votre modem GSM et votre PC depuis l'Hyperterminal de WINDOWS.", vbCritical, "Erreur: Dialogue IMPOSSIBLE...")
            If (LngMess = vbOK) Then
            Text2.Text = ""
            ModemGSM.InBufferCount = 0
            Exit Sub
            End If
    End If
     
    '2ème étape : appliquer le format TEXT au message(AT+CMGF=1)
     
    Text2.Text = ""
    ModemGSM.Output = "AT+CMGF=1" & Chr$(13)
    Sleep 150
     
    '3ème étape : entrer le numéro destinataire
     
    Text2.Text = ""
    ModemGSM.Output = "at+cmgs=" & Chr$(34) & "+212" & Right(grille.TextMatrix(ligne, 0), 8) & Chr$(34) & Chr$(13)
    Sleep 150
     
    '4ème étape : test de la réponse du modem, on doit recevoir le caractère ">"
     
    If UCase$(Text2.Text) = "AT+CMGS=" & Chr$(34) & "+212" & Right(grille.TextMatrix(ligne, 0), 8) & Chr$(34) & Chr$(13) & vbCrLf & "> " Then
        Sleep 150
        Else
        MsgBox "Le modeme n'a pas renvoyé le caractère > je peux pas continuer"
        Exit Sub
    End If
     
    '5ème étape : on transmet le message à envoyer au modem et on valide par un CTRL+Z qui est équivalent à Chr$(26)
     
    Text2.Text = ""
    ModemGSM.Output = grille.TextMatrix(ligne, 1) & Chr$(26)
    Sleep 150
     
    '6ème étape : OK, message envoyé ;)
     
    MsgBox ("message envoyé avec succés")
    End If
    Next x
     
    End Sub
    N.B: cela ne marche ni quand je sélectionne un seul message, ni quand je sélectionne plusieurs!!! je voulais juste avoir votre avis sur Sleep.. et vous demander si ya moyen pour faire attendre un peu sans le Timer?!

  8. #8
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 088
    Points : 16 654
    Points
    16 654
    Par défaut
    Sleep à le defaut de bloquer tous les processus, moi je te conseil d'utiliser une boucle Do While MaCondition = true ..... Doevents .... Loop

    Moi aussi, bien que n'étant pas devant l'ordinateur, en y refflichisant, pourquoi passer par un Timer?
    Tu utilises bien MSComm, donc l'evenement de procedure _OnComm, devrait être plus judicieux.
    en surveillant dans cette procedure sub
    If MSComm1.CommEvent = (voir les valeurs possible dans ton aide, F1)et l'etat du buffer d'emission (OutBufferCount) et/ou de reception (InBufferCount) devrait permetre de mieux gerer tes communications.

    De plus, en utilisant cet evenement, pas de probléme d'evaluation de temps suivant le trafic (un jour 10ms un autres 1ms voir 500ms), peut être simplement un timer pour detecter un temps maximum ou si une commande n'aboutie pas il serat concidéré que la communication n'est pas possible.

    Une question importante, apres l'envoie d'une trame, tu vide Text2.Text = "", donc le system qui recoit ta trame te renvois un "Ok j'ai bien recu la trame", c'est sa ?

    Je me remet un peu sur ton probléme de mon côté
    A+
    pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  9. #9
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    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
    Private Sub ModemGSM_OnComm()
    Select Case ModemGSM.CommEvent
     
        ' liste des événements possibles qui sont, eux, normaux
     
        Case comEvCD            ' Changement dans la broche CD (porteuse)
        Case comEvCTS           ' Changement dans broche CTS
        Case comEvDSR           ' Changement dans broche DSR (réception)
        Case comEvRing          ' Changement dans broche RING (sonnerie)
     
        Case comEvReceive       ' Si on reçoit des données
     
            Text2.Text = Text2.Text + ModemGSM.Input
     
        Case comEvSend          ' Il y a des caractères à envoyer
        Case comEvEOF           ' On a reçu le caractère EOF
     
    End Select
     
    End Sub
    Voilà, j'utilise déjà _Oncomm, parce que c mieux est plus vite je trouve pour tester si le modem renvois quelque chose.
    Alors on reçevant des données elles sont affichées dans text2.text
    mais ça marche pas avec la méthode de Sleep..j'ai testé en évitant Sleep ça marche non plus

    Je pense l'utilisation du Timer est obligatoire!!

  10. #10
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 088
    Points : 16 654
    Points
    16 654
    Par défaut
    Dans le projet que je construit en paralléle avec toi, j'utilise un Timer pour le temps maxi acceptable d'une communication.
    Comme toi j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       Case comEvReceive       ' Si on reçoit des données
    dans ce Case, j'ai un 2° Select case IntEtp_Seq, suivant CE select, j'incremente le dialogue en relancent l'emission de la tramme suivante.

    Encor un peu de temps, et je te soumais mon idée de code.
    Par contre on me demande (c'est l'heure de manger chez moi), sa va être un peu plus long que je l'avais prevu , mais j'y reviendrai, promis.
    A+


    Motif de l'edit :
    Desolé, je ne mis suis pas remis beaucoup, pas de sujestion (ce soir) de code sur la methode auquel je pense, ........ demain cela devrait être bon .......
    pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  11. #11
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    je l'ai trouvé!
    Parfait! Et sans le maudit Timer!
    Comme je vous ai dis, j'avais besoin que d'un truc qui me fait une pause(au milieu de la boucle) sans interrempre le fanctionnement de tout le programme(comme le fait Sleep).

    Alors voilà la solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    'Déclaration de la fonction GetTickCount :
     
    Private Declare Function GetTickCount Lib "kernel32" () As Long
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    'Procédure permetant de faire une pause :
     
    Public Sub PauseGetTickCount(ByVal MilsecToWait As Long)
    Dim lngEndingTime As Long
     
        lngEndingTime = GetTickCount() + (MilsecToWait)
        Do While GetTickCount() < lngEndingTime
            DoEvents
        Loop
    End Sub
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    'Et voilà mon bouton Envoyer :
     
    Private Sub Envoyer_Click()
    lignes = grille.Rows - 1
    ReDim a_envoyer(lignes) As Integer
     
        With grille
            For CRow = 1 To .Rows - 1
                .Col = 2
                .Row = CRow
                If .Text = Chr(Checked) Then a_envoyer(CRow) = .Row
            Next CRow
        End With
     
    For x = 1 To lignes
     
    If a_envoyer(x) <> 0 Then
     
        ligne = a_envoyer(x)
     
    '1ère étape : Teste du modem.
        Text2.Text = ""
        ModemGSM.Output = "AT" & Chr$(13)
        PauseGetTickCount (150)
     
        If UCase$(Text2.Text) = "AT" & Chr$(13) & vbCrLf & "OK" & vbCrLf Then  'Vérifie que le modem a répondu OK
        PauseGetTickCount (10) 'ICI peut importe! on peut ne pas attendre même!
     
        Else
            LngMess = MsgBox("Communication avec le terminal Impossible ! Revérifiez les branchements du modem et sa configuration :" & vbCrLf & "- Numéro de port COM saisit dans le fichier CONFIG.ini" & vbCrLf & "- Paramètres de l'objet MsComm dns le Form Load de l'application : vitesse, bits de parité, etc." & vbCrLf & vbCrLf & "Si vous avez des doutes, vérifier en premier lieu l'existance d'un dialogue entre votre modem GSM et votre PC depuis l'Hyperterminal de WINDOWS.", vbCritical, "Erreur: Dialogue IMPOSSIBLE...")
            If (LngMess = vbOK) Then
            Text2.Text = ""
            ModemGSM.InBufferCount = 0
            Exit Sub
            End If
        End If
     
    '2ème étape : appliquer le format TEXT au message(AT+CMGF=1)
     
        Text2.Text = ""
        ModemGSM.Output = "AT+CMGF=1" & Chr$(13)
        PauseGetTickCount (150)
     
    '3ème étape : entrer le numéro destinataire
     
        Text2.Text = ""
        ModemGSM.Output = "at+cmgs=" & Chr$(34) & "+212" & Right(grille.TextMatrix(ligne, 0), 8) & Chr$(34) & Chr$(13)
        PauseGetTickCount (150)
     
    '4ème étape : test de la réponse du modem, on doit recevoir le caractère ">"
     
        If UCase$(Text2.Text) = "AT+CMGS=" & Chr$(34) & "+212" & Right(grille.TextMatrix(ligne, 0), 8) & Chr$(34) & Chr$(13) & vbCrLf & "> " Then
        PauseGetTickCount (150)
     
        Else
        MsgBox "Le modeme n'a pas renvoyé le caractère > je peux pas continuer"
        Exit Sub
        End If
     
    '5ème étape : on transmet le message à envoyer au modem et on valide par un CTRL+Z qui est équivalent à Chr$(26)
     
        Text2.Text = ""
        ModemGSM.Output = grille.TextMatrix(ligne, 1) & Chr$(26)
        PauseGetTickCount (150)
     
    '6ème étape : OK, message envoyé ;)
     
        MsgBox ("message envoyé avec succés")
     
    End If
    Next x
     
    End Sub
    En fin ça marche comme je voulais!
    Un grand MERCI trés spécial Pour vous ProgElecT et pour vous aussi bbil.

  12. #12
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 088
    Points : 16 654
    Points
    16 654
    Par défaut
    Content que tu ais trouvé la solution.
    Une dernière sujétion, dans la 1ère étape: Teste du modem.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Text2.Text = ""
        ModemGSM.InBufferCount = 0 '<----- là, pour être sûr de ne pas recuperer
        'quelque chose de la derniére communication et d'en commencer une propre
    Si le moden n'a répondu, en lieux et place de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Else
     LngMess = MsgBox("Communication avec le term ..............
    tu peux, pour permettre une relecture du code plus facile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     Else
     MsgBox "Communication avec le terminal Impossible !" & vbCrLf _
        & "Revérifiez les branchements du modem et sa configuration :" & vbCrLf _
        & "- Numéro de port COM saisit dans le fichier CONFIG.ini" & vbCrLf _
        & "- Paramètres de l'objet MsComm dns le Form Load de l'application : " _
        & "vitesse, bits de parité, etc." & vbCrLf & vbCrLf _
        & "Si vous avez des doutes, vérifier en premier lieu l'existance d'un dialogue " _
        & "entre votre modem GSM et votre PC depuis l'Hyperterminal de WINDOWS." _
        , vbCritical, "Erreur: Dialogue IMPOSSIBLE..."
        Text2.Text = ""
        ModemGSM.InBufferCount = 0 '<----- là sa devient inutile
     Exit Sub
    End If
    Apres le Next x peut être reajouterBonne continuation, au plaisir de ce recroiser
    pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec de multiple timer
    Par FreudDu31 dans le forum VB.NET
    Réponses: 6
    Dernier message: 11/10/2009, 12h35
  2. Problème avec listener contrôl
    Par olikhvar dans le forum JDBC
    Réponses: 1
    Dernier message: 22/12/2008, 15h03
  3. problème avec le contrôle menu
    Par lesultan2007 dans le forum ASP.NET
    Réponses: 0
    Dernier message: 06/11/2008, 12h25
  4. Etat - problème avec des contrôles vides
    Par ver_for dans le forum IHM
    Réponses: 2
    Dernier message: 17/09/2008, 15h55
  5. Problème avec le contrôle Datetime de wss
    Par mimosa803 dans le forum SharePoint
    Réponses: 0
    Dernier message: 16/04/2008, 11h01

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