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

[Résolu]
Signaler
Messages postés
197
Date d'inscription
mercredi 30 mai 2007
Statut
Membre
Dernière intervention
13 mai 2009
-
Messages postés
197
Date d'inscription
mercredi 30 mai 2007
Statut
Membre
Dernière intervention
13 mai 2009
-
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

Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
70
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
Messages postés
197
Date d'inscription
mercredi 30 mai 2007
Statut
Membre
Dernière intervention
13 mai 2009

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
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
70
j'en conclue que ton problème est réglé ?

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
197
Date d'inscription
mercredi 30 mai 2007
Statut
Membre
Dernière intervention
13 mai 2009

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
Messages postés
197
Date d'inscription
mercredi 30 mai 2007
Statut
Membre
Dernière intervention
13 mai 2009

Oui je pense, MRC encore

MerZi ... Zi ... Zi ... PtitCat  
P.S:DSL pour l'orthographe
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
"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 ?
Messages postés
197
Date d'inscription
mercredi 30 mai 2007
Statut
Membre
Dernière intervention
13 mai 2009

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
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
10
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>
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
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
Messages postés
197
Date d'inscription
mercredi 30 mai 2007
Statut
Membre
Dernière intervention
13 mai 2009

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