Impression imprimante ou pdf

Bonjour

J'aurais besoin d'aide svp. J'ai fait une macro pour imprimer les banques de ceux qu'ils sont supérieur à 0 et tout fonctionne, mais ou je bloque c'est que j'en ai qui doivent être imprimer papier et d'autres enregistrer en pdf. Pour l'instant, je fait l'impression à l'écran et manuellement je l'envois à l'imprimante ou en pdf selon le oui ou le non inscrit dans l'entête. Je me demandais si cela serait possible de le faire automatiquement avec VBA ? Si c'est possible : si AT3 est indiqué oui il faut enregistrer en pdf et celui-ci pourrait être nommé par ce qui est inscrit à AT1 et si AT3 est indiqué non il faut imprimer papier.

Je joins mon fichier mais voici ma macro:

Sub banquehres()
   Dim Col, Lgn, i%, ii%, f%, m%
    For i = 1 To Worksheets.Count
        If Worksheets(i).Name = "Début" Then Exit For
    Next i
    If i > Worksheets.Count Then
        MsgBox "Pas de feuille Début !", vbCritical, "Erreur"
        Exit Sub
    End If
    For ii = i + 1 To Worksheets.Count
        If Worksheets(ii).Name = "Fin" Then Exit For
    Next ii
    If ii > Worksheets.Count Then
        MsgBox "Pas de feuille Fin !", vbCritical, "Erreur"
        Exit Sub
    End If
    i = i + 1: ii = ii - 1
    Lgn = Array(0, 10, 0)
    m = Worksheets("Début").Range("B12"): m = Lgn(m)
    For f = i To ii
        With Worksheets(f)
            If .Range("az11") <> 0 Then
                .Unprotect
                If m > 0 And CInt(Worksheets(f).Name) <= 299 Then
                    .Rows(m & ":66").Hidden = True
                End If

                .PrintPreview
                .Columns.Hidden = False: .Rows.Hidden = False
                .Protect
            End If
        End With
    Next f
End Sub

Merci beaucoup de m'aider

Chantal

Bonjour Chantal,

vois si ça te convient:

Sub banquehres()
    Dim Col, Lgn, i%, ii%, f%, m%, Chemin$, Fichier$

    Chemin = ThisWorkbook.Path & "\" ' A' adapter

    For i = 1 To Worksheets.Count
        If Worksheets(i).Name = "Début" Then Exit For
    Next i
    If i > Worksheets.Count Then
        MsgBox "Pas de feuille Début !", vbCritical, "Erreur"
        Exit Sub
    End If
    For ii = i + 1 To Worksheets.Count
        If Worksheets(ii).Name = "Fin" Then Exit For
    Next ii
    If ii > Worksheets.Count Then
        MsgBox "Pas de feuille Fin !", vbCritical, "Erreur"
        Exit Sub
    End If
    i = i + 1: ii = ii - 1
    Lgn = Array(0, 10, 0)
    m = Worksheets("Début").Range("B12"): m = Lgn(m)
    Application.ScreenUpdating = False

    For f = i To ii
        With Worksheets(f)

            If .Range("az11") <> 0 Then
                .Unprotect
                If m > 0 And CInt(Worksheets(f).Name) <= 299 Then
                    .Rows(m & ":66").Hidden = True
                End If

                If Range("AT3") = "oui" Then

                    Fichier = Range("AT2").Value & ".PDF"

                    .Range(ActiveSheet.PageSetup.PrintArea).ExportAsFixedFormat _
                                                                                Type:=xlTypePDF, _
                                                                                Filename:=Fichier, _
                                                                                Quality:=xlQualityStandard, _
                                                                                IncludeDocProperties:=True, _
                                                                                IgnorePrintAreas:=False, _
                                                                                OpenAfterPublish:=False

                Else
                    .PrintOut

                End If
                .Columns.Hidden = False: .Rows.Hidden = False

                .Protect
            End If
        End With
    Next f
    Application.ScreenUpdating = True

End Sub

Bonjour

J'ai essayé et le pdf ne se fait pas, tout va à l'imprimante. J'ai fait un copier coller de ce que tu m'avais fourni, est-ce que je devais faire autre chose ?

Merci

Chantal

Bonjour Chantal,

dans le code change la ligne

Fichier = Range("AT2").Value & ".PDF"

par la ligne

Fichier = Chemin & Range("AT2").Value & ".PDF"

Bonjour

Cela ne change rien, tout va à l'imprimante

Merci

Chantal

Bonsoir Chantal, Sequoyah, le forum,

A tout hasard....il ne manquerait pas un . à

  If Range("AT3") = "oui" Then

et

Fichier = Range("AT2").Value & ".PDF"

?

 If .Range("AT3") = "oui" Then
            Fichier =Chemin & .Range("AT2").Value & ".PDF"

Bonne soirée,

Bonjour

Si j'ajoute le point comme tu disais, cela ne fonctionne plus à partir de ceci :

.Range(ActiveSheet.PageSetup.PrintArea).ExportAsFixedFormat _

Type:=xlTypePDF, _

Filename:=Fichier, _

Quality:=xlQualityStandard, _

IncludeDocProperties:=True, _

IgnorePrintAreas:=False, _

OpenAfterPublish:=False

Else

.PrintOut

End If

.Columns.Hidden = False: .Rows.Hidden = False

.Protect

End If

End With

Next f

Application.ScreenUpdating = True

End Sub

Merci

Chantal

Bonsoir Chantal, salut xorsankukai,

dans mes tests ça marche sans problème, le fichier PDF est enregistré dans le même dossier que le classeur Excel avec le nom correspondant à la valeur de la cellule AT2. Pour vérifier tout de suite la création du fichier change OpenAfterPublish:=False avec OpenAfterPublish:=True

Enfin vérifie que le mot oui est écrit en minuscule comme dans le code.

Cordialement.

Bonjour

Cela ne fonctionne toujours pas, mais il y a des développements . Pour le oui j'avais déjà validé le tout et tout était ok. Dans mon excel, j'ai réalisé que le complément pdf était désactivé alors maintenant c'est fait. Présentement c'est soit tout en pdf ou tout à l'imprimante cela dépends sur qu'elle onglet je suis pour lancer la macro, si je suis sur l'onglet "Debut" tout va à l'imprimante et si je suis sur l'onglet "1" tout va en pdf. Le fait d'avoir mis OpenAfterPublish:=True c'est que les pdf s'ouvre. Est-ce que tu aurais une idée de ce que j'ai fait de pas correcte. Je te joins mon fichier au cas ou cela pourrais t'aider

Merci beaucoup de ta patience

Bonjour Chantal,

voici le code corrigé (xorsankukai avait bien raison pour ce qui concerne le . manquant). Deux petites remarques:

Vérifie le contenu de la cellule AZ11 dans chaque onglet car la protection de la feuille est ôtée uniquement si la valeur est différente de zéro.

If .Range("az11") <> 0

La structure des données, y compris la zone d’impression, doit être identique pour toutes les feuilles.

Sub banquehres()
    Dim Col, Lgn, i%, ii%, f%, m%, Chemin$, Fichier$

    Chemin = ThisWorkbook.Path & "\"  ' A' adapter

    For i = 1 To Worksheets.Count
        If Worksheets(i).Name = "Début" Then Exit For
    Next i
    If i > Worksheets.Count Then
        MsgBox "Pas de feuille Début !", vbCritical, "Erreur"
        Exit Sub
    End If
    For ii = i + 1 To Worksheets.Count
        If Worksheets(ii).Name = "Fin" Then Exit For
    Next ii
    If ii > Worksheets.Count Then
        MsgBox "Pas de feuille Fin !", vbCritical, "Erreur"
        Exit Sub
    End If
    i = i + 1: ii = ii - 1
    Lgn = Array(0, 10, 0)
    m = Worksheets("Début").Range("B12"): m = Lgn(m)
    Application.ScreenUpdating = False

    For f = i To ii
        With Worksheets(f)

            If .Range("az11") <> 0 Then
                .Unprotect
                If m > 0 And CInt(Worksheets(f).Name) <= 299 Then
                    .Rows(m & ":66").Hidden = True
                End If

                If .Range("E3") = "oui" Then

                    Fichier = Chemin & .Range("E2").Value & ".PDF"

                    .Range(ActiveSheet.PageSetup.PrintArea).ExportAsFixedFormat _
                                                                                Type:=xlTypePDF, _
                                                                                Filename:=Fichier, _
                                                                                Quality:=xlQualityStandard, _
                                                                                IncludeDocProperties:=False, _
                                                                                IgnorePrintAreas:=False, _
                                                                                OpenAfterPublish:=False

                Else
                    .PrintOut
                End If
                .Columns.Hidden = False: .Rows.Hidden = False

                .Protect
            End If
        End With
    Next f
    Application.ScreenUpdating = True

End Sub

Cordialement

Bonjour

C'est super tout fonctionne très bien. Un très gros merci et une très belle journée

Chantal

Rechercher des sujets similaires à "impression imprimante pdf"