Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 gigigg

Dranreb

XLDnaute Barbatruc
Vous ne vous rappelez pas ? C'est la variable avec laquelle on construit le nom de la feuille et récupère les valeurs de Feuil1.Cells(NumSit + 14, etc.).Value
Alors la ligne pour la situation suivante ce sera NumSit + 15
 

Dranreb

XLDnaute Barbatruc
Et bien vous calculez et rangez dans les cellules de cette lignes les montants restants qui seront à considérer la fois d'après.
Pour la situation elle même, le début ne change pas.
 

Dranreb

XLDnaute Barbatruc
Le plus simple serait de faire des affectations genre Feuil1.Cells(NumSit + 15, 10).Value = Feuil1.Cells(NumSit + 14, 10).Value - FCbl.Cells(x, y).Value
Mais ce ne serait pas le plus performant.
 

Dranreb

XLDnaute Barbatruc
Le plus performant serait de charger les données nécessaire dans des tableaux en une seule fois pour chacun d'eux, faire les calcul à partir des éléments des tableaux, ranger leurs résultats dans les élément d'un tableau résultant d'une ligne et x colonnes, et décharger tout à la fin d'un coup celui ci dans la ligne.
 

Dranreb

XLDnaute Barbatruc
Je parlais seulement de tableaux VBA en mémoire.
La propriété Value d'un objet Range représentant plusieurs cellule contigües est un tel tableau d'éléments de type Variant, toujours à 2 dimensions, même quand il n'y a qu'une ligne ou une colonne.
Dites vous bien que l'accès à la Value d'un Range est pénalisant quel que soit le nombre de cellules de cette plage. Donc 10000 accès à une seule cellule chaque fois dure 10000 fois plus longtemps qu'un seul accès à une plage de 10000 cellules. Même si ce n'est quand même pas tout à fait vrai, ça l'est assez pour qu'on puisse partir de ce principe.
Les accès aux éléments d'un tableau en mémoire sont quand à eux très rapides. Des milliers de fois plus rapides probablement que l'accès à la Value d'un Range.
 
Dernière édition:

BoixosNois

XLDnaute Nouveau
Je commence à comprendre
il me faut vraiment une formation en VBA
Une fois on fini ce projet je vais consacrer une heure par jour pour tout apprendre dès le début
Maintenant comment on va completer le code??
 

Dranreb

XLDnaute Barbatruc
Pour déclarer un tableau dynamique d'éléments Variant il suffit de mettre des parenthèses vides derrière son nom
VB:
Dim T()
Pour dimensionner à l'exécution un tableau dynamique c'est
VB:
Redim T(1 To LMax, 1 To CMax)
LMax et CMax étant des expressions valant les nombres de lignes et de colonnes désirées. Il est inutile de le faire s'il sera récupéré de la Value d'un Range de plusieurs cellules: il sera dimensionné automatiquement à la taille de la plage.

Pour initialiser un élément du tableau c'est
VB:
T(L, C) = Expression
Pour le lire c'est
VB:
Variable = T(L, C)
L et C étant bien entendu des expressions valant les numéros de ligne et de colonne à atteindre.

Un élément de tableau peut lui même être utilisé partout en tant que variable ou en tant qu'expression, ce qui vous indique comment transférer un élément de tableau dans un autre élément de tableau.

L'expression UBound(T, 1) retrouve le nombre de lignes, UBound(T, 2) le nombre de colonnes.
 
Dernière édition:

Discussions similaires

Réponses
9
Affichages
186
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…