Faire des calculs avec vba

  • Initiateur de la discussion Initiateur de la discussion sevy1
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

sevy1

XLDnaute Occasionnel
lBonjour à tous
J'ai un fichier qui a plus de 35000 lignes et 30 colonnes reprenant les dates et les textes. Dans ce fichier je fais des calculs (exemple la fonction SOMMEPROD# pour calculer certains indicateurs par mois et année. Puis que les données sont saisies chaque jour le fichier devient lourd alors j'ai pensé à une solution VBA qui me permettrait de ne calculer qu'après avoir cliquer sur un bouton.
Voici un exemple de code que j'ai essayé #Je suis zero en VBA# mais je me rend compte qu'il est lent
Code:
Sub calculer##
    Dim Ws As Worksheet
    Set Ws = Worksheets#"Feuil1"#
    n = Ws.Range#"A50000"#.End#xlUp# - 1
    For i = 2 To n
        debut = Ws.Cells#i, 1#
        fin = Ws.Cells#i, 2#
        If IsDate#debut# And IsDate#fin# Then
            Cells#i, 4#.Value = Application.Max#debut, fin#
            Cells#i, 5#.Value = Cells#i, 4# - Cells#i, 3)
        End If
    Next i
End Sub
Ce que j'ai voulu faire : Prendre la valeur maximale entre la date de la colonne 1 et celle de la colonne deux dans le cas ou les deux existent puis la mettre dans la colonne 4 et ensuite faire la soustraction entre la colonne 4 et 3 et mettre le résultat dans la collone 5.
Alors les Pro je vous remercie pour vos corrections et des suggestions d'optimisation pour que ce soit plus rapide
 
Re : Faire des calculs avec vba

Bonjour
De manière générale, il est bien plus rapide de "charger" un tableau dans le VBA puis de le manipuler, plutôt que de faire appel aux cellules les unes après les autres.

'Par exemple :
dim mon_tableau
mon_tableau = range("A1:C1000").value

'puis
for i = 1 tu ubound(mon_tableau)
'traitements
next

'Enfin
range("A1:C1000").value = mon_tableau
'(ce qui permet de remettre le tableau lorsque l'on a changer les valeurs d'une colonne par exemple)

Bonne continuation
Cdt
 
Re : Faire des calculs avec vba

Bonjour.

Pour illustrer la proposition de Odesta, par exemple comme ça :
VB:
Sub calculer()
Dim Ws As Worksheet, Te(), Ts(), L&
Set Ws = Worksheets("Feuil1")
Te = Ws.[A2].Resize(Ws.[A50000].End(xlUp) - 1, 3).Value
ReDim Ts(1 To UBound(Te, 1), 1 To 2)
For L = 1 To UBound(Te, 1)
   If IsDate(Te(L, 1)) And IsDate(Te(L, 2)) Then
      Ts(L, 1) = WorksheetFunction.Max(Te(L, 1), Te(L, 2))
      Ts(L, 2) = Ts(L, 1) - Te(L, 3): End If: Next L
Ws.[D2].Resize(UBound(Ts, 1), UBound(Ts, 2)).Value2 = Ts
End Sub
À tester.
 
Re : Faire des calculs avec vba

Bonjour
Merci pour votre contribution comme je vous l'ai dit c'est grace à la lecture de ce forum que j'ai bricolé ce code ceci dit j'aimerais que vous m'expliquiez certaines instructions.
1- L&
2- Te = Ws.[A2].Resize(Ws.[A50000].End(xlUp) - 1, 3).Value
3- ReDim Ts(1 To UBound(Te, 1), 1 To 2)
4-Ws.[D2].Resize(UBound(Ts, 1), UBound(Ts, 2)).Value2 = Ts
 
Re : Faire des calculs avec vba

"&" derrière un nom de variable dans un Dim est un raccourci pour " As Long" (J'ai mis longtemps à céder à la flemme en finissant par l'utiliser)
La propriété Value d'un Range de plusieurs cellules contigües consiste en un tableau de Variant qui peut s'affecter à une variable aussi déclarée comme tel. Resize est une méthode de l'objet Range qui en renvoie un autre commençant par la même cellule mais avec un nombre de lignes et de colonnes différentes. Les crochet droits sont quant à eu un raccourci, utilisable seulement avec une expression fixe, de la méthode Evaluate, laquelle renvoie justement un Range quand il s’agit d'une référence de plage ou de cellule.
Redim sert à fixer les dimensions d'un tableau dynamique. Ubound donne la limite supérieur d'une des dimensions d'un tableau dont elles sont déjà fixées.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
0
Affichages
367
  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
45
Retour