Re : Correction d'une Macro : saut de lignes intenpestif
fredO0 je viens par erreur de refaire un nouveau fil de discussion car je ne trouvais pas mes messages.le fichier que je met et le résultat de la fonction.
la macro se lance d'un bouton depuis une feuille et prends les données dans le sommaire 2.1 et édite le bon de commande.
voici la Macro complète:
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