thierry.bayard
XLDnaute Junior
Bonjour à tous,
J'essaie de retravailler le code d'une macro (très longue) utilisée pour des tableaux de bord.
La macro enchaine beaucoup de calcul. Pour le moment, j'utilise souvent des FormulaR1C1 puis je fige la valeur dans la cellule. Ca donne des trucs comme ça, pas très beau :
With .Range("AA5:AA" & .Range("E4").End(xlDown).Row)
.FormulaR1C1 = "=RC[-1]-RC[-2]"
.Value = .Value
End With
With .Range("AB5:AB" & .Range("E4").End(xlDown).Row)
.FormulaR1C1 = "=IF(RC[-3]=0,0,RC[-1]/RC[-3])"
.Value = .Value
End With
J'ai essayer de créer une boucle. Ca fonctionne mais le temps d'exécution de la macro s'est encore allongé :
Dim c As Range
For Each c In Range("AA5:AA" & .Range("E4").End(xlDown).Row)
c.Value = Cells(c.Row, c.Column - 1) - Cells(c.Row, c.Column - 2)
Next
For Each c In Range("AB5:AB" & .Range("E4").End(xlDown).Row)
If Cells(c.Row, c.Column - 3) = 0 Then
c.Value = ""
Else
c.Value = Cells(c.Row, c.Column - 1) / Cells(c.Row, c.Column - 3)
End If
Next
Pour d'autres fonctions, je bloque encore plus et ne voit pas du tout comment remplacer la fonction Excel. C'est le cas pour les RECHERCHEV et les SOMMPROD où je mets des codes de ce style :
.FormulaR1C1 = "=VLOOKUP(RC[1],Structure!C[6]:C[7],2,FALSE)"
.FormulaR1C1 = "=SUMIFS(Activité!R2C37:R5000C37,Activité!R2C1:R5000C1,'Synthèse spé'!RC4,Activité!R2C3:R5000C3,'Synthèse spé'!R1C,Activité!R2C4:R5000C4,""Entrées"")"
Pouvez-vous m'expliquer comment me passer de l'étape fonction Excel tout en diminuant le temps d'exécution de la macro (qui est l'objectif N°1).
Dites moi si un fichier exemple est nécessaire où si j'ai été suffisamment clair...
Merci d'avance pour votre aide.
Thierry
J'essaie de retravailler le code d'une macro (très longue) utilisée pour des tableaux de bord.
La macro enchaine beaucoup de calcul. Pour le moment, j'utilise souvent des FormulaR1C1 puis je fige la valeur dans la cellule. Ca donne des trucs comme ça, pas très beau :
With .Range("AA5:AA" & .Range("E4").End(xlDown).Row)
.FormulaR1C1 = "=RC[-1]-RC[-2]"
.Value = .Value
End With
With .Range("AB5:AB" & .Range("E4").End(xlDown).Row)
.FormulaR1C1 = "=IF(RC[-3]=0,0,RC[-1]/RC[-3])"
.Value = .Value
End With
J'ai essayer de créer une boucle. Ca fonctionne mais le temps d'exécution de la macro s'est encore allongé :
Dim c As Range
For Each c In Range("AA5:AA" & .Range("E4").End(xlDown).Row)
c.Value = Cells(c.Row, c.Column - 1) - Cells(c.Row, c.Column - 2)
Next
For Each c In Range("AB5:AB" & .Range("E4").End(xlDown).Row)
If Cells(c.Row, c.Column - 3) = 0 Then
c.Value = ""
Else
c.Value = Cells(c.Row, c.Column - 1) / Cells(c.Row, c.Column - 3)
End If
Next
Pour d'autres fonctions, je bloque encore plus et ne voit pas du tout comment remplacer la fonction Excel. C'est le cas pour les RECHERCHEV et les SOMMPROD où je mets des codes de ce style :
.FormulaR1C1 = "=VLOOKUP(RC[1],Structure!C[6]:C[7],2,FALSE)"
.FormulaR1C1 = "=SUMIFS(Activité!R2C37:R5000C37,Activité!R2C1:R5000C1,'Synthèse spé'!RC4,Activité!R2C3:R5000C3,'Synthèse spé'!R1C,Activité!R2C4:R5000C4,""Entrées"")"
Pouvez-vous m'expliquer comment me passer de l'étape fonction Excel tout en diminuant le temps d'exécution de la macro (qui est l'objectif N°1).
Dites moi si un fichier exemple est nécessaire où si j'ai été suffisamment clair...
Merci d'avance pour votre aide.
Thierry