Compteur excel

Résolu/Fermé
-
 Charles25620 -
Bonjour à toutes et à tous,

J'essaie de faire un compteur sous excel qui en faite dans une cellule (par exemple A1) afficherait le nombre de fois qu' il y a affichage d'un mot (par exemple retard) dans la case B1) . Donc en somme , le compteur doit itéré +1 à chaque fois qu'il y a "retard" dans B1.

J'ai essayer des fonction comme NB.SI et Somme prod mais pas réussi !! POuvez vous m'aider!!

4 réponses

Messages postés
1584
Date d'inscription
vendredi 24 juillet 2009
Statut
Membre
Dernière intervention
30 juin 2013
781
bonjour,

réponse "simple" dans un premier temps :
petite macro à coller dans le module de la feuille où doit être fait cette manip :

Private Sub Worksheet_Change(ByVal Target As Range)    
If Not Intersect([B1], Target) Is Nothing And [B1]= "retard" Then   
[A1]= [A1]+ 1    
End If    
End Sub


Rajoute 1 dans la cellule A1 chaque fois qu'on écrit 'retard' en B1

Pour intégrer le code :
- Clic-droit sur l'onglet correspondant
- 'Visualiser le code' (ouvre le module vba au niveau de l'objet de la feuille en cours)
- Coller le texte du code ci-dessus dans la page blanche ainsi ouverte,
- fermer le module vba.

la procédure est active : tester si c'est ce que vous voulez.

par contre si vous cherchez à comptabiliser tous les 'retards' qui pourraient être présents en colonne B il s'agit bien de =NB.SI(B:B;"retard") à écrire en A1.
Si vous n'avez besoin de rien, demandez-moi.

Merci pour votre réponse ,

Je vais préciser pour avoir la meilleur réponse possible !! ^^
alors en faite j'ai deux colonne une appelé "état" l'autre "Retard" exemple Colonne I et J, la colonne "état" à 3 paramètre soit outil monté, OP fini , ou non traité, la colonne J donc "Retard" a deux paramètres soit Retard début OP, ou rien " ". Et en faite se que je souhaite c'Est que quand j'ai à chaque fois retard début OP et Non traité pour les colonnes J et I cela m'incrémente de +1 dans la case B2 !

J'espère être clair !

merci !!
Messages postés
1584
Date d'inscription
vendredi 24 juillet 2009
Statut
Membre
Dernière intervention
30 juin 2013
781
non,,

pas très clair :
Vous pouvez déposer un fichier exemple (sans infos personnelles ou confidentielles) sur http://www.cijoint.fr/ et coller le lien fourni par le site sur votre prochain message

Voila j'ai déposé le fichier ici http://www.cijoint.fr/cjlink.php?file=cj201007/cij1PDAQRC.xls
Vous pourrez voir que en case B2 de la feuille planning S1 et jaune et c'est sur cette feuille que je travail , je veux qu'il y est une itération +1 à chaque fois qu'il y a Retard début OP en colonne J et non traité en colonne I . J'espère que vous comprendrez ,

Merci salutation
Messages postés
1584
Date d'inscription
vendredi 24 juillet 2009
Statut
Membre
Dernière intervention
30 juin 2013
781
fichier protégé par mot de passe... merci de l'enlever.

http://www.cijoint.fr/cjlink.php?file=cj201007/cijWg1xiKi.xls
voici le nouveau lien excusez moi !
Messages postés
1584
Date d'inscription
vendredi 24 juillet 2009
Statut
Membre
Dernière intervention
30 juin 2013
781
Sub compter() 
compte = 0 
With ActiveSheet 
nbrligne = .Cells(.Columns(9).Cells.Count, 2).End(xlUp).Row - 1 
For i = 5 To nbrligne 
If .Cells(i, 9) = "Non traité" And .Cells(i, 10) = "Retard début OP" Then 
compte = compte + 1 
End If 
Next 
.[B2] = compte 
End With 
End Sub


pour compter les occurrences I:I="Non traité" et J:J= retard début OP"
à copier-coller dans un module du classeur (le module 1 ou un autre...) et affecter un bouton. (Visiblement vous connaissez...)


Sub RAZ() 
With ActiveSheet 
.[B2].ClearContents 
end with
End Sub


pour effacer la valeur en B2.
Procédure idem précédent

Si vous n'avez besoin de rien, demandez-moi.

Merci de votre aide cela marche mais cela décrement qd je change un état de non traité a OF fini je passe de de 49 a 48 ,, cela garde pas la mémoire . Connaissez vous un moyen aussi que cela ce mete à jour automatiquement sans que je fasse alt F8 pour relancer la macro!

Merci beaucoup
Messages postés
1584
Date d'inscription
vendredi 24 juillet 2009
Statut
Membre
Dernière intervention
30 juin 2013
781
désolé mais je ne comprends pas le but recherché.
la macro proposée compte à chaque fois qu'on l'exécute le nombre d'occurrences. Ensuite le nombre affiché ne change ps tant qu'on ne cherche pas à recompter, donc la valeur est bien conservée. Si on relance le calcul c'est qu'on cherche à la mettre à jour non ?
Qu'est ce que vous entendez par "garder en mémoire" ?

En faite le but est de savoir à chaque semaine le nombre de fois que l'on a été en retard, donc tous les jours je lancerai le macro pour qu'il comptabilise mais le lendemain si j'ai une ligne qui vient à etre fini alors je changerais l'état par OF fini . Et ce que je veux en faite c'est que le nombre compter de la veille ne régresse pas par rapport à celui d'aujourd8 si je viens à changer l'état. Je vous explique en faite c'est pour faire un digramme de pareto et donc pour savoir le nombre de fois que j'ai été en retard par jour puis par semaine . SUis je plus clair? merci de votre intérêt
Messages postés
1584
Date d'inscription
vendredi 24 juillet 2009
Statut
Membre
Dernière intervention
30 juin 2013
781
Il faut donc, avant chaque 'écriture' par la macro du nombre d'occurrences, sauvegarder l'ancienne valeur dans un tableau d'historique. Cela est très simple à faire, mais il faut savoir :
- sous quelle forme ? dans une autre feuille ?
- conserver les semaines précédentes ? mettre à 0 ce tableau au moyen d'un bouton ?
etc...
Merci de préparer ce tableau d'historique avant de poursuivre. je ne peux pas deviner ce qui vous intéresse vraiment au final...

Voila donc j'ai créer un tableaux dans la feuille QRQC S1 colonne P qui récapitule tous les jours le nombre de retard que j'ai accumulé avec le total pour la semaine qui sera en définitive le nombre de retard au dernier jours ...

Voici le lien où vous pourrez trouver le fichier excel...

Encore merci !
Messages postés
1584
Date d'inscription
vendredi 24 juillet 2009
Statut
Membre
Dernière intervention
30 juin 2013
781
Sub compter()
compte = 0
With ActiveSheet
nbrligne = .Cells(.Columns(9).Cells.Count, 2).End(xlUp).Row - 1
For i = 5 To nbrligne
If .Cells(i, 9) = "Non traité" And .Cells(i, 10) = "Retard début OP" Then
compte = compte + 1
End If
Next
ancien = [B2].Value
.[B2] = compte
End With
With Sheets("QRQC S1")
nblign = .Range("Q11:Q16").Find("*", , , , xlByRows, xlPrevious).Row + 1
If nblign = 17 Then
.Range("Q12:Q16").ClearContents
nblign = 12
End If
.Cells(nblign, 17) = ancien
End With
End Sub


compte les occurrences dans B2 de la feuille active et copie "l'ancienne" valeur dans le tableau de la feuille QRQC S1 'à la suite'. Si le tableau est complet, le "remet à 0" si les 5 lignes sont déjà remplies (au bout de 5 jours donc).

A METTRE DANS LE "MODULE 1" ET PAS DANS LE MODULE DE LA FEUILLE, puis affecter un bouton "compter"

Sub RAZ()
With ActiveSheet
.[B2].ClearContents
End With
End Sub


A mettre dans le module MODULE 1 ET PAS DANS LE MODULE DE LA FEUILLE, puis affecter un bouton "RAZ"

Bonjour ,
Merci cela marche tr;es bien comme ca ,j'ai essayer de suivre votre programmation pour faire la même chose mais cette fois ci avec les« retard de fin OP » et «Non traité» Ou «retard fin d'OP» et « Outil monté», donc j'ai rentré le code suivant dans le module 1 :

Sub compter2()
'
'Compter le nombre de OP non traité et en retard de fin OP ou outil monté et en retard de fin OP'

compte2 = 0
With ActiveSheet
nbrligne = .Cells(.Columns(9).Cells.Count, 2).End(xlUp).Row - 1
For i = 5 To nbrligne
If .Cells(i, 9) = "Non traité" And .Cells(i, 11) = "Retard Fin OP" Or .Cells(i, 9) = "Outil monté" And .Cells(i, 11) = "Retard Fin OP" Then
compte2 = compte2 + 1
End If
Next
ancien2 = [E2].Value
.[E2] = compte2
End With
With Sheets("QRQC S1")
nblign = .Range("R11:R16").Find("*", , , , xlByRows, xlPrevious).Row + 1
If nblign = 17 Then
.Range("R12:R16").ClearContents
nblign = 12
End If
.Cells(nblign, 17) = ancien2
End With
End Sub

En faite pour compter j'ai pas de problème mais c'est dans la partie du programme ou je renvoi l'information dans la feuille QRQC S1 Je voudrais le mettre à la suite dans la colonne d'apres c'est à dire R donc pour 5 jours de R12 à R16, mais cela ne marche pas vous trouverez peut être l'erreur dans mon code .

En vous remerciant encore de votre aide et de votre patience !

Charles
Messages postés
1584
Date d'inscription
vendredi 24 juillet 2009
Statut
Membre
Dernière intervention
30 juin 2013
781
jour,

Pour faire la meme chose dans la colonne R :

Sub compter2() 
' 
'Compter le nombre de OP non traité et en retard de fin OP ou outil monté et en retard de fin OP' 

compte2 = 0 
With ActiveSheet 
nbrligne = .Cells(.Columns(9).Cells.Count, 2).End(xlUp).Row - 1 
For i = 5 To nbrligne 
If .Cells(i, 9) = "Non traité" And .Cells(i, 11) = "Retard Fin OP" Or .Cells(i, 9) = "Outil monté" And .Cells(i, 11) = "Retard Fin OP" Then 
compte2 = compte2 + 1 
End If 
Next 
ancien2 = .[E2].Value 
.[E2] = compte2 
End With 
With Sheets("QRQC S1") 
nblign = .Range("R11:R16").Find("*", , , , xlByRows, xlPrevious).Row + 1 
If nblign = 17 Then 
.Range("R12:R16").ClearContents 
nblign = 12 
End If 
.Cells(nblign, 18) = ancien2 
End With 
End Sub 


Ce la ne se voit pas très bien : avant dernière ligne : .Cells(nblign, 18) 18 représente la colonne R.
Si vous n'avez besoin de rien, demandez-moi.

Je vous remercie pour votre patience et pour votre détermination tout marche à merveille ! Un grand merci!!!