Racourcir la formule

Bonjour à tous,

Je dois compiler les absences des joueurs à chaque semaine. J'ai créé une formule avec la fonction "si" mais je trouve que la formule est beaucoup trop volumineuse. Je dois répéter la formule pour 34 semaines.

À chaque semaine je dois éliminer la première semaine de la formule et ajouter la dernière semaine.

Des explications complètes sont incluses dans la pièce jointe.

Merci de votre aide.

Bonsoir,

On pourrait récupérer le nom de la feuille avec CELLULE, mais il faudrait le modifier pour pointer la feuille précédente... et au total la formule serait longue (car il faut déjà extraire le nom de feuille de la chaîne renvoyée par CELLULE).

Si j'ai bien compris ton propos, lorsqu'il y a absence tu mets un "x" (en colonneA) et d'une feuille à l'autre on cumule les amendes si les absences se succèdent (il suffit donc d'ajouter 10 au cumul de la semaine précédente), jusqu'à un plafond de 120.

Le plus simple, c'est de te faire une fonction personnalisée : tu tapes = AMENDE(cellule où tu mets la croix) et la fonction te renvoie l'amende en testant la cellule de même adresse sur la feuille précédente.

Exemple : =AMENDE(A1) en E1 renvoie s'il y a "x" en A1 l'amende en E1 de la feuille préc. + 10

Function AMENDE(ab As String)
    Dim nf$, adr$, i%, a
    Application.Volatile
    If ab = "x" Then
        nf = Application.Caller.Parent.Name
        adr = Application.Caller.Address
        For i = 2 To ThisWorkbook.Worksheets.Count
            If ThisWorkbook.Worksheets(i).Name = nf Then
                If i > 2 Then
                    a = ThisWorkbook.Worksheets(i - 1).Range(adr) + 10
                    If a > 120 Then a = 120
                Else
                    a = 10
                End If
            End If
        Next i
    Else
        a = 0
    End If
    AMENDE = a
End Function

Cordialement.

Bonsoir,

Merci beaucoup pour ta réponse rapide.

Tu as très bien compris l'idée des absences aléatoires.

Dans ton fichier en pièce jointe, si je regarde la liste déroulante des fonctions, il y en a une qui se nomme PERSONNALISÉ. Je n'ai pas cette fonction dans ma liste.

Si je comprend bien, je vais devoir créer cette nouvelle fonction avec le code VBA que tu a inscrit dans ta réponse.

Je suis désolé mais ma connaissance d'Excel VBA est plutôt limitée. Je ne sais pas à quel endroit je doit créer le code.

J'aurais besoin d'un coup de pouce afin de m'assurer que le code va bien fonctionner pour toutes les feuilles.

Merci encore

Bonjour,

Tu l'as dans le classeur transmis, tu ouvres l'éditeur VBA (faire Alt+F11) et tu la verras dans Module1.

Tu la copies là ou sur le post, et tu la colles dans ton fichier : tu ouvres pareil l'éditeur VBA, pour insérer un module : Insertion > Module, et coller, tu peux refermer. La fonction est disponible comme les autres fonctions d'Excel et s'utilise de la même façon.

Tu dois simplement te souvenir que en argument faut lui indiquer la cellule où est le "x", et pour le même joueur utiliser la même cellule sur chaque feuille (elle récupère sa propre adresse pour aller chercher la même adresse dans la feuille précédente). Elle n'est pas dépendante des noms de feuille (tu peux donc les changer sans que ça nuise) mais de l'ordre (à partir de la 2e, elle ignore la première, elle considère la 2e comme feuille de démarrage, et ensuite elle se réfère à la précédente selon où elle est...)

Bonne continuation.

NB- Là on a entré les montants en 'dur' dans la fonction, mais pour qu'elle puisse s'adapter à des changements de "tarif", on pourra le cas échéant modifier pour basculer les montants en arguments...

Bonjour,

Merci mille fois. Ça fonctionne superbement bien. Ça semble tellement simple quand on sait ce que l'on fait.

Ce sera beaucoup plus facile d'appliquer cette méthode plutôt que de répéter la longue formule.

Encore une foi, mille mercis.

Rechercher des sujets similaires à "racourcir formule"