Cherche formule

Bah dans la formule que t'as posté tu met des Q45 des E44 ou E45 pour ça je comprenais pas j'ai mis formule en AO45 et copier la formule de bas en haut et de haut en bas.

j'ai une autre demande par rapport à la formule je pensais que ça allais être bon.

J'ai copier la formule dans mon fichier original mais vu que j'ai plus de 13000 lignes ça rame, j'ai décidé de mettre une macro pour copier la formule mais sans garder la formule à la fin juste le résultat donc voici la macro. Tout fonctionne sauf nôtre cher matricielle et me colle rien du tout en BV2:BV peu être un truc que j'ai mal fais !

Le début j'ai un doute .Range("BV2:BV" & Nblig) = FormulaArray = _

Sub Formules()
    Dim ws As Worksheet
    Dim Nblig As Long
    For Each ws In ThisWorkbook.Worksheets
        If ws.Name Like "Data" Then
            With ws
                .Select
                Nblig = .Cells(Rows.Count, "A").End(xlUp).Row
                If Nblig = 1 Then Exit Sub
                .Range("BI2:BI" & Nblig) = "=SUMPRODUCT((R2C31:R2000C31=RC31)*(R2C18:R2000C18=COLUMN(C[-60]))*R2C2:R2000C2)"
                .Range("BK2:BK" & Nblig) = "=SUMPRODUCT((R2C31:R2000C31=RC31)*(R2C18:R2000C18=COLUMN(C[-61]))*R2C2:R2000C2)"
                .Range("BM2:BM" & Nblig) = "=SUMPRODUCT((R2C31:R2000C31=RC31)*(R2C18:R2000C18=COLUMN(C[-62]))*R2C2:R2000C2)"
                .Range("BO2:BO" & Nblig) = "=SUMPRODUCT((R2C31:R2000C31=RC31)*(R2C18:R2000C18=COLUMN(C[-63]))*R2C2:R2000C2)"
                .Range("BQ2:BQ" & Nblig) = "=SUMPRODUCT((R2C31:R2000C31=RC31)*(R2C18:R2000C18=COLUMN(C[-64]))*R2C2:R2000C2)"
                .Range("BS2:BS" & Nblig) = "=SUMPRODUCT((R2C31:R2000C31=RC31)*(R2C18:R2000C18=COLUMN(C[-65]))*R2C2:R2000C2)"

                .Range("BV2:BV" & Nblig) = FormulaArray = _
        "=IF(RC[-57]<>"""",RC[-57]-IF(ISERROR(OFFSET(R1C5,MAX((R1C5:R[-1]C[-69]=RC[-69])*(R1C17:R[-1]C[-57]<>"""")*ROW(R1C5:R[-1]C[-69]))-1,12)),0,OFFSET(R1C5,MAX((R1C5:R[-1]C[-69]=RC[-69])*(R1C17:R[-1]C[-57]<>"""")*ROW(R1C5:R[-1]C[-69]))-1,12)),"""")"

                With [A1]
                    .CurrentRegion.Copy
                    .PasteSpecial Paste:=xlPasteValues
                    .Select
                    Application.CutCopyMode = False
                End With

            End With
        End If
    Next ws

End Sub
stepaustras a écrit :

Bah dans la formule que t'as posté tu met des Q45 des E44 ou E45 pour ça je comprenais pas j'ai mis formule en AO45 et copier la formule de bas en haut et de haut en bas.

J'ai fait ça ! moi !

Fatigue dominicale ! J'ai pourtant pas bougé !!

Tu as bien fait !

Je vais remettre un message vu que tu dois avoir un post de décalage pour la question de la formule en format macrotitielle je sais pas si on dis comme ça ou macromanial

Pas la peine !

J'ai vu ton post, un essai macro est logique, mais sans utiliser de formule Excel dans ce cas ! (outil dico et on se limite à des soustractions !)

Suis en pause vespérale ! Pas trop en état d'écrire ça à l'instant, d'autant que j'ai pas mal de réponses à faire, qui attendront aussi !

Au réveil, sauf insomnie !

Bonjour,

Essaie ceci :

Sub DifférenceTaux()
    Dim d As Object, TxAnt&, Tx&, n&, i&, Nm$
    Set d = CreateObject("Scripting.Dictionary")
    d.comparemode = vbTextCompare
    With Worksheets("Feuil1")
        n = .Cells(.Rows.Count, 5).End(xlUp).Row
        Application.ScreenUpdating = False
        For i = 2 To n
            If .Cells(i, 17) <> "" Then
                Nm = .Cells(i, 5)
                TxAnt = CLng(d(Nm))
                Tx = .Cells(i, 17)
                .Cells(i, 41) = Tx - TxAnt
                d(Nm) = Tx
            Else
                .Cells(i, 41) = Empty
            End If
        Next i
    End With
End Sub

et tiens-moi au courant du temps mis...

Le dico est un outil rapide, mais on fait diverses manipulations par ligne... Si cela demeure trop lent, on basculera en tableaux...

NB- La définition de CompareMode pour le dico sur vbTextCompare est destinée à ne pas distinguer majuscules et minuscules (au cas où le problème se poserait.

Cordialement.

Re bonjour

Pas compris ça sert a quoi le dictionnaire !!! A effacer les formules pour ne garder que le résultat ? J'aurais pas de problème de minuscule tout est en majuscule dans la base que je fais Le truc c'est que comme je dois faire une base de donnée, j'ai pas envie de rallonger manuellement la formule alors que excel peu le faire avec un bouton en un seul coup

C'est juste la formule en mode macro avec la macro que j'ai mis plus haut il me sort FAUX alors que si je la fais en prenant la formule que tu as mis ça fonctionne en mode manuel.

.Range("BV2:BV" & Nblig) = FormulaArray = _
        "=IF(RC[-57]<>"""",RC[-57]-IF(ISERROR(OFFSET(R1C5,MAX((R1C5:R[-1]C[-69]=RC[-69])*(R1C17:R[-1]C[-57]<>"""")*ROW(R1C5:R[-1]C[-69]))-1,12)),0,OFFSET(R1C5,MAX((R1C5:R[-1]C[-69]=RC[-69])*(R1C17:R[-1]C[-57]<>"""")*ROW(R1C5:R[-1]C[-69]))-1,12)),"""")"

Après j'ai refait avec l'enregistreur de macro il m'en sort une autre

.Range("BV2:BV" & Nblig) .FormulaArray = _
        "=IF(RC[-24]<>"""",RC[-24]-IF(ISERROR(OFFSET(R1C5,MAX((R1C5:R[-1]C[-36]=RC[-36])*(R1C17:R[-1]C[-24]<>"""")*ROW(R1C5:R[-1]C[-36]))-1,12)),0,OFFSET(R1C5,MAX((R1C5:R[-1]C[-36]=RC[-36])*(R1C17:R[-1]C[-24]<>"""")*ROW(R1C5:R[-1]C[-36]))-1,12)),"""")"

Soit il me sort FAUX ou alors il va mettre 14000 partout c'est a dire le résultat de la première ligne

Pour cela ça serait quoi la bonne formule a adapter dans ma macro pour que ça fonctionne ?

J'avais une formule matricielle dans un autre fichier dans une macro ça ressemblais a ça c'est pas pour mon fichier a moi là mais c'est plus lisible qu'avec l'enregistreur de macro.

.Range("X2").FormulaArray = "=MAX(($B$2:$B$" & Nblig & "=$B2)*(Accueil!$B$3-$A$2:$A$" & Nblig & "<=180)*($P$2:$P$" & Nblig & "))"

Oublie l'enregistreur ! Et oublie les formules !

Teste la macro et chronomètre le temps qu'elle met pour faire le job !

Tout a l'heure en fin d'après midi quand j'ai allongé la formule de la ligne 2 à la ligne 13221 il a mit un temps fou a calculer tout d'un coup vers la moitié il ne mettais pas encore le bon résultat, et pour finir quand j'ai voulu refaire une importation excel bugais j'ai dis OK ça rame trop je suis partis 15 minutes et quand je suis revenu excel était toujours en mode bug. Donc voilà j'ai du l'arrêter en mode force. Pourtant le proc était qu'a 57% et la mémoire idem

Il y aussi que je me suis aperçu que sur windows 7 quand t'as deux fichiers excel ouvert ça fonctionne moins bien quand tu fais tourner des macros, sur windows XP j'avais pas se problème.

J'ai chronométré il a mis 30 secondes pour tout calculer ligne 2 a 13221 en allongeant la formule à la main


Et le dictionnaire j'ai lancer la macro j'en suis a 4 minutes et le sablier tourne encore

Je ne comprends pas ! J'ai fourni une macro qui n'utilise aucune formule ! Elle parcourt la feuille et met les résultats.

C'est celle-là dont je veux le temps ! Le reste on n'en parle plus.

look plus haut

Doit pas aimer le français le dico

CA fait 7 minute et plus excel en mode ne répond plus je crois qu'il a buger

Sub DifférenceTaux()
    Dim d As Object, TxAnt&, Tx&, n&, i&, Nm$, t!
    t = Timer
    Set d = CreateObject("Scripting.Dictionary")
    d.comparemode = vbTextCompare
    With Worksheets("Feuil1")
        n = .Cells(.Rows.Count, 5).End(xlUp).Row
        Application.ScreenUpdating = False
        For i = 2 To n
            If .Cells(i, 17) <> "" Then
                Nm = .Cells(i, 5)
                TxAnt = CLng(d(Nm))
                Tx = .Cells(i, 17)
                .Cells(i, 41) = Tx - TxAnt
                d(Nm) = Tx
            Else
                .Cells(i, 41) = Empty
            End If
        Next i
    End With
    MsgBox (Timer - t) * 1000
End Sub

Voilà ! Là elle est aménagée pour afficher une MsgBox à la fin qui indiquera le temps d'exécution en millisecondes...


Et le dictionnaire j'ai lancer la macro j'en suis a 4 minutes et le sablier tourne encore

Pas possible ! C'est que ton fichier ne correspond pas au modèle, et que la macro plante !

J'ai vu que t'as mis une message box pour le temps j'avais sorti mon chrono ça doit faire 5 minutes avec le nouveau dico et toujours pas de message box.

A préciser que j'ai juste des formules en colonne BV tout le reste il y en a plus du tout vu qu'a chaque coup je prenais ce petit bout de code dans ma macro du haut

With [A1]
                    .CurrentRegion.Copy
                    .PasteSpecial Paste:=xlPasteValues
                    .Select
                    Application.CutCopyMode = False
                End With

Me dis pas que mon excel est foireux je viens de reinstaller tout windows car j'avais plus la listview et windows avait des trucs bizarre j'ai passé 4 jours a tout réinstaller mes programmes après formatage du disque


ça dois bien faire 15 minutes je dis au pif toujours pas de message box

"par MFerrand » il y a 27 minutes" moins 2 ou 3 minutes toujours pas de message box excel a planté je pense

Pas la peine de poursuivre, la réponse que j'attends c'est si ça se fait en moins de 3 secondes ou non !

La macro parcourt la liste et ne s'occupe que de la colonne E où elle trouve un nom (soit une donnée de type String, pas autre chose), la colonne Q où elle attend soit un nombre entier, soit rien (mais effectivement rien !), et la colonne AO où elle inscrit le résultat de la soustraction.

J'ai réessayé le dico pour voir et pour finir il met 2281.25 millisecondes va comprendre un coup ça plante et un autre non

Ça ! J'aime mieux !

Un peu plus de 2 secondes, on peut essayer de descendre en-dessous mais c'est déjà viable !

J'aimerais bien savoir pourquoi ça plantait...

sans 13221 formules dans la colonne BV ça plante plus

j'aurais pas 13000 ligne de formule a rentrer d'un coup vu que tout est rempli ça sera pour la suite ça iras a coup de 200 lignes gros max

Rechercher des sujets similaires à "cherche formule"