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.

Rechercher des sujets similaires à "aide lecture code vba"