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 Sub

Edit : 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é.

@+

Rechercher des sujets similaires à "impression lorsque certaines contiennent donnee"