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
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