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