Array : Appliquer formule sur une très grande plage

Résolu
HUGO BASS Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   -  
HUGO BASS Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   526
 
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 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
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   Statut Membre Dernière intervention  
 
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