Eviter les FormulaR1C1

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
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Pour remplacer les VLOOKUP je préconise un Dictionary.
Pour le reste ma fonction Gigogne peut aussi offrir des solutions rapides.
Mais elle ne convient que pour des rapports où tous les arguments de regroupements doivent être reproduits classés.
Une concaténation de tableaux peut aussi apporter une solution différente en remplacement des VLOOKUP s'ils se rapportent aux arguments de regroupements.
 

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 810
dernier inscrit
mohammedaminelahbali