Compteur excel
Résolu
Charles25620
-
Charles25620 -
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!!
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!!
A voir également:
- Exemple qrqc ligne
- Compteur électrique - Guide
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
4 réponses
bonjour,
réponse "simple" dans un premier temps :
petite macro à coller dans le module de la feuille où doit être fait cette manip :
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.
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.
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.
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" ?
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
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...
- 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 !
Voici le lien où vous pourrez trouver le fichier excel...
Encore merci !
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
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
jour,
Pour faire la meme chose dans la colonne R :
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.
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 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 !!
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
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
voici le nouveau lien excusez moi !