Compteur

Signaler
Messages postés
12
Date d'inscription
samedi 25 août 2007
Statut
Membre
Dernière intervention
27 août 2007
-
Messages postés
12
Date d'inscription
samedi 25 août 2007
Statut
Membre
Dernière intervention
27 août 2007
-
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

Messages postés
193
Date d'inscription
dimanche 16 décembre 2001
Statut
Membre
Dernière intervention
29 juillet 2015

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/
Messages postés
193
Date d'inscription
dimanche 16 décembre 2001
Statut
Membre
Dernière intervention
29 juillet 2015

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/
Messages postés
193
Date d'inscription
dimanche 16 décembre 2001
Statut
Membre
Dernière intervention
29 juillet 2015

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/
Messages postés
12
Date d'inscription
samedi 25 août 2007
Statut
Membre
Dernière intervention
27 août 2007

merci pour le temps que tu passes a m aider
Messages postés
12
Date d'inscription
samedi 25 août 2007
Statut
Membre
Dernière intervention
27 août 2007

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!!
Messages postés
12
Date d'inscription
samedi 25 août 2007
Statut
Membre
Dernière intervention
27 août 2007

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?
Messages postés
12
Date d'inscription
samedi 25 août 2007
Statut
Membre
Dernière intervention
27 août 2007

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!!!
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Peut-être à mettre sous :
If Plage Is Nothing Then Exit Sub

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
Messages postés
193
Date d'inscription
dimanche 16 décembre 2001
Statut
Membre
Dernière intervention
29 juillet 2015

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/
Messages postés
12
Date d'inscription
samedi 25 août 2007
Statut
Membre
Dernière intervention
27 août 2007

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
Messages postés
12
Date d'inscription
samedi 25 août 2007
Statut
Membre
Dernière intervention
27 août 2007

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
Messages postés
12
Date d'inscription
samedi 25 août 2007
Statut
Membre
Dernière intervention
27 août 2007

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!!!!