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 du Timer :
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
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
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
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.
Partager