Explication macro

K

kaze

Guest
Bonjour à tous

J'aimerais comprendre une macro qui effectue différents calculs. Quelqu'un pourrait il m'expliquer les différentes lignes de code en particulier celles en gras? Au début il y a 2 lignes pour set Topcel avec 2 ranges différents??
Merci par avance.

Sub ValueArea()
Dim TopCel As Range
Set TopCel = Range('H2:L2')
Range(TopCel, TopCel.End(xlDown)).ClearContents
Set TopCel = Range('A2')
'Pour affichage
Dim k As Integer
k = 1
Dim TargetCel1, TargetCel2, TargetCel3, TargetCel4, TargetCel5 As Range
Set TargetCel1 = Range('H2')
Set TargetCel2 = Range('I2')
Set TargetCel3 = Range('J2')
Set TargetCel4 = Range('K2')
Set TargetCel5 = Range('L2')
While Not IsEmpty(TopCel)
'Determination du range
Dim varRowsCount As Integer
varRowsCount = 1
While TopCel(varRowsCount + 1) = TopCel
varRowsCount = varRowsCount + 1

Wend

Dim varHigh, varLow, varN As Integer
varHigh = Application.Max(Range(TopCel(1, 4), TopCel(varRowsCount, 4)))
varLow = Application.Min(Range(TopCel(1, 5), TopCel(varRowsCount, 5)))
varN = varHigh - varLow + 1

Dim varDailyRange() As Integer
ReDim varDailyRange(1 To varN)
Dim i As Integer
For i = 1 To varN
varDailyRange(i) = varLow + i - 1

Next i

Note: Le code continue mais pour ne pas décourager les bonnes volontés par une longueur trop importante je m'arrête là.

Bonne journée
 

jp14

XLDnaute Barbatruc
Bonjour

La partie la plus simple
Bonjour

Sub ValueArea()
Dim TopCel As Range
Set TopCel = Range('H2:L2')
Range(TopCel, TopCel.End(xlDown)).ClearContents

Cette partie de macros efface les colonnes H à L
Sauf la première ligne (TopCel = Range('H2:L2'))

Set TopCel = Range('A2')
Topcel contient la valeur A2

While Not IsEmpty(TopCel)
si la cellule A2 est vide on passe à l'instruction Wend

Si la cellule n'est pas vide on exécute les instructions suivante

'Determination du range
Dim varRowsCount As Integer
varRowsCount = 1
While TopCel(varRowsCount + 1) = TopCel
' on cherche dans la colonne A l'avant dernière cellule dont le contenu est égal a la valeur indiquée dans la cellule A2

varRowsCount = varRowsCount + 1 ' ligne suivante)
Wend


varHigh = Application.Max(Range(TopCel(1, 4), TopCel(varRowsCount, 4)))
varLow = Application.Min(Range(TopCel(1, 5), TopCel(varRowsCount, 5)))
varN = varHigh - varLow + 1
On recherche dans une plage de cellule la valeur min et la valeur maxi
TopCel(1, 4) cellule A2 1 même ligne, 3(4-1) colonnes c a d 'D2'

Ensuite on range dans un tableau (Dim varDailyRange()) de taille (ReDim varDailyRange(1 To varN)) la valeur ( valeur mini de la plage ) minimale en ajoutant 0,1,2 .... auvarDailyRange(i) = varLow + i - 1


Message édité par: jp14, à: 25/02/2006 13:17

Message édité par: jp14, à: 25/02/2006 14:36

Message édité par: jp14, à: 25/02/2006 15:18
 
K

kaze

Guest
Bonjour JP14 et tout le forum,

Merci pour ces explications. C'est un peu plus clair!
Pourrais tu m'apporter juste une précision sur la variable k. Sa présence dans le code viens t'il du fait qu'il y a Option Explicit au début et qu'il y a cette ligne de code: varRowsCount = 1 ?

Bon dimanche.
Olivier
 

ChTi160

XLDnaute Barbatruc
Salut Kaze
bonjour JP
je me permets
pour ce qui est de la présence du
Option Explicit en tête de module
sa présence impose la déclaration des Variables fortement conseillé
Dim varRowsCount As Integer 'tu déclares la variable comme étant un integer voir l'aide VBA
tu cliques sur le mot(Integer par exemple) et tu fais F1 tu obtiens pour Integer
Integer, type de données

Les variables de type Integer sont stockées sous la forme de nombres de 16 bits (2 octets) dont la valeur est comprise entre -32 768 et 32 767. Le caractère de déclaration de type Integer est le signe %.

Les variables de type Integer permettent également de représenter des valeurs énumérées. Celles-ci peuvent contenir un ensemble fini d'entiers uniques possédant tous une signification particulière dans le contexte où ils sont utilisés. Elles permettent d'opérer facilement une sélection parmi un nombre connu de choix, du type noir = 0, blanc = 1, etc. Il est conseillé de définir des constantes pour chaque valeur énumérée via l'instruction Const.
varRowsCount = 1 'ici tu affectes à la variable
varRowsCount la valeur 1
bonne journée
n'hésite pas
 
K

kaze

Guest
Bonjour Jean Marie et JP14

Merci pour tes précisions Jean Marie.
Je viens de remarquer que la variable k est utilisée à la fin de la macro lors des instructions d'affichage des résultats. Je comprends donc mieux sa présence dans la déclaration des variables.
Je vais étudier la suite du code de cette macro. Si il y a encore des zones d'ombres puis je faire encore appel à vous?
En tous cas merci.

@+
 
K

kaze

Guest
Bonjour à tous,

J'ai encore 2 lignes de code que je ne comprends pas tout à fait, je les ai mis en gras. J'ai ajouté les commentaires à droite, à corriger si j'ai fait une erreur.

Dim varTPO() As Integer 'declaration variable varTPO nombre entier
ReDim varTPO(1 To varN) 'taille de la variable va de 1 a N
Dim j As Integer 'declaration variable j nombre entier
Dim CelAux1, CelAux2 As Range 'declaration variable CelAux1 et CelAux2 comme plage
Set CelAux1 = TopCel(1, 4) '=colonne D2
Set CelAux2 = TopCel(1, 5) '=colonne E2
For i = 1 To varN 'Pour i allant de 1 a N
varTPO(i) = 0
For j = 1 To 22 'Pour les lignes 1 a 22
If (varDailyRange(i) >= CelAux2(j).Value) And (varDailyRange(i) <= CelAux1(j).Value) Then
varTPO(i) = varTPO(i) + 1

End If
Next j
Next i

NB: Ce bout de code fait suite à la partie précédente (cf 1er post). Serait il mieux de joindre un exemple sur un fichier?

Merci encore pour les explications.
Bonne semaine.
Olivier
 

ChTi160

XLDnaute Barbatruc
Salut kaze
bonjour le fil
bonjour le Forum
kaze une modification au niveau de la déclaration desvariables qui a sont improtance dans la compréhension de la procèdure
tu écrist
Dim varTPO() As Integer 'declaration variable varTPO nombre entier
ReDim varTPO(1 To varN) 'taille de la variable va de 1 a N
varTPO() 'declaration variable varTPO nombre entier

varTPO() est un tableau qui va contenir des Integer
ReDim varTPO(1 To varN) 'taille de la variable va de 1 a N
détermine les dimensions du Tableau varTPO()
pour i =1 varTPO(i) = 0
If (varDailyRange(i) >= CelAux2(j).Value) And (varDailyRange(i) <= CelAux1(j).Value) Then
varTPO(i) = varTPO(i) + 1
cela veut dire si (varDailyRange(i) supérieur ou égal CelAux2(j).Value et varDailyRange(i) inférieur ou égal à CelAux1(j).Value
alors dans le tableau varTPO() dans la case i on ajoutera 1 à la valeur déjà présente dans cette case oupssss pas évident d'expliquer
en espèrant avoir permis une meilleur compréhension
bonne journée
 
K

kaze

Guest
Bonjour Jean Marie et tout le forum,

Pourrais tu me préciser la présence des parenthèses dans Dim varTPO() As Integer.
Dans la suite de la macro ci dessous j'ai compris ce qu'elle calcule mais j'ai un doute dans la signification des lignes en gras.
Pas de variable comme dans cette ligne varTPO(i) = 0

Dim varMaxTPO, varTotTPO As Integer
varMaxTPO = 0
varTotTPO = 0

For i = 1 To varN
varTotTPO = varTotTPO + varTPO(i)
If varTPO(i) > varMaxTPO Then
varMaxTPO = varTPO(i)
End If
Next i
'donne le nombre maxiTPO (affichage en L2)


Merci et bonne journée.
Olivier
 

ChTi160

XLDnaute Barbatruc
Salut kaze
bonjour le Forum
Dim varTPO() As Integer
lors de la déclaration des variables on déclare un objet Ws as WorkSheet on lui donne son appartenance elle représenteras une feuille du Classeur ,pour l'instant cette variable ne représente aucune feuille en particulier
pour ce qui est d'une variable Tableau deux possibilités
tableau temporaire que l'on va charger de données sans jamais le redimensionner
TabTemp as Variant
set TabTemp=Range('A1:C2')
tableau dynamique que l'on va redimensionner d'ou les crochets lors de la déclaration
Dim Tableau()as variant
dim tableau(0 to 1,0 to 1)
dimensionné 2 lignes(0 à 1) deux colonnes (0 à 1)
que l'on peut lors de la procédure redimensionner seulement au niveau de la derniere dimension soit les Colonnes
redim preserve Tableau (0 to 2,0 to 4)
le preserve permet de ne pas effacer les données déjà présentent dans le tableau
redim Tableau(0 to 2 ,0 to 4)le tableau est redimensionner,mais les données déjà présentent ont été effacées au passage
Lien supprimé
ici c'est Zon qui explique les Tableaux Lol
Lien supprimé
cle wiki est accessible en haut des pages du Syte
Accueil ,Forums,Téléchargements,Tutoriels,Se former,Wiki
Bonne journée

Message édité par: Chti160, à: 28/02/2006 08:48
 

Discussions similaires

Réponses
6
Affichages
248

Statistiques des forums

Discussions
312 310
Messages
2 087 134
Membres
103 480
dernier inscrit
etaniere