IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Excel Discussion :

Excel 2010 : Calcul d'occurrences sur une série en cours.


Sujet :

Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 34
    Points : 24
    Points
    24
    Par défaut Excel 2010 : Calcul d'occurrences sur une série en cours.
    Bonjour ,

    J'ai beau chercher sur le forum et m'aider de livres depuis plusieurs jours, je n'arrive pas à trouver une solution à mon problème, je dois dire que je n'y connais pas grand chose en VB aussi, hors il est probable que je doive en passer par là:

    Voilà mon problème :

    J'ai un tableau, simple, à 2 entrées, que j'alimente chaque semaine suivant 3 valeurs :
    c'est soit "G", soit "P", soit "N".

    Pour une ligne donnée "Toto", je peux donc avoir les valeurs suivantes (une donnée par colonne):

    --A--B-C-D-E-F-G-H-I--J-K-L-M-N-O-P-Q-R-S-T-U-V
    Toto-G-P-P-N-N-P-G-G-G-N-G-P-P-N-P-G-P

    -> Ce matin, je viens donc de rentrer ma dernière valeur ("P") à la colonne "R".


    Je cherche à faire 2 choses:
    1 - calculer le nombre d’occurrences de la série en cours différente de "N".
    -> pour la série en exemple, je devrais obtenir : 3, car ça fait bien 3 fois que la donnée rentrée est différente de "N" (en rouge et souligné).
    Et lorsque je renterais ce "N", le nombre devra être remis à 0.

    2 - Calculer le nombre de séries - depuis le début - ou j'ai obtenu 3 ou plus de valeurs successives différentes de "N".
    -> pour la série en exemple, je devrais obtenir "4", car il y a bien 4 séries de données avec 3 ou plus d'occurrences successives différentes de "N" : de B à D, de G à J, de L à M (en rouge) et de P à S (en rouge et souligné), car la série en cours doit aussi être comptabilisée !

    Je précise que je connais la plage de données, les colonnes allant de "B" à "AM".

    J'arrive à calculer le nombre de "N", (heureusement ) en me servant de =NB.SI(B2:AM2;"N")
    Mais, là je sèche ! Je m'attends à une solution assez complexe car il s'agit d'une série non finie ...
    Bien sûr, de tête c'est facile à faire, sauf que j'ai plus de 140 lignes ... et c'est très laborieux ! <- mes yeux à la fin de l'exercice de comptage.

    Désolé si je suis pas très clair, c'est pas simple à expliquer mais j'espère qu'une âme charitable se penchera sur mon cas, car je galère vraiment depuis un bon moment !

    par avance, merci.
    Et bonne journée.
    Marc

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 202
    Points : 14 353
    Points
    14 353
    Par défaut
    Bonjour,

    Formules matricielles (à valider avec Ctrl+Maj+Entrée) :

    1.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =MAX(SI((B1:AM1<>"n")*(B1:AM1<>"");COLONNE(B1:AM1)))-MAX(SI(B1:AM1="n";COLONNE(B1:AM1)))
    2.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMME(SI((C1:AM1<>B1:AL1)*(B1:AL1="n");1;0))+SI(B1<>"n";1;0)
    à tester sérieusement.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  3. #3
    Invité
    Invité(e)
    Par défaut Avec une fonction NbDeSeries
    Bonjour,

    Essayez cette fonction, à placer dans un module standard de votre fichier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Function NbDeSeries(AireDeRecherche As Range)
     
        Dim Cellule As Range
        Dim CompteurNonN As Long
        Dim PositionCelluleEnCours As Long
     
        CompteurNonN = 0
        AireDeRecherche.Select
        PositionCelluleEnCours = 0
        NbDeSeries = 0
     
        For Each Cellule In AireDeRecherche
     
            PositionCelluleEnCours = PositionCelluleEnCours + 1
     
            If Cellule <> "N" And Cellule <> "" Then
                CompteurNonN = CompteurNonN + 1
            End If
     
            If CompteurNonN >= 3 And (Cellule = "N" Or Cellule = "" Or PositionCelluleEnCours = AireDeRecherche.Count) Then
               NbDeSeries = NbDeSeries + 1
               CompteurNonN = 0
            End If
     
        Next Cellule
     
    End Function

    Puis dans votre feuille en A3 par exemple si B3:AM3 contient vos résultats, placez la formule

    Comme indiqué dans le vidage d'écran, dans l'exemple la série va jusqu'à AM et on a bien 7 cas.

    Cordialement.

  4. #4
    Membre expert

    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2012
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 564
    Points : 3 554
    Points
    3 554
    Billets dans le blog
    1
    Par défaut
    Bonjour le forum,
    Bonjour Marc, Daniel, Eric,
    Bravo à Eric pour la fonction personnalisée.
    J'ai essayé comme Daniel de trouver des réponses par formules.
    Pas de problème pour le premier calcul : il suffit de calculer la différence entre le rang de la colonne de la dernière cellule non vide et le rang de la colonne de la dernière cellule contenant un N ;
    Même idée que Daniel mais formule matricielle d'écriture légèrement différente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =MAX(($B1:$AM1<>"")*COLONNE($B1:$AM1))-MAX(($B1:$AM1="N")*COLONNE($B1:$AM1))
    à valider par Ctrl + Maj + Entrée
    Pour le nombre de séries, bel essai de Daniel mais la formule obtenue ne tient pas compte de la contrainte voulue par Marc : les séries doivent contenir au moins 3 termes différents de "N".
    Avec en A4:R4 la ligne Titi -N-P-P-N-N-P-G-G-G-N-G-P-P-N-P-N-P , la formule de Daniel renvoie 5 comme réponse alors qu'il n'y a que 2 séries à retenir.
    Mais son idée de décalage m'a conduit à une formule matricielle (malheureusement véritable usine à gaz) :
    la ligne "Toto" étant en B1:AM1, et le premier calcul (nombre de termes différents de "N" de la série en cours) étant effectué en A2, écrire la formule matricielle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    =SOMME(1*((GRANDE.VALEUR((B1:AM1="N")*COLONNE(B1:AM1); COLONNE(INDIRECT("A1:"&ADRESSE(LIGNE(A1);NB.SI($B1:$AM1;"N")-1)))) - 
    GRANDE.VALEUR((B1:AM1="N")*COLONNE(B1:AM1);COLONNE(INDIRECT("B1:"&ADRESSE(LIGNE(A1);NB.SI($B1:$AM1;"N")))))-1)>2))+(EQUIV("N";$B1:$AM1;0)>3) + (A2>2)
    à valider toujours par Ctrl + Maj + Entrée.
    Cordialement
    Claude

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    468
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 468
    Points : 769
    Points
    769
    Par défaut
    Bonjour,

    Pour des calculs de séries ou de comptage de ce type, la fonction FREQUENCE est très utile.
    Pour la deuxième recherche, donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NB.SI(FREQUENCE(SI(B1:AM1<>"N";COLONNE(B1:AM1));SI(B1:AM1="N";COLONNE(B1:AM1)));">=3")
    Formule matricielle bien sûr.

    A+
    J'utilise LibreOffice 4 donc quand je suis sur la partie du forum Excel, il se peut que mes réponses ne soit pas adéquates. Veuillez m'en excuser.

  6. #6
    Membre expert

    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2012
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 564
    Points : 3 554
    Points
    3 554
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Merci Gérard pour cette formule efficace !
    Cordialement
    Claude

  7. #7
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 34
    Points : 24
    Points
    24
    Par défaut
    Bonjour,
    Un GRAND merci d'abord pour vos réponses, sur lesquelles je vais me pencher de ce clic .
    Et bravo pour les Cours Excel
    Bien à vous.

    Marco

Discussions similaires

  1. Calcul d'un écart-type sur une série de dates
    Par Emilie MARQUOIS-OGEZ dans le forum Excel
    Réponses: 6
    Dernier message: 30/10/2007, 14h56
  2. Réponses: 12
    Dernier message: 26/08/2006, 11h29
  3. [VBA-EXCEL]bloquer la saisie utilisateur sur une colonne
    Par calimero91 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 16/06/2006, 14h37
  4. [Dates] Calcul tout bête sur une date...
    Par poah dans le forum Langage
    Réponses: 5
    Dernier message: 01/11/2005, 15h02
  5. Calculer cos(x) avec une série
    Par Évariste Galois dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 23/08/2005, 15h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo