Correction d'une Macro : saut de lignes intenpestif

philipos_353

XLDnaute Nouveau
Bonjour au forum,

Pourriez vous me corriger ma Macro concernant le saut de liqne qui se fait automatiquement sur mon bon de commande modèle en PJ, j'ai bien défini la première ligune et ensuite cela saute automatiquement de plusieurs lignes et inverse même quelques Numéro d'articles.
Merci

' 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
 

Pièces jointes

  • Classeur1.xlsx
    75.3 KB · Affichages: 72
  • Classeur1.xlsx
    75.3 KB · Affichages: 69
  • Classeur1.xlsx
    75.3 KB · Affichages: 74

Fred0o

XLDnaute Barbatruc
Re : Correction d'une Macro : saut de lignes intenpestif

Bonsoir philipos_353,

Peux-tu STP préciser ta demande.

- Dans le fichier que tu joins, il n'y a aucune macro.
- La macro que tu postes est une fonction que tu n'appelles pas dans la feuille de calcul que tu nous a posté.
- Quel est le problème EXACTEMENT ? C'est à dire que fait la macro qui fonctionne mal et que voudrait-tu qu'elle fasse, dans quel(s) cas ?

Le mieux serait une feuille avant traitement, une feuille après traitement anormal et une feuille après traitement tel que tu le souhaites. Ensuite, dis nous comment ta macro se lance. En remarque : Pourquoi est-ce une Function et pas une Sub ?

A+
 

philipos_353

XLDnaute Nouveau
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
 

Fred0o

XLDnaute Barbatruc
Re : Correction d'une Macro : saut de lignes intenpestif

Bonsoir philipos_353,

Modifications apportées : Simplification du code qui nettoie la feuille "Requisition ". On remplace ceci :
VB:
    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

par cela :
VB:
    Sheets("Requisition ").Range("A6:X158").ClearContents

Ensuite, dans ta function Stock, des incohérences sur les nombres utilisés dans les formules (nombres considérant qu'il y a 15 lignes par bon de commande alors qu'en réalité il y en a 20). Donc on remplace ceci :
VB:
                X = 1 + (i - 1) Mod 16
                lbc = 14 + X + 23 * c
                If X = 15 Then c = c + 1

par cela :
VB:
                X = 1 + (i - 1) Mod 20
                lbc = 14 + X + 21 * c
                If X = 20 Then c = c + 1

A+
 
Dernière édition:

Statistiques des forums

Discussions
312 368
Messages
2 087 667
Membres
103 633
dernier inscrit
Surfer