XL 2016 Impression automatiser

Seddiki_adz

XLDnaute Impliqué
Bonsoir
si possible imprimer tout les mois auto son changer manuellement les mois dans la cellule C2 ?
Merci
 

Pièces jointes

  • impression.xlsm
    132.2 KB · Affichages: 9
Solution
Bonjour à toutes & à tous, bonjour @Seddiki_adz
Voilà ce que j'ai fait : Je suis resté sur la feuille Récap telle qu'elle était. et j'ai procédé par sélection par Nom du prof, mois, semaine, jour de semaine avec formules et formats conditionnels pour aider à la sélection et gestion de l'événement Worksheet_Change de la feuille Récap.
1651492789665.png


1651492808696.png

1651492829713.png

1651492851535.png

1651493321921.png


Des messages d'avertissement suivant la situation peuvent s'afficher ligne 12.
Cellules ou noms définis impliqués :
AdresseNomParticularité
$D$7Sél_ProfValidation de...

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @Seddiki_adz :),

N'ayant pas d'imprimante, je vous ai fait un code avec juste un aperçu avant impression au lieu d'une impression réelle. Il faudra bien sûr remplacer l'instruction "d'aperçu" par une instruction "Imprimer".

Code dans module1:
VB:
Sub ImprimerMois()
Dim xm, ListSep, xrg As Range
   With Sheets("tot")
      If .FilterMode Then .ShowAllData
      Set xrg = .Range("a4").CurrentRegion.Cells(.Range("a4").CurrentRegion.Count)
      Set xrg = .Range(.Range("a2"), xrg)
      For Each xm In Split(.Range("c2").Validation.Formula1, Application.International(xlListSeparator))
         Range("c2") = xm
         xrg.PrintPreview
      Next xm
   End With
End Sub
 

Pièces jointes

  • Seddiki_adz- impression auto- v1.xlsm
    137.8 KB · Affichages: 3

Seddiki_adz

XLDnaute Impliqué
Bonjour @Seddiki_adz :),

N'ayant pas d'imprimante, je vous ai fait un code avec juste un aperçu avant impression au lieu d'une impression réelle. Il faudra bien sûr remplacer l'instruction "d'aperçu" par une instruction "Imprimer".

Code dans module1:
VB:
Sub ImprimerMois()
Dim xm, ListSep, xrg As Range
   With Sheets("tot")
      If .FilterMode Then .ShowAllData
      Set xrg = .Range("a4").CurrentRegion.Cells(.Range("a4").CurrentRegion.Count)
      Set xrg = .Range(.Range("a2"), xrg)
      For Each xm In Split(.Range("c2").Validation.Formula1, Application.International(xlListSeparator))
         Range("c2") = xm
         xrg.PrintPreview
      Next xm
   End With
End Sub
Merci
 

AtTheOne

XLDnaute Impliqué
Supporter XLD
Bonjour à toutes & à tous, bonjour @Seddiki_adz, bonjour @mapomme

Comme d'habitude j'arrive un peu tard et bien que ma proposition soit caduque je la fait quand même :
J'ai repris le classeur que je t'avais fait pour le fil Code de Transfert et je l'ai adapté à tes nouveaux besoins (Feuille Totaux avec impression par mois -cf la solution de mapomme-, et feuille Absences)
J'ai étendu le projet à tous les jours de la semaine, mais il peut être facilement réduit du dimanche au jeudi.

Ce projet utilise les tableaux structurés (ListObject en VBA) :
Nom du tableauObjetFeuille
Planningtableau de la feuille Planning
septtableau de la feuille sept
octtableau de la feuille oct
novtableau de la feuille nov
déctableau de la feuille déc
janvtableau de la feuille janv
févrtableau de la feuille févr
marstableau de la feuille mars
avrtableau de la feuille avr
maitableau de la feuille mai
juintableau de la feuille juin
Récaptableau de la feuille Récap
Totauxtableau de la feuille Totaux
Absencestableau de la feuille Absences
_tb_Profstable des profsFeuille Tables
_tb_Jourstable des joursFeuille Tables
_tb_Semainestable des semainesFeuille Tables
_tb_Horairestable des horairesFeuille Tables
_tb_Moistable des moisFeuille Tables
_tb_Classestable des classesFeuille Tables

Quelques noms définis utilisés pour les validations de cellules et pour faciliter la saisie des formules :
EtendueNomDéfinition
Classeurchx_Jours=_tb_Jours[Jours]
Classeurchx_Mois=_tb_Mois[Mois]
Classeurchx_Numéro=_tb_Profs[Numéro]
Classeurchx_Profs=_tb_Profs[Nom]
Classeurchx_Semaines=_tb_Semaines[Semaines]
ClasseurClef=Absences[@semaine]&Absences[@jours]&INDEX(chx_Numéro;EQUIV(Absences!NomProf;chx_Profs;0))
TotauxMois=Total!$D$1
TotauxClasse=Total!B:B Total[#En-têtes] (en colonne B)
AbsencesNomProf=Absences!$C$2
AbsencesMois=Absences!D:D Absences[#En-têtes] (En colonne D)A

La macro d'impression pour tous les mois s'inspire de celle de mapomme : avec une adaptation au tableau structuré et aux noms définis utilisés :
Enrichi (BBcode):
Sub ImprimerTotaux()

    Dim Z_Imp As Range, RgMois As Range, ChxMois
    With F14_Totaux
        Set Z_Imp = .Range(.[Mois], .[_tb_Total].ListObject.Range)
        Set RgMois = .[Mois]
        With .[_tb_Total].ListObject.AutoFilter
            If .FilterMode Then
                If MsgBox("Effacer les filtres ?", vbYesNo) = vbYes Then .ShowAllData
            End If
        End With
    End With
  
    ChxMois = [chx_Mois].Value
    For Each Mois In ChxMois
        RgMois = Mois
        Z_Imp.PrintOut
    Next
  
End Sub

Voilà
Regarde le fichier joint
Amicalement
Alain
MODIF 1 : Nom du tableau Absences et émoticône :D
MODIF 2 : Correction Bug nom du tableau Totaux
 

Pièces jointes

  • Projet Suivi Cours.xlsm
    147.5 KB · Affichages: 1
Dernière édition:

Seddiki_adz

XLDnaute Impliqué
Bonjour à toutes & à tous, bonjour @Seddiki_adz, bonjour @mapomme

Comme d'habitude j'arrive un peu tard et bien que ma proposition soit caduque je la fait quand même :
J'ai repris le classeur que je t'avais fait pour le fil Code de Transfert et je l'ai adapté à tes nouveaux besoins (Feuille Totaux avec impression par mois -cf la solution de mapomme-, et feuille Absences)
J'ai étendu le projet à tous les jours de la semaine, mais il peut être facilement réduit du dimanche au jeudi.

Ce projet utilise les tableaux structurés (ListObject en VBA) :
Nom du tableauObjetFeuille
Planningtableau de la feuille Planning
septtableau de la feuille sept
octtableau de la feuille oct
novtableau de la feuille nov
déctableau de la feuille déc
janvtableau de la feuille janv
févrtableau de la feuille févr
marstableau de la feuille mars
avrtableau de la feuille avr
maitableau de la feuille mai
juintableau de la feuille juin
Récaptableau de la feuille Récap
Totauxtableau de la feuille Totaux
Absencestableau de la feuille Absences
_tb_Profstable des profsFeuille Tables
_tb_Jourstable des joursFeuille Tables
_tb_Semainestable des semainesFeuille Tables
_tb_Horairestable des horairesFeuille Tables
_tb_Moistable des moisFeuille Tables
_tb_Classestable des classesFeuille Tables

Quelques noms définis utilisés pour les validations de cellules et pour faciliter la saisie des formules :
EtendueNomDéfinition
Classeurchx_Jours=_tb_Jours[Jours]
Classeurchx_Mois=_tb_Mois[Mois]
Classeurchx_Numéro=_tb_Profs[Numéro]
Classeurchx_Profs=_tb_Profs[Nom]
Classeurchx_Semaines=_tb_Semaines[Semaines]
ClasseurClef=_tb_Absences[@semaine]&_tb_Absences[@jours]&INDEX(chx_Numéro;EQUIV(Absences!NomProf;chx_Profs;0))
TotauxMois=Total!$D$1
TotauxClasse=Total!B:B _tb_Total[#En-têtes] (en colonne B)
AbsencesNomProf=Absences!$C$2
AbsencesMois=Absences!D:D _tb_abscences[#En-têtes] (En colonne D)

La macro d'impression pour tous les mois s'inspire de celle de mapomme : avec une adaptation au tableau structuré et aux noms définis utilisés :
Enrichi (BBcode):
Sub ImprimerTotaux()

    Dim Z_Imp As Range, RgMois As Range, ChxMois
    With F14_Totaux
        Set Z_Imp = .Range(.[Mois], .[_tb_Total].ListObject.Range)
        Set RgMois = .[Mois]
        With .[_tb_Total].ListObject.AutoFilter
            If .FilterMode Then
                If MsgBox("Effacer les filtres ?", vbYesNo) = vbYes Then .ShowAllData
            End If
        End With
    End With
   
    ChxMois = [chx_Mois].Value
    For Each Mois In ChxMois
        RgMois = Mois
        Z_Imp.PrintOut
    Next
   
End Sub

Voilà
Regarde le fichier joint
Amicalement
Alain
Merci
 

Seddiki_adz

XLDnaute Impliqué
Bonjour à toutes & à tous, bonjour @Seddiki_adz, bonjour @mapomme

Comme d'habitude j'arrive un peu tard et bien que ma proposition soit caduque je la fait quand même :
J'ai repris le classeur que je t'avais fait pour le fil Code de Transfert et je l'ai adapté à tes nouveaux besoins (Feuille Totaux avec impression par mois -cf la solution de mapomme-, et feuille Absences)
J'ai étendu le projet à tous les jours de la semaine, mais il peut être facilement réduit du dimanche au jeudi.

Ce projet utilise les tableaux structurés (ListObject en VBA) :
Nom du tableauObjetFeuille
Planningtableau de la feuille Planning
septtableau de la feuille sept
octtableau de la feuille oct
novtableau de la feuille nov
déctableau de la feuille déc
janvtableau de la feuille janv
févrtableau de la feuille févr
marstableau de la feuille mars
avrtableau de la feuille avr
maitableau de la feuille mai
juintableau de la feuille juin
Récaptableau de la feuille Récap
Totauxtableau de la feuille Totaux
Absencestableau de la feuille Absences
_tb_Profstable des profsFeuille Tables
_tb_Jourstable des joursFeuille Tables
_tb_Semainestable des semainesFeuille Tables
_tb_Horairestable des horairesFeuille Tables
_tb_Moistable des moisFeuille Tables
_tb_Classestable des classesFeuille Tables

Quelques noms définis utilisés pour les validations de cellules et pour faciliter la saisie des formules :
EtendueNomDéfinition
Classeurchx_Jours=_tb_Jours[Jours]
Classeurchx_Mois=_tb_Mois[Mois]
Classeurchx_Numéro=_tb_Profs[Numéro]
Classeurchx_Profs=_tb_Profs[Nom]
Classeurchx_Semaines=_tb_Semaines[Semaines]
ClasseurClef=Absences[@semaine]&Absences[@jours]&INDEX(chx_Numéro;EQUIV(Absences!NomProf;chx_Profs;0))
TotauxMois=Total!$D$1
TotauxClasse=Total!B:B Total[#En-têtes] (en colonne B)
AbsencesNomProf=Absences!$C$2
AbsencesMois=Absences!D:D Absences[#En-têtes] (En colonne D)A

La macro d'impression pour tous les mois s'inspire de celle de mapomme : avec une adaptation au tableau structuré et aux noms définis utilisés :
Enrichi (BBcode):
Sub ImprimerTotaux()

    Dim Z_Imp As Range, RgMois As Range, ChxMois
    With F14_Totaux
        Set Z_Imp = .Range(.[Mois], .[_tb_Total].ListObject.Range)
        Set RgMois = .[Mois]
        With .[_tb_Total].ListObject.AutoFilter
            If .FilterMode Then
                If MsgBox("Effacer les filtres ?", vbYesNo) = vbYes Then .ShowAllData
            End If
        End With
    End With
  
    ChxMois = [chx_Mois].Value
    For Each Mois In ChxMois
        RgMois = Mois
        Z_Imp.PrintOut
    Next
  
End Sub

Voilà
Regarde le fichier joint
Amicalement
Alain
MODIF : Nom du tableau Absences et émoticône :D
il y un problème avec le code impression
 

AtTheOne

XLDnaute Impliqué
Supporter XLD
Re
remplir les cases jaune
nom prénom et matière ,jour et les classes
Bon ça c'est l'attendu, mais à partir de quoi ?
Nom, Prénom, Matière c'est facile il y a la table "_tb_Profs".
Mais le jour, c'est au choix un jour de la semaine (dimanche, lundi, ...) et l'on ramène les classes à partir du planning ?
Merci d'être un peu plus explicite pour que l'on ne travaille pas à l'aveuglette.
Amicalement
Alain
 

AtTheOne

XLDnaute Impliqué
Supporter XLD
Bon, je fais comme je le sens :
  • En C11 Nom du Prof : Données, Validation, liste =chx_Profs
  • En D11 Prénom : formule =INDEX(_tb_Profs[Prénom];EQUIV($C$11;_tb_Profs[Nom];0))
  • En E11 Matière : formule =INDEX(_tb_Profs[Matière];EQUIV($C$11;_tb_Profs[Nom];0))

ABCDEF
18
AM​
8-9​
9-10​
10-11​
11-12​
12-13​
19
20
PM​
13-14​
14-15​
15-16​
16-17​
21

  • En B18 Recherche de la classe : formule
    =SIERREUR(INDEX(Planning[#En-têtes];;EQUIV($C$11;DECALER(Planning[#En-têtes];EQUIV($C$16;Planning[Jour];0)+EQUIV(B18;_tb_Horaires;0)-1;0);0));"")
Copier, Collage spécial, Formules sur les autres cellules de recherche (C19:F19 et B21:E21)

Bon courage
Amicalement
Alain
 

Seddiki_adz

XLDnaute Impliqué
Si en ajoute un colonne de chaque mois la date ( dernier colonne)
Depuis l'onglet recap suivant la colonne date en obtient les donnée de l'onglet justification
si possible ?
et ajout code impression
 

Pièces jointes

  • Projet Suivi Cours (2).xlsm
    141.9 KB · Affichages: 1
Dernière édition:

AtTheOne

XLDnaute Impliqué
Supporter XLD
Bonjour à toutes & à tous, bonjour @Seddiki_adz
Voilà ce que j'ai fait : Je suis resté sur la feuille Récap telle qu'elle était. et j'ai procédé par sélection par Nom du prof, mois, semaine, jour de semaine avec formules et formats conditionnels pour aider à la sélection et gestion de l'événement Worksheet_Change de la feuille Récap.
1651492789665.png


1651492808696.png

1651492829713.png

1651492851535.png

1651493321921.png


Des messages d'avertissement suivant la situation peuvent s'afficher ligne 12.
Cellules ou noms définis impliqués :
AdresseNomParticularité
$D$7Sél_ProfValidation de donnée, liste =chx_Profs
$D$11Sél_MoisValidation de donnée, liste =chx_Mois
$E$11Sél_SemaineValidation de donnée, liste =chx_Semaines
$F$11Sél_JoursValidation de donnée, liste =chx_Jours
Ligne=EQUIV(justification!Sél_Mois&justification!Sél_Semaine&justification!Sél_Jour&justification!Sél_Prof;Récap[mois]&Récap[semaine]&Récap[jours]&Récap[profs];0)
$F$7Formule =SIERREUR(INDEX(_tb_Profs[Prénom];EQUIV($D$7;_tb_Profs[Nom];0));"")
$H$7Formule =SIERREUR(INDEX(_tb_Profs[Matière];EQUIV($D$7;_tb_Profs[Nom];0));"")
$D$10Formule =SI((Sél_Prof<>"")*(Sél_Mois="")*(GAUCHE(C12;12)<>"Pas de cours");"mois ?";"")
$E$10Formule =SI((Sél_Mois<>"")*(Sél_Semaine="")*(GAUCHE(C12;12)<>"Pas de cours");"semaine ?";"")
$F$10Formule =SI((Sél_Semaine<>"")*(Sél_Jour="")*(GAUCHE(C12;12)<>"Pas de cours");"jour ?";"")
$C$12Formule
=CHOISIR(NBVAL(Sél_Prof;Sél_Mois;Sél_Semaine;Sél_Jour)+1;
"Séléctionner un professeur";
SI(NB.SI.ENS(Récap[profs];Sél_Prof)=0;"Pas de cours pour le professeur " &Sél_Prof;"");
SI(NB.SI.ENS(Récap[profs];Sél_Prof;Récap[mois];Sél_Mois)=0;"Pas de cours pour le mois de "&Sél_Mois;"");
SI(NB.SI.ENS(Récap[profs];Sél_Prof;Récap[mois];Sél_Mois;Récap[semaine];Sél_Semaine)=0;"Pas de cours"&Sél_Semaine;"");
SI(NB.SI.ENS(Récap[profs];Sél_Prof;Récap[mois];Sél_Mois;Récap[semaine];Sél_Semaine;Récap[jours];Sél_Jour)=0;"Pas de cours "&Sél_Jour;""))
$C$14Formule =SIERREUR(SI(ESTVIDE(INDEX(INDIRECT("Récap["&C13&"]");Ligne));"";INDEX(INDIRECT("Récap["&C13&"]");Ligne));"")
D14; E14; F14; C16; D16; E16; F16; G16Recopier la formule de C14

Macro Worksheet_Change :
Enrichi (BBcode):
Private Sub Worksheet_Change(ByVal Target As Range)
    
     If Target.Count = 1 Then
          Nom = ""
          On Error Resume Next
          Nom = Target.Name
          On Error GoTo 0
          If Nom <> "" Then
               With Me
                    Application.EnableEvents = False
                    Select Case Target.Address
                         Case Is = Me.[Sél_Prof].Address
                              Union(.[Sél_Mois], .[Sél_Semaine], .[Sél_Jour]).ClearContents
                         Case Is = Me.[Sél_Mois].Address
                              Union(.[Sél_Semaine], .[Sél_Jour]).ClearContents
                         Case Is = Me.[Sél_Semaine].Address
                              .[Sél_Jour].ClearContents
                    End Select
                    Application.EnableEvents = True
               End With
          End If
     End If
    
End Sub

Voir la pièce jointe

Pour l'impression, je te laisse essayer de ton coté, tu as déjà au moins un exemple ...

Amicalement
Alain
 

Pièces jointes

  • 1651493309596.png
    1651493309596.png
    25.4 KB · Affichages: 8
  • 1651493171920.png
    1651493171920.png
    25.4 KB · Affichages: 8
  • 1651492956512.png
    1651492956512.png
    25.4 KB · Affichages: 8
  • Projet Suivi Cours -2-.xlsm
    152.6 KB · Affichages: 1

Discussions similaires

Réponses
9
Affichages
135

Statistiques des forums

Discussions
312 228
Messages
2 086 421
Membres
103 205
dernier inscrit
zch