philipos_353
XLDnaute Nouveau
Bonjour le Forum,
Pourriez vous corriger ma macro afin d'eviter le mélange des numéros de lignes et éviter les sauts de lignes sur le bon de commane en PJ.
Merci à tous
philippe
Private Sub CommandButton8_Click()
' Initialisation des variables
Dim Listes ' Tableau contenant le nom des feuilles de stock traitées
Listes = Array( _
"SOMMAIRE 2.1" _
)
n = 1 ' Nombre de stocks à traiter
i = 1 ' Nombre de lignes traitées
c = 0 ' Offset (est incrémenté de 1 pour passer à un nouveau bon de commande)
' "Virginiser" les bons de commande, au cas où ils seraient déjà renseignés...
With Sheets("Requisition ")
For z = 1 To 20 ' Vingt bons de commande disponibles
k = (z - 1) * 8 + 6
s = "A" + Trim(Str(k)) + ":X" + Trim(Str(k + 2))
.Range(s).ClearContents
Next
End With
' Traitement des stocks
For a = 0 To (n - 1)
Liste = Listes(a)
k = Stock(i, c, Liste)
c = Int(k / 1000)
i = k - c * 1000
Next
' Affichage des bons de commande !
Sheets("Requisition ").Select
If (c > 0) Then
t$ = " bons de commande ont été renseignés !"
Else
t$ = " bon de commande a été renseigné !"
End If
rc$ = Chr(10) + Chr(13)
MsgBox Str(c + 1) + t$, vbOKOnly, "Edition de bon(s) de commande"
MsgBox "Pensez à enregistrer la commande globale (copier/coller dans un nouveau classeur)" + rc$ + rc$ + "sous le nom type COMMANDE_JJMMAAAA !", vbOKOnly, "Edition de bon(s) de commande"
End Sub
' Traitement d'un stock
Private Function Stock(i, c, t)
With Sheets(t)
l = 5 ' 1ère ligne vérifiée dans le sommaire
While (.Cells(l, 2) > "")
a$ = .Cells(l, 2)
e$ = .Cells(l, 5)
b$ = .Cells(l, 3)
d$ = .Cells(l, 4)
f$ = .Cells(l, 6)
s$ = .Cells(l, 7)
qnom = .Cells(l, 8)
un$ = .Cells(l, 9)
qext = .Cells(l, 10)
' Si quantité existante < quantité nominale
' alors insérer dans le bon de commande la qté manquante
If (qext < qnom) Then
With Sheets("Requisition ")
X = 1 + (i - 1) Mod 16
lbc = 14 + X + 23 * c
If X = 15 Then c = c + 1
.Cells(lbc, 1) = a$
.Cells(lbc, 2) = s$
.Cells(lbc, 4) = d$
.Cells(lbc, 5) = e$
.Cells(lbc, 3) = f$
.Cells(lbc, 5) = qext
.Cells(lbc, 6) = qnom - qext
End With
i = i + 1
End If
l = l + 1
Wend
End With
Stock = i + c * 1000
End Function
Pourriez vous corriger ma macro afin d'eviter le mélange des numéros de lignes et éviter les sauts de lignes sur le bon de commane en PJ.
Merci à tous
philippe
Private Sub CommandButton8_Click()
' Initialisation des variables
Dim Listes ' Tableau contenant le nom des feuilles de stock traitées
Listes = Array( _
"SOMMAIRE 2.1" _
)
n = 1 ' Nombre de stocks à traiter
i = 1 ' Nombre de lignes traitées
c = 0 ' Offset (est incrémenté de 1 pour passer à un nouveau bon de commande)
' "Virginiser" les bons de commande, au cas où ils seraient déjà renseignés...
With Sheets("Requisition ")
For z = 1 To 20 ' Vingt bons de commande disponibles
k = (z - 1) * 8 + 6
s = "A" + Trim(Str(k)) + ":X" + Trim(Str(k + 2))
.Range(s).ClearContents
Next
End With
' Traitement des stocks
For a = 0 To (n - 1)
Liste = Listes(a)
k = Stock(i, c, Liste)
c = Int(k / 1000)
i = k - c * 1000
Next
' Affichage des bons de commande !
Sheets("Requisition ").Select
If (c > 0) Then
t$ = " bons de commande ont été renseignés !"
Else
t$ = " bon de commande a été renseigné !"
End If
rc$ = Chr(10) + Chr(13)
MsgBox Str(c + 1) + t$, vbOKOnly, "Edition de bon(s) de commande"
MsgBox "Pensez à enregistrer la commande globale (copier/coller dans un nouveau classeur)" + rc$ + rc$ + "sous le nom type COMMANDE_JJMMAAAA !", vbOKOnly, "Edition de bon(s) de commande"
End Sub
' Traitement d'un stock
Private Function Stock(i, c, t)
With Sheets(t)
l = 5 ' 1ère ligne vérifiée dans le sommaire
While (.Cells(l, 2) > "")
a$ = .Cells(l, 2)
e$ = .Cells(l, 5)
b$ = .Cells(l, 3)
d$ = .Cells(l, 4)
f$ = .Cells(l, 6)
s$ = .Cells(l, 7)
qnom = .Cells(l, 8)
un$ = .Cells(l, 9)
qext = .Cells(l, 10)
' Si quantité existante < quantité nominale
' alors insérer dans le bon de commande la qté manquante
If (qext < qnom) Then
With Sheets("Requisition ")
X = 1 + (i - 1) Mod 16
lbc = 14 + X + 23 * c
If X = 15 Then c = c + 1
.Cells(lbc, 1) = a$
.Cells(lbc, 2) = s$
.Cells(lbc, 4) = d$
.Cells(lbc, 5) = e$
.Cells(lbc, 3) = f$
.Cells(lbc, 5) = qext
.Cells(lbc, 6) = qnom - qext
End With
i = i + 1
End If
l = l + 1
Wend
End With
Stock = i + c * 1000
End Function