Compteur excel

Résolu
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!!

4 réponses

  1. dobo69 Messages postés 1593 Date d'inscription   Statut Membre Dernière intervention   835
     
    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.
    0
    1. Charles25620
       
      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 !!
      0
    2. dobo69 Messages postés 1593 Date d'inscription   Statut Membre Dernière intervention   835
       
      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
      0
    3. Charles25620
       
      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
      0
    4. dobo69 Messages postés 1593 Date d'inscription   Statut Membre Dernière intervention   835
       
      fichier protégé par mot de passe... merci de l'enlever.
      0
    5. Charles25620
       
      http://www.cijoint.fr/cjlink.php?file=cj201007/cijWg1xiKi.xls
      voici le nouveau lien excusez moi !
      0
  2. dobo69 Messages postés 1593 Date d'inscription   Statut Membre Dernière intervention   835
     
    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.
    0
    1. Charles25620
       
      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
      0
    2. dobo69 Messages postés 1593 Date d'inscription   Statut Membre Dernière intervention   835
       
      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" ?
      0
    3. Charles25620
       
      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
      0
    4. dobo69 Messages postés 1593 Date d'inscription   Statut Membre Dernière intervention   835
       
      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...
      0
    5. Charles25620
       
      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 !
      0
  3. dobo69 Messages postés 1593 Date d'inscription   Statut Membre Dernière intervention   835
     
    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"
    0
    1. Charles25620
       
      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
      0
  4. dobo69 Messages postés 1593 Date d'inscription   Statut Membre Dernière intervention   835
     
    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.
    0
    1. Charles25620
       
      Je vous remercie pour votre patience et pour votre détermination tout marche à merveille ! Un grand merci!!!
      0