Aide à la lecture code VBA
Bonsoir tout le monde,
Un code fourni par un gentil Québécois me pause un problème de lecture, je ne suis pas trés rodé à l'exercice même si je m'entraine...!
le code auquel j'ai ajouté des commentaires:
Sub tirage()
Dim v%, i% 'Déclaration de variables (As Integer)
Dim f%, h%, col%, n% 'Déclaration de variables (As Integer)
Dim sh1, sh2 'Déclaration de variables
Application.ScreenUpdating = False 'Désactive l'actualisation de l'écran pour accélérer l'exécution
Set sh1 = Sheets("Feuil3") 'Attribue une référence d'objet à la variable "sh1"
Set sh2 = Sheets("Feuil4") 'Attribue une référence d'objet à la variable "sh2"
tri '???????????????????????
h = sh1.Cells(2, 10) 'Attribue une référence d'objet à la variable "h"
f = sh1.Cells(3, 10) 'Attribue une référence d'objet à la variable "f
col = 2 'Attribue une valeur à la variable "col" (pourquoi = 2.....?)
i = 1 'Attribue une valeur à la variable "i" --------------------
n = 1 'Attribue une valeur à la variable "n"
'homme
Do Until i = h 'Boucle........ (là, je n'y arrive plus!)
v = Int((h) * Rnd() + 1)
sh2.Cells(n + 1, col) = "H" & v
i = i + 1
n = n + 1
If n = sh1.Cells(2, 8) Then col = 3: n = 1
Loop
i = 1 ' Réinitialise la variable "i"
'femme
Do Until i = f
v = Int((f) * Rnd() + 1)
sh2.Cells(i + 1, 4) = "F" & v
i = i + 1
Loop
sh2.Activate ' Active la "Feuil2"
Application.ScreenUpdating = True ' Résactive l'actualisation de l'écran
End Sub
Sub tri()
Sheets("Feuil3").Activate 'Active la "Feuil3"
Range("A2:F54").Select 'Sélectionne la plage de cellules ("A2:F54") Là je plane encore plus.....!
ActiveWorkbook.Worksheets("Feuil3").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Feuil3").Sort.SortFields.Add Key:=Range("C2:C54") _
, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Feuil3").Sort
.SetRange Range("A2:F54")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
Pouvez vous m'aider à y voir plus clair ?
D'autre part, j'ai un bug sur la ligne en vert que je n'arrive pas à résoudre...!
Pouvez-vous m'aider ?
Merci de votre altruisme
Fichier joint
Bonjour,
pour le bug "c'est simple" :
la variable n est définie en "integer" c'est à dire une variable qui peut contenir une valeur entière allant de - 32766 à + 32766 (valeurs de mémoire) donc forcément quant le code lui attribue une valeur allant au delà cela BUG...
Il faut pour contourner ceci "formater" les variables qui servent pour définir un numéro de ligne de feuille Excel, les dimensionner en "Long", ceci corrigera alors votre BUG
DIM n As Long
Désolé "Long" en abrégé je ne connaît pas....
@ bientôt
LouReeD
Bonsoir,
à vous de lire mes commentaires, en sachant ceci :
je n'ai pas analyser le fonctionnement du code, je n'explique que les lignes de code.
Option Explicit
Sub tirage() ' nom de la procédure
Dim v%, i% 'Déclaration de variables (As Integer)
Dim f%, h%, col% 'Déclaration de variables (As Integer)
Dim n As Long ' définition de la variable en long
Dim sh1, sh2 'Déclaration de variables
Application.ScreenUpdating = False 'Désactive l'actualisation de l'écran pour accélérer l'exécution
Set sh1 = Sheets("Feuil3") 'Attribue une référence d'objet à la variable "sh1"
Set sh2 = Sheets("Feuil4") 'Attribue une référence d'objet à la variable "sh2"
'tri ' on lance la procédure qui porte le nom tri
' plus propre :
Call tri
h = sh1.Cells(2, 10) 'NON h = la valeur de la cellule en ligne 2 et colonne 10 de la feuille sh1
' et sh1 = Sheets("Feuil3") vu le "SET" de ci dessus !
f = sh1.Cells(3, 10) 'même erreur !!!! Attribue une référence d'objet à la variable "f"
col = 2 'Attribue une valeur à la variable "col" (pourquoi = 2 ?) sans voir le programme ce doit être le numéro de colonne où s'inscrit le résultat
i = 1 'Attribue une valeur à la variable "i" --------------------
n = 1 'Attribue une valeur à la variable "n"
'homme
Do Until i = h 'Boucle effectuée jusqu'à ce que i = h tant que i n'est pas égal à h la boucle tourne
v = Int((h) * Rnd() + 1) ' v est égale à l'entier inférieur de (h * par un chiffre compris entre 0 et 0.9 +1)
sh2.Cells(n + 1, col) = "H" & v ' feuil4.cellule( ligne(n+1) , colonne( col = 2)) = le texte H avec le chiffre calculé ci dessus => si v=3 alors la valeur de la cellule = H3
i = i + 1 ' on incrémente i
n = n + 1 ' on incrémente n
If n = sh1.Cells(2, 8) Then col = 3: n = 1 ' si n = la valeur de la cellule( ligne(2) , colonne(8)) de la feuille 3 alors la colonne passe à 3 et n=1
Loop ' on boucle
i = 1 ' Réinitialise la variable "i"
'femme
Do Until i = f ' plus ou moins pareil pour les femmes
v = Int((f) * Rnd() + 1)
sh2.Cells(i + 1, 4) = "F" & v
i = i + 1
Loop
sh2.Activate ' Active la "Feuil2"
Application.ScreenUpdating = True ' Résactive l'actualisation de l'écran
End Sub
Sub tri() ' permet de faire un tri des données sur cette feuille
Sheets("Feuil3").Activate 'Active la "Feuil3"
Range("A2:F54").Select 'Sélectionne la plage de cellules ("A2:F54")
ActiveWorkbook.Worksheets("Feuil3").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Feuil3").Sort.SortFields.Add Key:=Range("C2:C54") _
, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal ' le tri se fait du plus grand vers le plus petit "descendant"
With ActiveWorkbook.Worksheets("Feuil3").Sort
.SetRange Range("A2:F54")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub@ bientôt
LouReeD
Bonjour LooReeD,
C'est avec beaucoup de retard que je te remercie et te demande pardon de ne pas l'avoir fait plus tôt...
Mais je crois que je devient VBAddict, je plonge dans mon code en essayant de comprendre et fini par en oublier les règles de politesse...
Merci encore pour ton aide.
A+ sur de nouveaux post j'espère.
Bonjour,
merci de votre merci !
Et pour les autres posts, j'ai vu, il y a encore des demandes de "traduction"
Ceci dit, de mon coté, j'ai de moins en moins de temps à consacrer au site...
@ bientôt
LouReeD
Merci LooReeD,
Ton aide m,a été trés préciéuse, bonne continuation pour tes autres activités, au plaisir de te retrouver bientôt.