Sub ImprimerFacturesClients()
Dim listeClients As Variant
Dim Nom As Variant
Dim printNoms As String
'
' Récupérer les valeurs de la liste des clients
listeClients = Sheets("Détails").Range("T_Clients[Client]").Value
With Sheets("Facture")
'
' Parcourir tous les noms de la liste
For Each Nom In listeClients
'
' Préparer la facture
.Range("Client.Choisi") = Nom
'
' Laissez excel calculer la nouvelle facture
Do While Application.CalculationState <> xlDone: Loop
'
' Si le client à un total > à 0 on imprime
If .Range("Facture.Total.Général") > 0 Then
'
' Définif la plage d'impression
.PageSetup.PrintArea = .Range(.Cells(2, 2), .Range("Facture.Total.Général")).Address
'
' Exporter la feuille au format pdf
.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ThisWorkbook.Path & "\" & Nom & ".pdf", _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False
printNoms = printNoms & Nom & ";"
End If
Next Nom
End With
'
' Si la variable PrintNoms contient quelque chose, c'est qu'il y a eu des clients à imprimer
If printNoms <> "" Then
'
' Enlever le ';' en fin de variable
printNoms = Left(printNoms, Len(printNoms) - 1)
'
' Avertir l'utilisateur du nombre d'impression
MsgBox UBound(Split(printNoms, ";")) + 1 & " facture(s) client(s) imprimés(s): " & vbLf & _
Replace(printNoms, ";", vbLf), vbInformation, "Impression facture"
Else
'
' Aucune facture à imprimer
MsgBox "Aucune facture à imprimer", vbExclamation, "Impression facture"
End If
End Sub