XL 2016 Explication VBA

GV91

XLDnaute Junior
Bonjour,

Est-ce que quelqu'un pourrait m'expliquer ce codage VBA ? Que je puisse le modifier.

D'avance merci



Sub Complement(x As Single, y As Single)
Dim derlig As Integer, i As Integer, j As Integer
Dim nbreste As Integer, S As String

S = ""
With Sheets(Data0)
derlig = .Range("A" & Rows.Count).End(xlUp).Row
For i = 3 To derlig
If .Cells(i, "E").Value <= y Then
If .Cells(i, "C").Value <= x Then
nbreste = Int(x / .Cells(i, "C").Value)
S = S & "ou " & nbreste & " palette(s) de " & .Cells(i, "C").Value & " x " & .Cells(i, "E").Value & vbCrLf
End If
End If
Next i
End With
If S = "" Then S = "Camion Plein" Else S = "Complément possible : " & vbCrLf & vbCrLf & S
MsgBox S, , "Complément"
End Sub
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonsoir GV, bonsoir le forum,

Le code full comment :

VB:
Sub Complement(x As Single, y As Single) 'la procédure utilise deux arguments x et y de type single
Dim derlig As Integer, i As Integer, j As Integer 'déclare les variables derlig, i et j de type entier
Dim nbreste As Integer, S As String 'déclare la variable nbreste comme entier et S comme texte
S = "" 'initialise la variable S (cette ligne n'est pas nécessaire car S par défaut est vide)
With Sheets(Data0) 'prend en compte l'onglet Data0 <==== ici il y a peut-être un problème voir explication plus bas
    derlig = .Range("A" & Rows.Count).End(xlUp).Row 'définit la dernière ligne éditée derlig de la colonne A de l'onglet Data0
    For i = 3 To derlig 'boucle sur toutes les lignes i de 3 à derlign
        'condition 1 : si la cellule ligne i, colonne E est inférieure ou égale à y (argument de la procédure)
        If .Cells(i, "E").Value <= y Then
            If .Cells(i, "C").Value <= x Then 'condition 2 : si la cellule ligne i, colonne C est inférieure ou égale à x (argument de la procédure)
                'définit le nbreste (reste, convertis en entier, de la division de x par la valeur de la cellule ligne i colonne C)
                nbreste = Int(x / .Cells(i, "C").Value)
                'définit le texte S en utilsant S, le nbreste et la valeur des cellules ligne i, colonnes C et E
                'une ligne est rajoutée (vbcrLf = saut de ligne) chaque fois que dans la boucle les deux conditions sont vérifiées
                S = S & "ou " & nbreste & " palette(s) de " & .Cells(i, "C").Value & " x " & .Cells(i, "E").Value & vbCrLf
            End If 'fin de la condition 2
        End If 'fin de la condition 1
    Next i 'prochaine ligne de la boucle
End With 'fin de la prise en compte de l'onglet Data0
'si le Texte S n'est pas vide S devient "Camion plein" sinon S devient "Complément impossible" plus deux retours de chariot plus S (le texte de la boucle)
If S = "" Then S = "Camion Plein" Else S = "Complément possible : " & vbCrLf & vbCrLf & S
MsgBox S, , "Complément" 'affiche le texte S dans un message
End Sub

'explication : Tel qu'écrit, cela implique que Data0 est une variable mais on ne la voit déclarée nulle part.
'Soit elle est déclarée ailleurs dans une partie du code que tu n'as pas fourni, soit, si c'est un onglet existant il faut écrire Sheets("Data0")...
 

GV91

XLDnaute Junior
Bonjour Robert,le forum

Il y a une partie du code que je n'avais pas mis précédemment, cela change-t-il quelque chose ?



Sub carton()
Dim derlig As Integer, i As Integer
Dim Cont_long As Single, Cont_larg As Single
Dim Max_long As Single, Max_larg As Single
Dim Rest_long As Single, Rest_larg As Single
Dim Carton_long As Single, Carton_larg As Single, Carton_haut As Single
Dim Carton_top As Single
Dim colonne As Integer

Cont_long = 0
Cont_larg = 0
Max_larg = 0
colonne = 1
Rest_long = Camion_Long
Rest_larg = Camion_Larg
Carton_top = top0
With Sheets(Data)
derlig = .Range("A" & Rows.Count).End(xlUp).Row
dessin_container
For i = 2 To derlig
Carton_long = .Cells(i, "B").Value
Carton_larg = .Cells(i, "C").Value
Carton_haut = .Cells(i, "D").Value

If Rest_long <= Carton_long Then
Rest_long = Camion_Long
Rest_larg = Rest_larg - Max_larg

If Rest_larg >= Carton_larg Then
Cont_long = -Max_larg * 3 / 4
Cont_larg = Cont_larg + Max_larg
Carton_top = Carton_top + Max_larg / Echelle / 2
colonne = colonne + 1
Max_larg = 0
Else
MsgBox "CHARGEMENT EN SURCHARGE" & vbCrLf & vbCrLf & "Seulement " & i - 2 & " palettes placées", , "SURCHARGE"
Exit Sub
End If
End If

Call dessin_carton(Cont_long / Echelle, Carton_top, Carton_long / Echelle, Carton_larg / Echelle, _
Carton_haut / Echelle, .Cells(i, "A").Value, "Palette" & i - 1)

If Max_larg < Carton_larg Then Max_larg = Carton_larg
Cont_long = Cont_long + Carton_long
Rest_long = Rest_long - Carton_long
Next i
dessin_container_face
End With
Call Complement(Rest_long, Rest_larg)
End Sub
 

Statistiques des forums

Discussions
312 081
Messages
2 085 161
Membres
102 800
dernier inscrit
NOTZ