RereRErere: probleme fonction change(), j'ai était aussi précise que possible

Résolu
VB_PtitCat Messages postés 197 Date d'inscription mercredi 30 mai 2007 Statut Membre Dernière intervention 13 mai 2009 - 6 juin 2007 à 13:52
VB_PtitCat Messages postés 197 Date d'inscription mercredi 30 mai 2007 Statut Membre Dernière intervention 13 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

10 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
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à

Renfield
Admin CodeS-SourceS- MVP Visual Basic
3
VB_PtitCat Messages postés 197 Date d'inscription mercredi 30 mai 2007 Statut Membre Dernière intervention 13 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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
6 juin 2007 à 14:11
j'en conclue que ton problème est réglé ?

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
VB_PtitCat Messages postés 197 Date d'inscription mercredi 30 mai 2007 Statut Membre Dernière intervention 13 mai 2009
6 juin 2007 à 14:20
Une ptite explication de InTouch ??
En gros c'est d'la supervision comme PL7pro je sais pas si vous connaisser c'est surtout utilisé pour les API

MerZi ... Zi ... Zi ... PtitCat  
P.S: DSL pour l'orthographe
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
VB_PtitCat Messages postés 197 Date d'inscription mercredi 30 mai 2007 Statut Membre Dernière intervention 13 mai 2009
6 juin 2007 à 14:21
Oui je pense, MRC encore

MerZi ... Zi ... Zi ... PtitCat  
P.S:DSL pour l'orthographe
0
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 28
6 juin 2007 à 14:30
"En gros c'est d'la supervision comme PL7pro je sais pas si vous connaisser c'est surtout utilisé pour les API"

Hé bien ! je dois dire que je vois... je vois ...

Mais dis-nous, s'il te plait : tu sais de quoi tu parles ?
0
VB_PtitCat Messages postés 197 Date d'inscription mercredi 30 mai 2007 Statut Membre Dernière intervention 13 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
0
drikce06 Messages postés 2237 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 11
6 juin 2007 à 14:36
lol! Peut-être qu'il pensait comme moi au début, c'est à dire aux APIs: Application Programming Interface.





 Drikce 06 (Nouveau !!! Forum Exclusivement Office Et VBA By Mortalino)

Si la réponse vous convient: Réponse acceptée < body>
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
6 juin 2007 à 14:44
Et oui, conflit de nom comme bien souvent en informatique

Une api est une fonction d'une dll style api windows

Et un api est un automate pour le monde industriel dont quelques marques connues : Siemens, Téléméca, Yokogawa, April, .......

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
VB_PtitCat Messages postés 197 Date d'inscription mercredi 30 mai 2007 Statut Membre Dernière intervention 13 mai 2009
6 juin 2007 à 14:48
Voilà les siemens sont chiant aussi tien :)
c'est qu'il y a svt cafouillage
tout est mis au claire donc jusque la tout va bien^^

MerZi ... Zi ... Zi ... PtitCat  
P.S:DSL pour l'orthographe
0