Itération hors module
Bonjour,
Etant débutant, je suis sur que la solution est simple mais j'ai beau chercher je ne la trouve pas.
Pourriez vous m'expliquer comment récupérer une valeur d'itération d'un boucle for hors module, sans quelle ne soit égale a sa dernière valeur. Je ne sais pas si je m'exprime correctement...
Un petit exemple
Dans le module 1
Public lavaleur As Integer
Function toto()
for i = 1 to 5
lavaleur = i
Next
End function
Dans le module 2
sub tutu()
toto
msgbox lavaleur
end sub
Chez moi, lavaleur reste bloquée à 5 et ne s'incrémente pas...et je sais pourquoi,
mais je ne trouve pas la solution pour palier au problème..
Auriez vous une explication SVP
D'avance merci
Matt
Bonsoir, tutu lance toto qui affecte à lavaleur 1 puis 2... puis 5, puis tutu affiche lavaleur, donc 5. Tu peux afficher chaque valeur de i en plaçant msgbox au cours de la boucle.
Function toto()
for i = 1 to 5
lavaleur = i
MsgBox i
Next
End functionoyobrans a écrit :Bonsoir, tutu lance toto qui affecte à lavaleur 1 puis 2... puis 5, puis tutu affiche lavaleur, donc 5. Tu peux afficher chaque valeur de i en plaçant msgbox au cours de la boucle.
Function toto() for i = 1 to 5 lavaleur = i MsgBox i Next End function
Merci pour ta réponse, mais le problème est que j'ai besoin d'incrémenter lavaleur dans tutu() ^^'.
La MsgBox n'est là qu'a titre d'expemple
Bonsoir,
1) C'est normal : Ta proc. Tutu exécute la proc. Toto laquelle affecte une valeur à ta variable, que Tutu affiche.
2) Malgré l'instruction Function, Toto n'en est pas spécialement une, n'étant pas conçue pour renvoyer une valeur, et d'ailleurs tu l'utilises comme proc. Sub (ce qui serait par ailleurs faisable même si c'était une vraie fonction, à l'instar de MsgBox qui est une fonction).
3) Ton exemple ne justifie pas l'utilisation de plusieurs modules...
4) Explique mieux ce que tu veux obtenir exactement, et joins un fichier modèle qui permettra de te répondre sans avoir à en fabriquer un (ce que pour ma part je m'interdis !)
5) Si tu souhaitais faire un incrémenteur dont tu puisses constater la valeur prise à chaque incrément, la boucle dans Toto n'est pas la bonne solution, il faut qu'elle se contente d'ajouter 1 (ou l'incrément choisi) à la variable à chaque appel. Et c'est dans Tutu que tu peux mettre une boucle où à chaque tour tu peux appeler Toto et afficher la nouvelle valeur de la variable.
Cordialement.
Par soucis d'organisation, je souhaitais ranger dans un modules les enregistrements de bases de données dans des tableaux.
Exemple avec un tableau :
Module 1 : (contient plusieurs tableaux)
Public semaine As Integer
Function lecture_exemple()
derligne= Sheets("data").Range("I65000").End(xlUp).Row
Dim tab_exemple()
ReDim tab_exemple(derligne_equipes, 7)
For i = 3 To derligne_equipes
(....)
semaine = Sheets("data").Range("K" & i)
(....)
tab_exemple(i, ...)
tab_exemple(i, 2) = [b]semaine[/b]
tab_exemple(i, ...)
Next
End FunctionDans le module 2 je viens lire les tableaux pour colorer des cellules en fonction du numéro de la semaine est des conditions remplies (ou non). Sauf que la variable semaine est bloquée sur la dernière valeur du tableau.
une partie du code :
Module 2 :
For i = 1 To nbJours
iDate = DateSerial(Year(Now), numMois(mois), i - 1)
With Cells(2, i + 2)
.Interior.Color = RGB(230, 240, 250)
.Value = Format(iDate + 1, "ddd" & Chr(10) & "d")
End With
For j = 0 To derligne_plan
lecture_exemple
eSemaine = DatePart("ww", DateSerial(Year(Now), numMois(mois), i), vbSunday, vbFirstFullWeek)
If semaine = eSemaine Then
If condi = True Then
Sheets("plan").Cells(3, i + 3).Interior.Color = RGB(100, 110, 255)
End If
If nexth = True Then
Sheets("plan").Cells(4, i + 3).Interior.Color = RGB(255, 110, 180)
End If
End If
Next
NextJ'édite et je joins un modèle simplifié.
Cordialement