Transformer une formule en code VBA

Bonjour à tout le monde je reviens vers vous pour un nouveau soucis sur excel vba.

Je m'explique j'ai réussi à faire tourner sur excel une formule qui marche nickel le seule soucis c'est que je répete la formule à plusieurs réprises dans mon classeur et vu que la formule prend en boucle des lignes vides lorsqu'elle tourne ça ralentit considérablement mon classeur, il me faut quasiment 1 à 3 minute voir plus pour exécuter une action.

J'aimerai donc transformer ma formule en code vba qui se lancerait au demarrage du classeur automatiquement .

Voici les deux formules en question.

=SOMMEPROD((BASEPROD!$C$2:$C$20000=C5)*(MOIS(BASEPROD!$A$2:$A$20000)=MOIS($E$1))*(ANNEE(BASEPROD!$A$2:$A$20000)=ANNEE($F$1))*(BASEPROD!$D$2:$D$20000))

=SOMMEPROD((BASEPROD!$C$2:$C$20000=C5)*(ANNEE(BASEPROD!$A$2:$A$20000)=$F$1)*(BASEPROD!$D$2:$D$20000))

j'ai réussi à écrire ce code -ci dessous mais il ne marche pas ça me fait erreur 1004 définie par l'application pour par l'objet:

Private Sub Workbook_Open()

With ThisWorkbook.Worksheets("RAPPORT")

Range("E5:E9").Formula = "=SUMPRODUCT((BASEPROD!$C$2:$C$20000=C5)*(MONTH(BASEPROD!$A$2:$A$20000)=MONTH($E$1))*(YEAR(BASEPROD!$A$2:$A$20000)=YEAR($F$1))*(BASEPROD!$D$2:$D$20000)))"

End With

End Sub

si quelqu'un peut me dire pourquoi mon code il ne marche pas ou comment transformer la formule en code vba qui se lance au demarrage de la feuille ça serait génial. Merci d'avance pour vos réponses.

bonjour,

si tu utilises un TCD, cela devrait aller beaucoup plus vite.

voici une solution via une macro, j'ai dû faire des hypothèses sur la structure de ton fichier que tu n'as pas mis.

'=SOMMEPROD((BASEPROD!$C$2:$C$20000=C5)*(MOIS(BASEPROD!$A$2:$A$20000)=MOIS($E$1))*(ANNEE(BASEPROD!$A$2:$A$20000)=ANNEE($F$1))*(BASEPROD!$D$2:$D$20000))

'=SOMMEPROD((BASEPROD!$C$2:$C$20000=C5)*(ANNEE(BASEPROD!$A$2:$A$20000)=$F$1)*(BASEPROD!$D$2:$D$20000))

Sub aargh()
    Set ws = sheets("Rapport")
    dlws = ws.Cells(Rows.Count, 3).End(xlUp).Row
    With Sheets("baseprod")
        dl = .Cells(Rows.Count, 1).End(xlUp).Row
        mois = Month(ws.Range("E1"))
        année = Year(ws.Range("F1"))
        tablo = .Range("A1:D" & dl)
        For i = 5 To dlws 'on parcourt la colonne 3 de la feuille ws
            vc = ws.Cells(i, 3)
            If vc <> "" Then
                sommois = 0
                somannée = 0
                For j = 2 To dl
                    If tablo(j, 3) = vc And Year(tablo(j, 1)) = année Then
                        somannée = somannée + tablo(i, 4)
                        If Month(tablo(j, 1)) = mois Then
                            sommois = sommois + tablo(i, 4)
                        End If
                    End If
                Next j
                ws.Cells(i, "E") = sommois 'on met le resultat somme par mois en colonne E sur ws
                ws.Cells(i, "F") = somannée 'on met le resultat somme par mois en colonne F sur ws
            End If
        Next i
    End With
End Sub

Bonjour H204 pour ta réponse effectivement ça pourrait correspondre à ce que je veux faire mais ça ne marche pas .

Il n'y a pas d'érreur dans le code mais ça ne m'affiche rien quand je change ma date. Parce que le but de ma fonction c'est d'afficher des valeurs de ventes qui sont stockés dans un fichiers base en fonction de la date entrée et ceux par moi et par année. avec la formule ça marche bien mais trop lent avec ton code il n'y a plus de lenteur mais aucun affichage. Je te mets en pièce jointe un exemple du fichier sur lequel je veux travailler sachant que le fichier original est confidentiel je ne peux pas le mettre en ligne. Dans ce fichier la formule ne prend pas en compte toutes les lignes de la base alors qu'il faudrait quelle prenne la totalité des colonnes A B ET C de la base.

Si tu réussi à adapter ton code sur se fichier je l'adapterais à mon tour sur le fichier original qui correspond plus au code que tu as écris plus haut je pense.

Merci vraiment de tout le temps que vous prenez pour me répondre

Rechercher des sujets similaires à "transformer formule code vba"