Array : Appliquer formule sur une très grande plage
Résolu
HUGO BASS
Messages postés
20
Statut
Membre
-
HUGO BASS Messages postés 20 Statut Membre -
HUGO BASS Messages postés 20 Statut Membre -
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
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.
J'espère être assez clair
Merci
Cordialement
Hugues
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
A voir également:
- Array : Appliquer formule sur une très grande plage
- Erreur Array AutoIt ✓ - Forum Autoit / batch
- Problème avec mon $where=array(); ✓ - Forum PHP
- Microphone array ne fonctionne pas ✓ - Forum Windows
- Array javascript vers php - Forum PHP
- Fonction Array - erreur 1004 ✓ - Forum VB / VBA
3 réponses
Bonjour,
Essaie avec
A+
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+
Bonjour,
Pas besoin de boucle :
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
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