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 :

Quand est-ce que je dépasse ?


Sujet :

Excel

  1. #1
    Membre émérite
    Homme Profil pro
    Formateur et développeur bureautique
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur et développeur bureautique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 2 878
    Points
    2 878
    Par défaut Quand est-ce que je dépasse ?
    Bonjour tout le monde

    Dans une liste de nombres (les uns en dessous des autres), je voudrai renvoyer l'occurrence à partir de laquelle la somme de toutes les occurrences passées excède un montant indiqué
    Bien entendu, le tout en une seule formule

    Exemple : des nombres qui se suivent 1, 2, 3, 4, ... indiquer que c'est à partir de 6 que l'on a dépassé 20. Ou indiquer que c'est à la 10ème occurrence que l'on a dépassé 50.

    Je pense bien qu'il faut passer par une formule matricielle (ou un SOMMEPROD), mais je n'arrive pas à cumuler les occurrences au fur et à mesure dans ma matrice.

    Vue l'heure qu'il est, je ne surprendrai personne en indiquant que cela m'empêchait de dormir jusqu'à présent (mais à, j'y vais).

    Merci sincèrement d'avance à ceux qui pourront me mettre sur la voie.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  2. #2
    Membre régulier
    Homme Profil pro
    Évaluation de la performance
    Inscrit en
    Avril 2018
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Canada

    Informations professionnelles :
    Activité : Évaluation de la performance
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2018
    Messages : 39
    Points : 82
    Points
    82
    Par défaut
    Bonjour Pierre

    Je ne sais pas si ma réponse te sera utile mais j'aurais tendance à passer par une fonction personnalisée
    Voici un exemple
    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
    Function Somme_Colonne(Cible, Ligne_Debut, Colonne)
     
    Dim Total As Single
    Dim Debut_Tableau As Single
     
    Application.Volatile True
       Debut_Tableau = Ligne_Debut
            Do While Total < Cible
            If IsEmpty(ActiveSheet.Cells(Ligne_Debut, Colonne)) Then
                Somme_Colonne = "Valeur trop grande"
                Exit Function 'Sortir de la fonction si la cible n'Est pas atteinte à la première cellule vide
            End If
            If Not IsNumeric(ActiveSheet.Cells(Ligne_Debut, Colonne)) Then
                Somme_Colonne = "Erreur"
                Exit Function 'Sortir si une cellule ne contient pas en chiffre
            End If
            Total = Total + ActiveSheet.Cells(Ligne_Debut, Colonne).Value 'Additionner les valeurs
            Ligne_Debut = Ligne_Debut + 1 'incréementer la ligne
        Loop
     
    Somme_Colonne = Ligne_Debut - Debut_Tableau
     
    End Function
    Sinon, je suis curieux de voir si quelqu'un peut pondre une formule.
    Bonne nuit

  3. #3
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    Je pense bien qu'il faut passer par une formule matricielle (ou un SOMMEPROD)
    Pourquoi donc, puisque selon ce que tu exposes, tu compares simplement une somme avec un max défini ?
    Si ce max est en A1 et que tes montants sont en colonne B à partir de B1, cette simple formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(SOMME($B$1:B1)>$A$1;"X";"")
    placée en C1 et tirée vers le bas en tant que de besoin, mettra par exemple un "X" en colonne C là où dépassement.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  4. #4
    Membre émérite
    Homme Profil pro
    Formateur et développeur bureautique
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur et développeur bureautique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 2 878
    Points
    2 878
    Par défaut
    Merci unparia pour la réponse, et la remarque est avec raison, je compare seulement une somme avec un max défini.
    Citation Envoyé par unparia Voir le message
    Pourquoi donc, puisque selon ce que tu exposes, tu compares simplement une somme avec un max défini ?
    Si ce max est en A1 et que tes montants sont en colonne B à partir de B1, cette simple formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(SOMME($B$1:B1)>$A$1;"X";"")
    placée en C1 et tirée vers le bas en tant que de besoin, mettra par exemple un "X" en colonne C là où dépassement.
    Malheureusement, comme je l'avais précisé, je voudrais avoir le résultat en une seule formule
    En effet, bien entendu, ce n'était qu'un exemple simplifié. Ce n'est pas en colonne mais en ligne que j'ai mes valeurs dans la vraie vie, et il y a quelques centaines de lignes. Donc cela doublerai le nombre de cellules.

    On peut donc en revenir à la question de départ qui cherche à savoir à partir de quelle valeur on dépasse un max défini.

    Bonne journée et merci d'avoir pris le temps de répondre.

    Pierre
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  5. #5
    Membre émérite
    Homme Profil pro
    Formateur et développeur bureautique
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur et développeur bureautique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 2 878
    Points
    2 878
    Par défaut
    Citation Envoyé par LeBo74 Voir le message
    Je ne sais pas si ma réponse te sera utile mais j'aurais tendance à passer par une fonction personnalisée
    [...]
    Sinon, je suis curieux de voir si quelqu'un peut pondre une formule.
    Bonjour LeBo74

    Je n'ai pas très envie d'une fonction en VBA car j'ai beaucoup de données et cela ralentira le temps de traitement.
    De plus cela fait convertir le type de fichier.
    Enfin, il faut utiliser une fonction inconnue dans Excel pour les autres fichiers où j'aurai besoin de ce même comportement.

    Et, oui, moi aussi, je suis impatient de trouver la solution en une seule formule.

    Pierre
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  6. #6
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Salut.

    il faudrait une double matricielle, donc je pense que ce n'est pas possible en une seule formule. Soit tu prends la solution de unparia, soit tu utilises une fonction perso, par exemple comme celle-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function LigneCumulDepassement(Cells As Range, Limite As Double) As Long
      Dim i As Long
      Dim Total As Double
     
      Application.Volatile
      i = 1
      Do While i <= Cells.Count And Total < Limite
        Total = Total + Cells(i)
        i = i + 1
      Loop
      If Total > Limite Then LigneCumulDepassement = i - 1 Else LigneCumulDepassement = 0
    End Function
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Membre émérite
    Homme Profil pro
    Formateur et développeur bureautique
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur et développeur bureautique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 2 878
    Points
    2 878
    Par défaut
    Bonjour Pierre

    Si tu dis que ce n'est certainement pas possible en une formule, je ne vais pas insister à chercher. Dommage.
    Citation Envoyé par Pierre Fauconnier Voir le message
    il faudrait une double matricielle, donc je pense que ce n'est pas possible en une seule formule. Soit tu prends la solution de unparia, soit tu utilises une fonction perso
    Merci pour avoir pris le temps de pondre cette petite fonction.

    Sinon, plutôt que la proposition de unparia, je préfère faire dans la colonne B un simple cumul et mettre la formule suivante (à valider en matriciel) dans une cellule (sachant que la limite est en E2 bien sûr) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =EQUIV(VRAI;(B1:B22>E2);0)
    Bonne fin de journée ensoleillée à tout le monde

    Pierre
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

Discussions similaires

  1. Réponses: 0
    Dernier message: 09/12/2010, 12h32
  2. Quand est-ce que Flex a terminé l'affichage?
    Par Fr3nchK1ss dans le forum Flex
    Réponses: 6
    Dernier message: 02/02/2010, 18h01
  3. Quand est ce que le Rollback segment est écrit et par qui ?
    Par bach dans le forum Administration
    Réponses: 2
    Dernier message: 19/02/2009, 16h04
  4. quand est ce que on ajoute les classe associations
    Par jean sami dans le forum UML
    Réponses: 5
    Dernier message: 19/08/2008, 11h44
  5. Réponses: 2
    Dernier message: 18/12/2007, 22h34

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