Array : Appliquer formule sur une très grande plage

Résolu/Fermé
HUGO BASS Messages postés 20 Date d'inscription dimanche 11 août 2013 Statut Membre Dernière intervention 18 septembre 2015 - 18 août 2015 à 00:03
HUGO BASS Messages postés 20 Date d'inscription dimanche 11 août 2013 Statut Membre Dernière intervention 18 septembre 2015 - 18 août 2015 à 13:39
Bonjour à toutes et tous,

Je suis débutant en création de code VBA sous excel.
Je cherche sur une très grande plage de cellule (C2:C1000) dans mon exemple (a terme encore beaucoup plus de lignes) à appliquer une formule (C2= A2+B2 par exemple).Formule devant être "stockée" dans la macro, la cellule ne faisant apparaitre que la valeur du calcul

J'arrive à créer un code qui fonctionne pour C2 par exemple mais vous imaginez bien que je ne peux me permettre d'écrire ce code pour chaque ligne concernée


Sub FORMULE()

Range("C2").FormulaLocal = "=A2+B2"
Range("C2").Value = Range("C2")

End Sub

Sub FORMULE()

Range("C2").FormulaLocal = "=A2+B2"
Range("C2").Value = Range("C2")

End Sub

Je pourrais créer une boucle each for mais d'après mes recherches, il semblerait que la méthode des ARRAY ou TABLEAUX VARIANTS soit beaucoup plus rapide en ce qui concerne le temps d'exécution de la macro. Sachant que à terme mon fichier final contiendra un nombre très important de ligne et que je ne veux pas qu'ils soit trop lourd en volume je souhaite à la fois une macro rapide et sans écrire les formules en dur dans les cellules concernées.
J'ai donc commencé à écrire le code ci après mais manifestement mes compétences sont insuffisantes car mon code "plante" sans que je n'arrive à savoir pourquoi. Je pense que je ne comprend pas bien la syntaxe des tableaux intermédiaires.
Ci après mon code, peut être que l'un d'entre vous pourra m'aiguiller et m'apporter une solution.



Sub FORMULEBIS()

Dim TAB1 ' C2:C1000 I, J
Dim TAB2 ' A2:A1000 K, L
Dim TAB3 'B2:B100 M, N

Dim I As Integer, J As Integer, K As Integer, L As Integer, M As Integer, N As Integer

TAB1 = Range("C2:C1000").Value
TAB2 = Range("A2:A1000").Value
TAB3 = Range("B2:B1000").Value

For I = 2 To 1000
For J = 3 To 3

For K = 2 To 1000
For L = 1 To 1

For M = 2 To 1000
For N = 2 To 2

TAB1(I, J) = TAB2(K, L) + TAB3(M, N)

Next J
Next I
Next K
Next L
Next M
Next N

Range("c2:c1000").Value = TAB1

End Sub



J'espère être assez clair

Merci
Cordialement
Hugues



3 réponses

Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
18 août 2015 à 00:37
Bonjour,

Essaie avec
Sub FORMULE()
Range("C2").FormulaLocal = "=A2+B2"
Range("C2").AutoFill Range("C2:C1000")
Range("C2:C1000").Value = Range("C2:C1000").Value
End Sub

A+
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 240
Modifié par eriiic le 18/08/2015 à 00:46
Bonjour,

Pas besoin de boucle :
    Application.ScreenUpdating = False
    Range("C2:C1000").FormulaLocal = "=A2+B2"
    Range("C2:C1000").Value = Range("C2").Resize(1000).Value

Ca prend 0.007 s
eric

En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
0
HUGO BASS Messages postés 20 Date d'inscription dimanche 11 août 2013 Statut Membre Dernière intervention 18 septembre 2015
18 août 2015 à 13:39
Bonjour,

Merci à vous 2 pour vos réponses très rapide même passé minuit.
Vos éclairages m'ont mis sur la voix, je clos donc ce post comme résolu

Merci beaucoup
0