/ / La macro s'arrête si la déclaration est fausse - vba, excel-vba, excel

La macro s'arrête si la déclaration est fausse - vba, excel-vba, excel

Le code ci-dessous doit imprimer des pages spécifiques si la valeur d'une cellule est 1.

Lorsque la valeur de la cellule en cours de test n'est pas 1, la macro s'arrête.

Que puis-je changer pour que la macro continue jusqu'à la fin?

Sub PrintSalesDocs()

"
" PrintSalesDocs Macro
"

Sheets("Print Menu").Select

Range("C15").Select
Selection.ClearContents
ActiveCell.FormulaR1C1 = "Sales Doc"
Range("B5").Select

If Range("d19").Value = 1 Then
Sheets("trailers").PrintOut Copies:=1

If Range("d20").Value = 1 Then
Sheets("Pricing").PrintOut Copies:=1

If Range("d21").Value = 1 Then
Sheets("Q-Hours").PrintOut Copies:=1

If Range("d22").Value = 1 Then
Sheets("trailer customer info").PrintOut Copies:=1

If Range("d23").Value = 1 Then
Sheets("trailer job card").PrintOut Copies:=1

If Range("d24").Value = 1 Then
Sheets("running gear").PrintOut Copies:=1

If Range("d25").Value = 1 Then
Sheets("finishing").PrintOut Copies:=1

If Range("d26").Value = 1 Then
Sheets("boxes").PrintOut Copies:=1

If Range("d27").Value = 1 Then
Sheets("bottom dpr").PrintOut Copies:=1

If Range("d28").Value = 1 Then
Sheets("c-sider").PrintOut Copies:=1

If Range("d29").Value = 1 Then
Sheets("log trlr").PrintOut Copies:=1

If Range("d30").Value = 1 Then
Sheets("skel-fd").PrintOut Copies:=1

If Range("d31").Value = 1 Then
Sheets("tank trl").PrintOut Copies:=1

If Range("d32").Value = 1 Then
Sheets("stock tr").PrintOut Copies:=1

If Range("d33").Value = 1 Then
Sheets("panel").PrintOut Copies:=1

If Range("d34").Value = 1 Then
Sheets("transporter").PrintOut Copies:=1

If Range("d35").Value = 1 Then
Sheets("tipper-srb").PrintOut Copies:=1

If Range("d36").Value = 1 Then
Sheets("tipper-ars").PrintOut Copies:=1

If Range("d38").Value = 1 Then
Sheets("checksheet steer axle").PrintOut Copies:=1

If Range("d39").Value = 1 Then
Sheets("checksheet kingpin").PrintOut Copies:=1

If Range("d40").Value = 1 Then
Sheets("checksheet 5th wheel").PrintOut Copies:=1

If Range("d41").Value = 1 Then
Sheets("checksheet m911d").PrintOut Copies:=1

If Range("d42").Value = 1 Then
Sheets("checksheet finishing").PrintOut Copies:=1

If Range("d43").Value = 1 Then
Sheets("checksheet brakes").PrintOut Copies:=1

If Range("d44").Value = 1 Then
Sheets("checksheet pre-delivery").PrintOut Copies:=1

If Range("d45").Value = 1 Then
Sheets("checksheet quality").PrintOut Copies:=1

If Range("d46").Value = 1 Then
Sheets("checksheet pre-dispatch").PrintOut Copies:=1

If Range("d47").Value = 1 Then
Sheets("checksheet dispatch").PrintOut Copies:=1

End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If

End Sub

Réponses:

2 pour la réponse № 1

Essayez cette façon à la place.

Sub PrintSalesDocs()

"
" PrintSalesDocs Macro
"

Sheets("Print Menu").Select

Range("C15").Select
Selection.ClearContents
ActiveCell.FormulaR1C1 = "Sales Doc"
Range("B5").Select

If Range("d19").Value = 1 Then
Sheets("trailers").PrintOut Copies:=1
End If

If Range("d20").Value = 1 Then
Sheets("Pricing").PrintOut Copies:=1
End If
...

If Range("d46").Value = 1 Then
Sheets("checksheet pre-dispatch").PrintOut Copies:=1
End If

If Range("d47").Value = 1 Then
Sheets("checksheet dispatch").PrintOut Copies:=1
End If

End Sub

0 pour la réponse № 2

J'apprécie le code beaucoup plus lisible de niton, et je vois dans votre question une occasion précieuse de discuter du refactoring.

" Part 1: making a configuration
Dim table As Collection
Set table = New Collection

Dim row
row = Array("d19", "trailers")
table.Add row
row = Array("d20", "Pricing")
table.Add row
row = Array("d21", "Q-Hours")
table.Add row

...

row = Array("d46", "checksheet pre-dispatch")
table.Add row
row = Array("d47", "checksheet dispatch")
table.Add row

" Part 2: doing the work according to the configuration
For Each row In table
If Range(row(0)) = 1 Then
Sheets(row(1)).PrintOut Copies:=1
End If
Next

Ce code présente les avantages suivants:

  1. De cette façon, le seul code que vous devez donner quelques réflexions sont les 5 dernières lignes. Le reste est une configuration simple qui fait fonctionner les dernières lignes.
  2. Par exemple, avec une étape suivante du scénario, la configuration entière pourrait être lue, par exemple. à partir d'un fichier XML avec presque aucun effort. Les cinq dernières lignes ne changeraient guère pour cette raison.

J'ai grossièrement vérifié le code dans Excel, il ne devrait donc pas y avoir de problème.

J'espère que cela vous inspire :-)