Impression lorsque certaines cellules contiennent une donnée
Salutations à la communauté Excel-Pratique,
Ma demande sera peut-être quelque peu spécial. Désolé si c'est le cas !
Je voudrais imprimer en PDF, seulement lorsque certaines cellules contiennent une donnée (exemple: quantité/chiffre) dans un onglet, ensuite qu'il l'enregistre dans un dossier qui aurait comme nom "\sauvegarde-decoration", qu'il porte le nom d'une certaine cellule (exemple dans A1), et que le PDF ouvre pour que je puisse l'envoyer par courriel.
J'ai trouvé (voir plus bas) pour 2 plages de cellules (imprimante par defaut), mais je voudrais qu'il y en est 4. (exemple: ajoutez AB15, BA15), et bien sûr avec les informations ci-haut mentionnées.
Est-ce possible de faire tout ça dans une macro ?
Merci pour votre aide, si vous pouvez le faire, ça serait très apprécié,
PierreD
Sub test()
If Range("B15") <> "" Then x = 1 Else x = 0
If Range("O15") <> "" Then y = 1 Else y = 0
t = x & y
Select Case t
Case "00": Exit Sub
Case "10": a = 1: b = 1
Case "01": a = 2: b = 2
Case "11": a = 1: b = 2
End Select
ActiveSheet.PrintOut a, b
End SubEdit : code à mettre entre balises avec le bouton </>
Trouvez dans cette page: " https://forum.excel-pratique.com/excel/ne-pas-imprimer-une-feuille-si-la-cellule-x-vide-129426#p7948 "
Bonjour Pierre et
Une petite présentation ICI serait la bienvenue
Sinon, merci de joindre un fichier anonymisé pour une meilleure compréhension
@+
Bonjour BrunoM45,
Comme demandé je me suis présenté et merci de m'accueillir sur Excel-Pratique.
Comme demandé, je joint un fichier.
Alors, je voudrais imprimer en PDF, seulement lorsque certaines cellules contiennent une donnée dans un onglet, ensuite qu'il l'enregistre dans un dossier qui aurait comme nom "\sauvegarde-decoration", qu'il porte le nom de la cellule B5, et que le PDF ouvre pour que je puisse l'envoyer par courriel.
Alors, s'il y a une donnée dans les cellules B15, O15, B15, AO15, d'imprimer les 4 pages. S'il n'a pas donné dans l'une de ces cellules, de ne pas l'inclure dans l'impression. La cellule B15 aura toujours une donnée, mais pas les 3 autres, seulement à certaines occasions.
J'espère que mes explications sont claires.
Merci,
Re,
Si j'ai bien tout compris, voici le fichier avec le code qui devrait aller
@+
Super BrunoM45
Je suis impressionné par votre professionnalisme en VBA. J'Ai beaucoup de chemin à parcourir avant d'être rendu là!
J'aurais juste une p'tite chose.
Est-ce possible que les pages soient dans le même PDF au lieu d'avoir 2, 3 ou 4 pages ?
D'ailleurs, ils auront toutes le même numéro de commande et même nom du fichier. Alors, c'est préférable qu'elles soient dans le même fichier, si c'est possible!
Merci pour votre excellent travail.
Cordialement,
PierreD
Re,
Je m'en doutais un peu, il faut alors remplacer le code par
Sub Imprimer_PDF()
Dim objShell As Object
Dim objFolder As Object, objFolderItem As Object
Dim Chemin As String, TabCel() As String, RngPge() As String
Dim RngImp As Range
Dim Ind As Integer
' Définir les pages
RngPge = Split("A1:L37,N1:Y37,AA1:AL37,AN1:AY37", ",")
' Récupération du chemin Mes Documents
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(&H5)
Set objFolderItem = objFolder.Self
' Définir le chemin
Chemin = objFolderItem.Path & "\sauvegarde-decoration\"
' Effacer les variables objet
Set objFolderItem = Nothing: Set objFolder = Nothing: Set objShell = Nothing
' Définir le tableau des cellules
TabCel = Split("B15,O15,AB15,AO15", ",")
' Définir la première plage à imprimer
Set RngImp = Range(RngPge(0))
' Avec la feuille
With Sheets("decoration")
' Pour chaque cellule
For Ind = 0 To 3
' Si la cellule contient une valeur
If .Range(TabCel(Ind)).Value <> "" Then
' On définit la nouvelle plage à imprimer en les joignant ensemble
Set RngImp = Application.Union(RngImp, Range(RngPge(Ind)))
End If
Next Ind
' Exporter la page en PDF dans le chemin indiqué
RngImp.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Chemin & "BdC " & .Range("A5").Value & " Page " & 1 + Ind, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
End With
' Effacer la variablesobjet
Set RngImp = Nothing
End Sub@+
Un gros merci BrunoM45. Très très apprécié ;-). C'est beaucoup de codage.
J'aurais juste un dernier point.
Pour l'enregistrer dans le sous-dossier "sauvegarde-decoration" qui se trouve dans le même dossier que "petebowling-bdcdecoration2.xlsm" , faut-il que j'ajoute l'emplacement (chemin) à quelque part ?
J'ai créé le sous-dossier, mais présentement il s'enregistre sur le bureau.
Merci encore
@+
Salut Pierre,
Désolé, j'ai lassé ma ligne pour test, il faut supprimer la ligne
Chemin = ThisWorkbook.Path@+
Bonjour BrunoM45,
À mon tour d'être désolé de te déranger une autre fois.
J'ai supprimé la ligne comme décrit, malheureusement j'obtiens "Erreur d'exécution 1004". (Même je me demande comment cette ligne est apparue, car elle n'est pas dans ton code lors de la modification)
Ça bloque à la ligne:
' Exporter la page en PDF dans le chemin indiqué
RngImp.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Chemin & "BdC " & .Range("A5").Value & " Page " & 1 + Ind, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
Cordialement et Merci !
Re,
Il faut que le dossier "Mes Documents" contienne un sous dossier "sauvegarde-decoration", sinon erreur 1004
@+
Bonjour BrunoM45,
C'est ce que j'ai fait, mais malheureusement le fichier ne va pas dans le sous-dossier, mais plutôt dans "Mes Documents".
Alors, dans cette ligne "RngImp.ExportAsFixedFormat Type:=xlTypePDF, Filename:=chemin ..... ", à Filename:=chemin ...., j'ai supprimé "chemin" et j'ai mis ceci: "C:\Users\XXXX\Documents\DOSSIER\SOUS-DOSSIER\" , et ça fonctionne.
Alors, je vais indiqué comme "Résolu".
Je tient à vous remercier sincèrement pour votre travail, qui me sera d'une très grande utilité.
@+