VB_PtitCat
Messages postés197Date d'inscriptionmercredi 30 mai 2007StatutMembreDernière intervention13 mai 2009
-
6 juin 2007 à 13:52
VB_PtitCat
Messages postés197Date d'inscriptionmercredi 30 mai 2007StatutMembreDernière intervention13 mai 2009
-
6 juin 2007 à 14:48
Je vais être aussi précise que possible, en fait sur mon appli InTouch j'ai créer une simple fenêtre qui contient 32 causes discrète (prend uniquement les valeur de 1 ou 0), lorsque je cliquee sur une cause sa nouvelle valeur est réécrite dans une colonne EXCEL.
mon appli EXCEL elle comporte un tableau de 34 cases/34 dans la première colonne sont placé les mnémoniques des causes (cause1, cause2, ...), dans la second sont placés les valeurs de ces causes rempli par InTouch, dans la première ligne sont placé les mnémoniques des effets (effet1, effet2, ...) des "X" ou "x" sont placés dans le tableau afin de préciser quels causes produits quels effet.
Ma macros de base, était lancer manuellement et éspionné tout le tableau afin de déterminer si toutes les causes d'un effet étaient mise à 1, si c'était le cas la colonne en question est mise en rouge.
Le bout de macros que j'ai rajouter sert a faire une mise a jour automatique, des qu'un valeur de cause et modifier, ma macros de base est lancé, le problème c'est que ca ne veut absolument pas marché lorsque c'est InTouche qui modifie ces valeurs de causes, alors que si moi je vais les modifier directement via EXCEL ma macros marche parfaitement, voilà pourquoi j'ai besoin de votre aide pour eclairessir le mystère qui repose sur ce BUG !!
*macros de base:
1. Sub Macro2()
2. Dim nombreDeCauses As Integer
3. Dim nombreDEffet As Integer
4. Dim nombreDeCroix As Integer
5. Dim tailleTableau
6. Dim i As Integer
7. Dim l As Integer 'Colonne excel
8. Dim k As Integer 'lignes excel
9. Dim Compteur As Integer ' Compte les croix valides
10. Dim tableauNombreDeCroix(3 To 34) As Integer 'Nombre de croix par colonne
11. Dim tableauCroixEffet(3 To 35, 2 To 34) As Integer 'lignes, colonnes. Recupere les coordonnées des croix
12. Dim x As Integer
13. Dim y As Integer
14. nombreDeCauses = 0
15. nombreDEffet = 0
16. nombreDeCroix = 0
17. i = 0
18. Compteur = 0
19. Range("A:AH").Interior.Color = RGB(255, 255, 255) 'Fond blanc
20. 'Recupere le nombre de causes
21. For i = 2 To 33
22. If (Worksheets("Feuil1").Cells(i, 1).Value <> "") Then
23. nombreDeCauses = nombreDeCauses + 1
24. End If
25. Next i
26. 'Affiche le nombre de causes
27. Worksheets("Feuil1").Cells(34, 1).Value = "Nombre de causes : " & nombreDeCauses
28.
29. For l = 3 To 34
30. 'Recupere le nombre d'effets
31. If (Worksheets("Feuil1").Cells(1, l).Value <> "") Then
32. nombreDEffet = nombreDEffet + 1
33. End If
34. 'Recupere le nombre de croix
35. For k = 2 To nombreDeCauses + 1
36. If (Worksheets("Feuil1").Cells(k, l).Value = "x") Or (Worksheets("Feuil1").Cells(k, l).Value = "X") Then
37. nombreDeCroix = nombreDeCroix + 1
38. tableauCroixEffet(l, k) = 1 'On récupere les coordonnées où il y a une croix
39. tableauNombreDeCroix(l) = nombreDeCroix
40. End If
41. Next k
42. nombreDeCroix = 0
43. Next l
44.
45. 'Affiche le nombre de d'effet
46. Worksheets("Feuil1").Cells(1, 35).Value = "Nombre d'effets : " & nombreDEffet
47.
48. 'on regarde s'il la cause est a 1
49. For l = 3 To nombreDEffet + 2 'De la 3eme a la 34eme colonne maximum
50. For k = 2 To nombreDeCauses + 1 'De la 2eme a la 33eme ligne maximum
51. If tableauCroixEffet(l, k) = 1 Then 'Si on a enregistré une croix dans la colonne
52. If Worksheets("Feuil1").Cells(k, 2).Value = 1 Then 'On regarde si la cause est a 1
53. Compteur = Compteur + 1
54. If Compteur = tableauNombreDeCroix(l) And Worksheets("Feuil1").Cells(i, l).Interior.ColorIndex = 2 Then
55. 'Si on atteint le nombre de croix valides comptabilisées et que la cellule est blanche
56. For i = 1 To nombreDeCauses + 1
57. Worksheets("Feuil1").Cells(i, l).Interior.ColorIndex = 3 'on rempli la colonne en rouge
58. Next i
59. l = l + 1 'On change de colonne
60. k = 1 'On recommence à la premiere ligne
61. Compteur = 0 'On remet le compteur à 0
62. End If
63. Else
64. Worksheets("Feuil1").Cells(1, l).Interior.ColorIndex = 5
65. l = l + 1 'On change de colonne
66. k = 1 'On recommence à la premiere ligne
67. Compteur = 0 'On remet le compteur à 0
68. End If
69. End If
70. Next k
71. Next l
72. End Sub , ----
(Coloration syntaxique automatique par Kenji)
*le bout de macros rajouté est:
-->Le module1 contient :
1. 'Ceci est une variable Public d'UN Module a ajouter elle represente la memorisation de la cellule
2. Public M_Valeur(1 To 32) AsString
3. Public j AsInteger
4. , ----
(Coloration syntaxique automatique par Kenji)
-->Le ThisWorkBook contient :
1. PrivateSub Workbook_Open()
2. j = 1
3. 'nous allons "espionner" la colonne B
4. For i = 2 To 33
5. M_Valeur(j) = Worksheets("Feuil1").Range("B" & CStr(i + 1)).Value
6. j = j + 1
7. Next i
8. EndSub , ----
(Coloration syntaxique automatique par Kenji)
-->Et une Feuille ici Feuil1 contient :
1. 'Cet événement survient à chaque modification dans la feuille et est placer dans la feuille à espionner
2. PrivateSub Worksheet_Change(ByVal Target As Range)
3. 'on verifie que la modification a bien eu lieu sur la plage souhaitée (B2:B33)
4. 'Column = 2 = B
5. If (Target.Column = 2) And (Target.Row > 1) And (Target.Row < 34) Then
6. 'on regarde alors l'ancienne valeur
7. If (M_Valeur(Target.Row - 1) = vbNullString And Target.Value = "1") Or (M_Valeur(Target.Row - 1) = "0"And Target.Value = "1") Or (M_Valeur(Target.Row - 1) = "1"And Target.Value = vbNullString) Or (M_Valeur(Target.Row - 1) = "1"And Target.Value = "0") Then
8. Call Macro2
9. x = MsgBox(" Mise à Jour " & (Chr(13) & Chr(10)) & " ''OK'' ", 64, "Mise à Jour")
10. EndIf
11. 'on mémorise la valeur
12. M_Valeur(Target.Row - 1) = Target.Value
13. EndIf
14. EndSub , ----
(Coloration syntaxique automatique par Kenji)
MerZi ... Zi ... Zi ... PtitCat P.S:DSL pour l'orthographe
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202175 6 juin 2007 à 14:00
dit m'en plus sur la cinématique ....
je ne connais pas InTouch
affiche t'il excel ?
permet il l'utilisation de script ?
est-il possible de passer via une communication DDE ?
est-il possible de lancer ta macro (ou autre traitement) une fois que Intouch a joué avec tes données ?
bref, éclaire moi (nous) un peu sur le fonctionnement de la chose, j'ai du mal a suivre, là
VB_PtitCat
Messages postés197Date d'inscriptionmercredi 30 mai 2007StatutMembreDernière intervention13 mai 2009 6 juin 2007 à 14:08
OUI, en effet les communication DDE sont possible, mais il existe en fait une fonction "InTouch" qui permet d'appeler directement la macros il suffit just que je fasse le petit script qui va bien et OP !!
La fonction InTouch est (au cas ou ca vous interesserai):
Macro = "Module1!Macro";
Command = "[Run(" + StringChar(34) + Macro + StringChar(34) + ")]";
WWExecute( "excel", "system", Command );
Ce qui me facilite la tache, MRC du temps que vous avez passé a m'aider, et dsl d'abusé
MerZi ... Zi ... Zi ... PtitCat P.S:DSL pour l'orthographe
VB_PtitCat
Messages postés197Date d'inscriptionmercredi 30 mai 2007StatutMembreDernière intervention13 mai 2009 6 juin 2007 à 14:32
Oui monsieur, on ne croiré pas comme ca mais je sais qu'un API est un Automate programmable industriel
je fais un BTS IRIS par alternance et travail chez CEGELEC Nord&EST, alors en effet je sais de quoi je parle et vous savez vous de quoi vous parlez ??
MerZi ... Zi ... Zi ... PtitCat P.S:DSL pour l'orthographe