Copier un tableau VBA à partir d'une cellule dans la feuille Excel

FabsVD

XLDnaute Nouveau
Bonjour à tous,

Je suis un débutant en VBA et la je bloque depuis un bon moment sur une fonction, qui je pense vous semblera toute bête.

Je vous pose la situation :

J'ai réussi à faire un programme de copie et avec une opération sur les valeurs en utilisant des boucles. Mais apparemment ce procédé est beaucoup trop long.
En fouillant un peu sur internet, je vois que l'utilisation de tableau diminue grandement le temps de calcul.

Alors pour cibler mon problème j'ai préparé un fichier avec un programme VBA qui illustre ce que je veux faire.

Mais c'est toujours aussi long, même en passant par des tableaux. Je pense que le problème vient du fait que le programme écrit un à un les cellules depuis la boucle.

Je pense que le problème vient donc de la ligne " Cells(7 + cmpt2, 6) = Montab(cmpt) ".

Les valeurs dans les cellules F3 et G3 sont variable et a entré par l'utilisateur. Elles correspondent aux jalons (ligne de début et ligne de fin) que j'aimerai copier.
La copie commence de toute façon en F7, pour la colonne A.

Est-ce que quelqu'un pourrais me venir en aide ?

Merci beaucoup d'avance !

Fabs


Je suis sur Excel 2007 ...
 

Pièces jointes

  • Macro_Tableau_test.xlsm
    67.7 KB · Affichages: 59
Dernière édition:

FabsVD

XLDnaute Nouveau
Re : Copier un tableau VBA à partir d'une cellule dans la feuille Excel

Bonjour le Forum !

Personne n'a d'idée ?? :-(

Précision:
J'ai beaucoup de points à traité, c'est pour ça que c'est long, mais je n'ai pas de réelle différence d’exécution en passant par les tableaux ou les boucle (en VBA)
 

Efgé

XLDnaute Barbatruc
Re : Copier un tableau VBA à partir d'une cellule dans la feuille Excel

Bonjour FabsVD,
Une proposition :
VB:
Sub test_Efgé()
Dim Montab() 'Tableau VBA
Dim Debut As Double ' Chronomètre
Dim cmpt As Long 'As Long on ne sait jamais
Debut = Timer
Application.ScreenUpdating = False
' Effacement des données de F7 à la dernière cellule remplie en F
Range("F7:F" & Cells(7, 6).End(xlDown).Row).Clear
'Mettre toutes les données dans le tableau
Montab = Range(Cells(Cells(3, 6).Value, 1), Cells(Cells(3, 7).Value, 1)).Value
'on double et on arrondi les valeurs du tableau
For cmpt = 1 To UBound(Montab, 1)
    Montab(cmpt, 1) = Round(CLng(Montab(cmpt, 1)) * 2)
Next cmpt
' on colle le tableau (voir Resize dans l'aide)
Cells(7, 6).Resize(UBound(Montab, 1), 1) = Montab
Application.ScreenUpdating = True
' Durée de la macro en seconde(s)
MsgBox Timer - Debut
End Sub
Cordialement
 

Pièces jointes

  • Macro_Tableau_test(1).xlsm
    54.4 KB · Affichages: 50

Discussions similaires

Réponses
3
Affichages
673

Statistiques des forums

Discussions
314 634
Messages
2 111 445
Membres
111 137
dernier inscrit
SANTA POLA