explication d'un code

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

jacky49

XLDnaute Impliqué
Bonsoir le forum,

Je voudrais qu'on m'explique ce code SVP:
Code:
Public Sub RESULT1_F(ByRef ws As Worksheet, ByVal num As Byte)
Dim sht As Worksheet, shtf As Worksheet
Dim LL As Integer, i As Integer, FinPrem As Integer
Dim LigF As Byte, ColF As Byte
Dim tour As Boolean

Application.ScreenUpdating = False
NbPoules = num
On Error Resume Next
Application.DisplayAlerts = False
Sheets("Temp").Delete
Application.DisplayAlerts = False

Set sht = Worksheets.Add
sht.Name = "Temp"

UsfDF2.Show

With ws
    For i = 1 To num
        .Range(.Cells(6, 5 * i - 4), .Cells(5 + Opt, 5 * i - 1)).Copy sht.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
    Next i
        For i = 1 To num
        LL = .Cells(5, 5 * i - 4).End(xlDown).Row
        .Range(.Cells(6 + Opt, 5 * i - 4), .Cells(LL, 5 * i - 1)).Copy sht.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
    Next i
End With

With sht
        FinPrem = .Cells(Rows.Count, 1).End(xlUp).Row
        .Range("A" & Opt * num + 2 & ":D" & FinPrem).Sort Key1:=.Range("D" & Opt * num + 2), Order1:=xlAscending, Header:=xlNo
End With

LigF = 6: ColF = 1
tour = True

Set shtf = Sheets("Finales")
With shtf
    .Range("A6:D12").Clear 'Contents
    For i = 2 To NbF + 1
        sht.Range("A" & i & ":D" & i).Copy .Cells(LigF, ColF)
        tour = Not tour
        If tour Then
            LigF = LigF + 1
        Else
            ColF = IIf(ColF = 6, 1, 6)
        End If
    Next i
End With

Application.DisplayAlerts = False
sht.Delete
Application.DisplayAlerts = False
shtf.Activate
Set sht = Nothing
Set shtf = Nothing
End Sub

Car, il me met un resultat dans une feuille finales mais sur 2 colonnes et moi j'aimerais mettre ce résultats sur une seule colonne.
merci d'avance
jacky
 
Re : explication d'un code

Bonsoir Jacky, bonsoir le forum,

Voici le code commenté, je pense que le problème vient de la ligne tour = Not tour... Normalement cela alterne la valeur de la variable tour mais comme la portée de cette variable (sa durée de vie) s'achève à la fin du code elle reprend automatiquement sa valeur par défaut : faux.

Peut-ête faudrait-il déclarer cette variable comme publique en début de module (et supprimer la ligne Dim tour As Boolean) :
Code:
Public tour As Boolean
et dans ce cas elle ne sera plus réinitialisée à la fin de la la fonction. Suis-je clair...???

Code:
Public Sub RESULT1_F(ByRef ws As Worksheet, ByVal num As Byte)
 
'déclare la variable sht comme Onglet, la variable shtf comme Onglet
Dim sht As Worksheet, shtf As Worksheet
'déclare la varialbe LL comme Entier, la variable i comme Entier, la variable FinPrem comme Entier
Dim LL As Integer, i As Integer, FinPrem As Integer
'décalre la variable ligF comme Byte, la variable ColF comme Byte
Dim LigF As Byte, ColF As Byte
'décalre la variable tour comme booléenne (vrai ou faux)
Dim tour As Boolean
 
Application.ScreenUpdating = False 'masque les changements à l'ecran
NbPoules = num 'définit la variable NbPoules (variable non déclarée étrangement) par rapport au second argument de la fonction num
On Error Resume Next 'gestion ds erreurs ( en cas de bug passe à la ligne suivante)
Application.DisplayAlerts = False 'masque les messages d'excel
Sheets("Temp").Delete 'supprime l'onglet "temp" (si cet onglet n'existe pas cela génère un bug... d'où le "On Error Resume Next")
Application.DisplayAlerts = False 'répétition inutile de la ligne au dessus (à mon avis l'auteur voulait dire "= true")
Set sht = Worksheets.Add 'définit la variable sht (nouvel onglet)
sht.Name = "Temp" 'nomme le nouvel onglet "Temp"
UsfDF2.Show 'ouvre l'UserForm "UsfDF2" (certainement des données à renseigner)
 
With ws 'prend en compte l'onglet ws (premier argument de la fonction)
    For i = 1 To num 'boucle de 1 à num
    'copie une plage déterminée par les variables i et Opt (non déclarée ni définit ici) et la colle dans l'onglet "Temp"
        .Range(.Cells(6, 5 * i - 4), .Cells(5 + Opt, 5 * i - 1)).Copy sht.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
    Next i 'prochain élément de la boucle
    For i = 1 To num 'répétition de la même boucle (les deux lignes en dessous aurait pu être écrite dans la boucle au dessus...)
        LL = .Cells(5, 5 * i - 4).End(xlDown).Row 'définit la variable LL
        'copie une plage déterminée par les variables i et Opt (non déclarée ni définit ici) et la colle dans l'onglet "Temp"
        .Range(.Cells(6 + Opt, 5 * i - 4), .Cells(LL, 5 * i - 1)).Copy sht.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
    Next i 'prochain élément de la boucle
End With 'fin de la prise en compte l'onglet ws
 
With sht 'prend en compte l'onglet "Temp"
        FinPrem = .Cells(Rows.Count, 1).End(xlUp).Row 'définit  la variable FimPrem
        'tri ascendant des colonne À à D par rapport à la colonne D
        .Range("A" & Opt * num + 2 & ":D" & FinPrem).Sort Key1:=.Range("D" & Opt * num + 2), Order1:=xlAscending, Header:=xlNo
End With 'fin de la prese en compte de l'onglet "Temp"
LigF = 6: ColF = 1 'définit la variable LigF et la variable ColF (Ligne 6 et colonne A)
tour = True 'définit la variable tour (vrai)
Set shtf = Sheets("Finales") 'définit l'onglet shtf
With shtf 'prend en compte l'onglet "Finales"
    .Range("A6:D12").Clear 'Contents 'Efface "tout" de la plage A6:D12
    For i = 2 To NbF + 1 'boucle de 2 à NbF (variable ni décalrée ni définit ici ???)
        'copie de l'onglet "Temp" une plage des colonnes A à D et la colle dans A6 de l'onglet "Finales"
        sht.Range("A" & i & ":D" & i).Copy .Cells(LigF, ColF)
 
        '***************************************************
        'à mon avis ton problème se trouve dans cette partie
        tour = Not tour 'redéfinit la variable tour (faux)
        If tour Then 'condition : si tour est vrai (je vois mal comment vu la ligne au dessus ???)
            LigF = LigF + 1 'redéfinit la ligne en l'incrémentant de 1
        Else 'sinon
            ColF = IIf(ColF = 6, 1, 6) 'redéfinit la variable ColF (si la collone ColF était 1 elle devient 6, si elle était 6 elle devient1)
        End If 'fin de la condition
        '***************************************************
 
    Next i 'prochaine ligne i de la boucle
End With 'fin de la prise en compte de l'onglet "Finales"
Application.DisplayAlerts = False 'masque les messages d'excel
sht.Delete 'supprime l'onglet "Temp"
Application.DisplayAlerts = False 'répétition inutile de la ligne au dessus (à mon avis l'auteur voulait dire "= true")
shtf.Activate 'active l'onglet "Finales"
Set sht = Nothing 'vide la variable sht
Set shtf = Nothing 'vide la variable shtf
End Sub
 
Re : explication d'un code

bonjour le forum, Robert,

Le code fonctionne, mais il ne me copy pas les donnée récupéré en feuille DF comme je le souhaite en feuille Finale . IL me les copy automatiquement sur 2 séries(ou poules) alors que je voudrais qu'il me les copy sur une seule série(ou poules).
merci
jacky
 
Re : explication d'un code

bonsoir Jacky, bonsoir le forum,

Oui Jacky, j'avais bien compris ton problème, je n'ai fait que t'expliquer le code et te signaler où se trouvait, à mon avis, ton problème... Mais visiblement ça te convient pas... Ça tombe bien remarque je viens de m'acheter un violon et j'ai une super envie d'uriner...
 
Re : explication d'un code

RE LE FORUM, ROBERT,

Si Robert, et je t'en remercie, j'ai bien compris ce que tu m'as dit, mais lorsque je Public tour As Boolean
il faut que j'enlève Public Sub RESULT1_F(ByRef ws As Worksheet, ByVal num As Byte)
mais il met erreur de compilation
et autrement Variable non defini
merci pour le temps que tu prends
jac
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
10
Affichages
292
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
513
Réponses
7
Affichages
255
  • Question Question
Réponses
7
Affichages
330
Retour