Formule de remplacement

Bonjour à tous,

J'ai créé une formule qui grandie avec le nombre de feuilles. C'est la seule façon que je connaisse pour arriver à la solution désirée.

Dans le fichier en pièce jointe, j'ai créé 6 feuilles qui démontrent comment la formule grandie à chacune des feuilles.

Mon problème est que je peux avoir jusqu'à 40 feuilles à formuler. Déjà qu'à 6 feuilles la formule est assez volumineuse, à 40 feuilles elle mesurera..... 1/2 km.

J'aimerais, si possible remplacer la formule par un code, une autre formule plus courte, ou une Fonction qui ferait la même opération.

21classeur1v1.xlsm (59.93 Ko)

Merci beaucoup pour votre aide.

Bonjour,

une proposition via une fonction personnalisée, qui fait l'hypothèse que les feuilles sont triées sur base de leur nom.

fonction à mettre dans un module standard

Function resx()
    Application.Volatile
    l = Application.Caller.Row
    p = Application.Caller.Parent.Name
    c = 0
    For Each ws In Sheets
        If ws.Name = p Then Exit For
        If ws.Name <> "Données" Then
            If ws.Cells(l, "H") = "x" Then c = c + 1 Else c = 0
        End If
    Next
    If ws.Cells(l, "N") > 0 And c > 0 Then resx = Sheets("données").Range("X12") * c Else resx = ""
End Function

mettre en colonne AE de chaque feuille

=resx()
14classeur1v1.xlsm (53.32 Ko)

Bonjour h2so4,

Merci pour ta réponse rapide. Malheureusement ça ne fonctionne pas très bien. Je suis quelque peu confus.

Exemple : Abat-Neuf!H3 contient un "x" alors que Sem.01!N3 contient un 1. Ce qui indique que le joueur est de retour. IL devrait y avoir un montant de $10,00 dans la cellule Sem.01!AE3. Elle est vide. Mais si tu écrit un texte quelconque dans la Cellule AF3, le $10,00 apparaît dans la cellule AE3.

C'est ce que je ne comprend pas.

Et c'est ainsi pour tout le fichier. Aussi le nombre dans la colonne "N" peut varier de 1 à 3. Une semaine ça peut être un 1 alors que la semaine suivante ça peut être un 2 ou un 3.

9classeur1v1.xlsm (46.21 Ko)

Merci encore pour ton aide.

bonjour,

une correction

20classeur1v1.xlsm (53.80 Ko)

Bonsoir h2so4,

Encore merci pour ta réponse rapide.

Cette fois ci, tout fonctionne parfaitement.

Merci beaucoup pour ton aide.

Je ferme le dossier.

bonjour

essayer ca

Function resx(Optional nom_feuill As String)
Application.Volatile

Dim counter As Integer
Dim i As Integer
Dim sem_arry
Dim store As Integer
Dim l, p

sem_arry = Array("Abat-Neuf", "Sem.01", "Sem.02", "Sem.03", "Sem.04", "Sem.05", "Sem.06", "Sem.07", "Sem.08", "Sem.09", "Sem.10", _
"Sem.11", "Sem.12", "Sem.13", "Sem.14", "Sem.15", "Sem.16", "Sem.17", "Sem.18", "Sem.19", "Sem.20", _
"Sem.21", "Sem.22", "Sem.23", "Sem.24", "Sem.25", "Sem.26", "Sem.27", "Sem.28", "Sem.29", "Sem.30", _
"Sem.31", "Sem.32", "Sem.33", "Sem.34", "Sem.35", "Sem.36", "Sem.37", "Sem.38", "Sem.39", "Sem.40", _
"Sem.41", "Sem.42", "Sem.43", "Sem.44", "Sem.45")

counter = 0
l = Application.Caller.Row
p = Application.Caller.Parent.Name

If Not p = "Abat-Neuf" Then
i = Val(Mid(p, 5)) - 1
store = Worksheets(p).Range("N" & l).Value
If store > 0 Then
Do Until Worksheets(sem_arry(i)).Range("N" & l).Value > 0
If Worksheets(sem_arry(i)).Range("H" & l).Value = "x" Then
counter = counter + 1
End If
i = i - 1
If i < 0 Then Exit Do

Loop
End If

If counter > 0 Then
resx = Format(Worksheets("Données").Range("X" & 12).Value * counter, "$0.00")
ElseIf counter = 0 Then
resx = ""
End If

End If 'If Not p = "Abat-Neuf" Then
End Function

puis mettre en colonne AE de chaque feuille ( ou Fx >>> fonction personnalisé>>> resx)

=resx()

Bonjour Amir,

Merci beaucoup pour ta suggestion. elle fonctionne parfaitement bien.

Ça me donne deux options plutôt qu'une.

Merci beaucoup.

Bonjour,

pour résoudre le problème de performance mentionné en MP, je t'ai transformé la fonction en macro, à exécuter quand tu souhaites faire le calcul de ta colonne AE. vérifie si cela donne le bon résultat. j'ai supposé que les feuilles Finale01 à Finale04 suivaient la même logique que les feuilles Sem.xx

Sub aargh()
    Dim res()
    Application.Calculation = xlCalculationManual
    For Each ws In Worksheets
        If Left(ws.Name, 3) = "Sem" Or Left(ws.Name, 7) = "Finale0" Or ws.Name = "abat-neuf" Then
            dl = ws.Cells(Rows.Count, 1).End(xlUp).Row
            ReDim res(2 To dl)
            For i = 2 To dl
                res(i) = resx(ws.Cells(i, "AE"))
            Next i
            ws.Cells(2, "AE").Resize(dl - 2) = Application.Transpose(res)
        End If
    Next ws
    Application.Calculation = xlCalculationAutomatic
End Sub

Private Function resx(c As Range)
    l = c.Row
    Set P = c.Parent
    c = 0
    If P.Cells(l, "N") > 0 Then
        For Each ws In Sheets
            If ws.Name = P.Name Then Exit For
            If ws.Name <> "Données" Then
                If ws.Cells(l, "H") = "x" Then c = c + 1 Else c = 0
            End If
        Next
        If c > 0 Then resx = Sheets("données").Range("X12") * c Else resx = ""
    End If
End Function

Bonsoir h2so4,

Merci beaucoup pour ta réponse.

La Macro fonctionne parfaitement en ajoutant un bouton qui actionne la colonne AE. Deux boutons à activer plutôt qu'un, en autant que le tout fonctionne, c'est très bien.

Tout de même, J'ai tenté d'ajouter ta Macro à la fin du code principal "Standar", afin de n'avoir qu'un seul bouton à activer, sans succès. Moins de bouton, moins de chance d'oubli qui engendre des erreurs.....

Ta supposition pour les semaines Finale01,..... est juste. Même logique que les Semxx.

Un problème, les montants indiqués dans la colonne AE devraient s'additionner dans la cellule W1. Pour une raison que j'ignore, ils ne le font pas. Y a t'il un moyen de faire en sorte qu'ils s'additionne en W1 ?

Merci encore pour ton aide. C'est très apprécié.

Bonjour,

j'ai fait les modifications dans ton fichier

Bonjour h2so4,

Je suis désolé mais je n'arrive pas à ouvrir le fichier après l'avoir téléchargé de cjoint.com.

Ça me dit que le format ou l'extension n'est pas valide.

Je ne sais pas trop quoi faire.

Merci beaucoup.

Bonsoir,

je n'ai pas de problème pour ouvrir ce fichier.

attends que ton anti-virus ait fini de vérifier le document avant de l'ouvrir.

Bonjour,

Je suis extrêmement désolé mais je n'arrive pas à ouvrir le fichier. Sur le site de Cjoint.com le fichier est identifié comme un fichier "xlsm" mais lorsque je le sauvegarde et le télécharge sur mon bureau, il se transforme en "xlsx". Comme je ne connais pas la différence entre les deux types de fichier, je ne comprend pas pourquoi il se transforme de "xlsm" en "xlsx". Peut-être Est-ce là le problème ?

Je ne sais plus quoi dire sauf que je déteste faire perdre son temps à quelqu'un qui m'offre un coup de main.

Merci beaucoup.

Rechercher des sujets similaires à "formule remplacement"