Compteur

beber4x Messages postés 12 Date d'inscription samedi 25 août 2007 Statut Membre Dernière intervention 27 août 2007 - 27 août 2007 à 16:28
beber4x Messages postés 12 Date d'inscription samedi 25 août 2007 Statut Membre Dernière intervention 27 août 2007 - 27 août 2007 à 20:51
j ai reé un petit compteur , voila le code

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plage As Range


Set Plage = Intersect(Target, Range("b45"))
If Plage Is Nothing Then Exit Sub
For Each cellule In Plage
If cellule.Value = 1 Then
Range("h7").Value = Range("h7").Value + 1
End If
Next
End Sub

il est fonctionnel mais mon probleme est le suivant:
Quand je rentre la valeur 1 dans la case b45 , la case h7 s incremente de 1.
Puis je vide b45 ,valide ,je reecrit 1 , je valide ,et h7 s incremente de 1 de plus ,soit 2.

Voila le pour fonctionement normal.

Par contre, si je passe par une formule dans la cellule  dont le resultat est 1, rien ne se passe!!

Je pense que la macro ne sais pas lire le resultat d une formule dans une cellule.
Pouvez vous m aider a resoudre ce  probleme ?

merci

13 réponses

cs_Tioneb Messages postés 193 Date d'inscription dimanche 16 décembre 2001 Statut Membre Dernière intervention 29 juillet 2015
27 août 2007 à 17:06
Salut,
je pense que ton code est prévu pour fonctionner avec excel (VBA). Au lieu d'utiliser range("h7").value+1, essaye avec range("h7").FormulaLocal+1 et normalement ça devrait prendre en compte le résultat de la formule de la cellule (dans l'exemple H7)

@+

--------------------------------------------------------------------------
Visitez mon site sur http://bp-software.ifrance.com/
0
cs_Tioneb Messages postés 193 Date d'inscription dimanche 16 décembre 2001 Statut Membre Dernière intervention 29 juillet 2015
27 août 2007 à 17:11
Excuse moi ma réponse ne fonctionne pas! "formulalocal" prend bien en compte le résultat d'une formule mais par contre, quand on fait "+1" dans la macro ça ne fonctionne pas! J'essaye de trouver et si je trouve quelque chose, je poste...

--------------------------------------------------------------------------
Visitez mon site sur http://bp-software.ifrance.com/
0
cs_Tioneb Messages postés 193 Date d'inscription dimanche 16 décembre 2001 Statut Membre Dernière intervention 29 juillet 2015
27 août 2007 à 17:23
Eh je me tape la honte quand même, j'ai répondu complètement à coté!!!!! En, je pense que tu voulais dire que si tu mets une formule dans B45 (ex: =A1-1) et que tu tape "2" dans A1, H7 ne s'incrémente pas. Si ta macro ne doit réagir seulement avec B45, tu peux peut-être faire plus simple, car dans ce cas je ne vois pas pourquoi tu utilise "intersect" (qui, au passage, je ne sais pas à quoi elle sert, si quelqu'un peut l'expliquer au passage...)

--------------------------------------------------------------------------
Visitez mon site sur http://bp-software.ifrance.com/
0
beber4x Messages postés 12 Date d'inscription samedi 25 août 2007 Statut Membre Dernière intervention 27 août 2007
27 août 2007 à 17:25
merci pour le temps que tu passes a m aider
0

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

Posez votre question
beber4x Messages postés 12 Date d'inscription samedi 25 août 2007 Statut Membre Dernière intervention 27 août 2007
27 août 2007 à 17:31
la macro incremente +1 a h7 quand b45 passe de vide a 1.

la ligne intersect permet de selectonner la ou les cellules sur lequelle va s executer la macro.
Enfin d apres ce que j ai compris!!
0
beber4x Messages postés 12 Date d'inscription samedi 25 août 2007 Statut Membre Dernière intervention 27 août 2007
27 août 2007 à 17:43
ne pourrais pas passer par  une cellule tampo?  qui a fficherais juste la valeur de la cellule qui contient la formule et ainsi contourner le probleme?
0
beber4x Messages postés 12 Date d'inscription samedi 25 août 2007 Statut Membre Dernière intervention 27 août 2007
27 août 2007 à 17:54
bon j aifait ca mais ca marche presque trop bien LOL

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plage As Range
Range("c45").Value = Range("b45").Value


Set Plage = Intersect(Target, Range("c45"))
If Plage Is Nothing Then Exit Sub
For Each cellule In Plage
If cellule.Value = 1 Then
Range("h7").Value = Range("h7").Value + 1
End If
Next
End Sub

le compteur declenche au 1er qui apparait mais il ne s arrete plus  arf!!!
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
27 août 2007 à 20:04
Normal, faut remettre à 0 à chaaque vérif...

Private Sub Worksheet_Change(ByVal Target As Range)
Range("H7").Value = 0

Dim Plage As RangeRange("c45").Value Range("b45").Value Set Plage Intersect(Target, Range("c45"))
If Plage Is Nothing Then Exit Sub
For Each cellule In Plage
If cellule.Value = 1 Then
Range("h7").Value = Range("h7").Value + 1
End If
Next
End Sub

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
27 août 2007 à 20:06
Peut-être à mettre sous :
If Plage Is Nothing Then Exit Sub

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
0
cs_Tioneb Messages postés 193 Date d'inscription dimanche 16 décembre 2001 Statut Membre Dernière intervention 29 juillet 2015
27 août 2007 à 20:22
Sinon, si tu mets une formule dans b45, tu peux utiliser le sub "Worksheet_Calculate()" qui est exécuté seulement s'il y a une formule qui se calcule et dedans tu vérifis si l'utilisateur à entré des valeurs qui entrent en scène lors du calcul de la formule et tu incrémente si c'est le cas. C'est peu-être plus barbare mais je pense que ça devrait fonctionner. Enfin, moi je dis ça, je dis rien....

--------------------------------------------------------------------------
Visitez mon site sur http://bp-software.ifrance.com/
0
beber4x Messages postés 12 Date d'inscription samedi 25 août 2007 Statut Membre Dernière intervention 27 août 2007
27 août 2007 à 20:26
merci  pour la reponse ,mais j ai une erreur de syntaxe sur le ligne:
Range("c45").Value Range("b45").Value Set Plage Intersect(Target, Range("c45"))

pouvez regarde SVP.

merci
0
beber4x Messages postés 12 Date d'inscription samedi 25 août 2007 Statut Membre Dernière intervention 27 août 2007
27 août 2007 à 20:43
j ai trouvé l erreur de syntaxe, il fallait aller a la ligne apres Range("c45").Value = Range("b45").Value.

Mais le compteur s emballe, il tourne en permanence.

il est coriace l animal!!

merci quand meme a toutes vos reponse , c est tres sympa
0
beber4x Messages postés 12 Date d'inscription samedi 25 août 2007 Statut Membre Dernière intervention 27 août 2007
27 août 2007 à 20:51
ha be voila se code la fonctionne PRESQUE


 


Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plage As Range
Range("c45").Value = Range("b45").Value


Set Plage = Intersect(Target, Range("c45"))
If Plage Is Nothing Then Exit Sub
For Each cellule In Plage
If cellule.Value = 1 Then
Range("h7").Value = Range("h7").Value + 1
Range("c45").Value = 0
End If
Next
End Sub

Mais il demarre a 2 ????? et incrment comme lui faut avec +1 a chaque foi

curieux!!!!
0
Rejoignez-nous