Démasquage sous conditions lors de l'impression

Bonjour

Dans le fichier joint, feuille base,
- Si case à cocher est égale à Oui, alors démasquer cellules 159 à 218 de la feuille "Feuille Calcul indemnités" puis imprimer toutes les feuilles dont feuille calcul indemnités
- Si case à cocher est égale à Non, alors laisser masquées les cellules 159 à 218 de la feuille "Feuille Calcul indemnités" puis imprimer toutes les feuilles dont feuille calcul indemnités

Dans le code, je souhaiterais pouvoir renommer les feuilles qui seront à imprimer

Avez vous une idée de comment je pourrais faire svp ?

Merci

Bonjour,

Il n'y a pas de fichier mais quelque chose comme ça pour commencer devrait vous rapprocher de l'objectif :

Sub ImprimerFeuilles()

Dim ws as worksheet
Dim V as Boolean
Dim NvNom$

for each ws in worksheets 'pour chaque feuille
    with ws 'sur la feuille en cours
        if .visible = false then .visible = True: V = True 'si invisible, devient visible
        .activate 'activée
        NvNom = InputBox("Entrez le nouveau nom de la feuille", "Renommer la feuille", .name) 'boite dlg pour entrer nv nom
        if not NvNom = "" then .name = NvNom 'si nvnom <> "", feuille renommee
        .printout 'impression (ajouter parametres)
        if V then .visible = false: V = False 'si feuille etait invisible, le redevient
    end with
next ws

End sub

Sub MaMacro()

Application.screenupdating = false

If sheets("Base").range("Caseacocher").value = "Oui" then 'si case a cocher = "oui" (adapter)
    sheets("Feuille Calcul indemnités").rows("159:218").hidden = false 'affiche lignes masquees
end if
call ImprimerFeuilles 'execute imprimer feuilles
sheets("Feuille Calcul indemnités").rows("159:218").hidden = true 'masque les lignes

Application.screenupdating = true

end sub

Cordialement,

Bonjour

Tout d'abord, merci

J'explique un peu plus

Si je clique sur bouton

image

J'arrive à 3 clics

1- Estimation Renseignements + Indemnités. Sur ce bouton, je dois pouvoir lorsque je sélectionne oui + oui (dernier question y a t il un temps partiel), démasquer les lignes 159:218 de la feuille calcul indemnités puis enregistrer les pages Renseignements salariés + Feuille de calcul Indemnités en format pdf dans le répertoire de mon choix ( le répertoire pourra varier). Une fois le PDF enregistré, il sera envoyé au responsable pour validation définitive avant envoi au demandeur. Il remasquera les lignes 159:218 de la feuille calcul indemnités pour finir

2- Dossier solde de tout compte complet. Sur ce bouton, je dois pouvoir lorsque je sélectionne oui + oui (dernier question y a t il un temps partiel), démasquer les lignes 159:218 de la feuille calcul indemnités puis enregistrer les pages Toutes les pages sauf mode opératoire, Critères Conventions Collectives plus une autre possible + Feuille de calcul Indemnités en format pdf dans le répertoire de mon choix ( le répertoire pourra varier). Une fois le PDF enregistré, il sera envoyé au responsable pour validation définitive avant envoi au demandeur. Il remasquera les lignes 159:218 de la feuille calcul indemnités pour finir

3-Documents STC. Impression de la feuille STC

J'espère que j'ai été clair et précis

Merci

10test.xlsm (236.52 Ko)

Voici un fichier vide de données personnelles

4test.xlsm (234.50 Ko)

Bonjour FMAILYS,

Je suis sur un mac et je n'arrive pas à ouvrir votre fichier (aucun des 2), désolé, il y a probablement un objet ActiveX dessus. Et je n'aime pas trop ouvrir les fichiers en général .

Sinon, je n'ai pas compris ce que vous cherchiez à faire. Pouvez-vous expliquer consicément vos objectifs, en abordant que les éléments nécessaires à votre progression (sinon, ça m'embrouille un peu de savoir combien de boutons vous avez) et mettre votre code sur le post ?

A bientôt,

Bonjour

Justement je ne sais comment écrire ce code

En fait pour être simple, dans un userform que j'ai créé, j'ai 3 cases à cocher

La première : J'ai un code qui m'ouvre un second userform me posant une question. Si je réponds Oui je dois pouvoir sélectionner la feuille Feuille de calcul Indemnités,démasquer les lignes 159 à 218.Ensuite je sélectionne cette feuille plus la feuille "renseignements salariés" et enregistre ces deux feuilles au format pdf via une boite dialogue me donnant accès à l'explorateur windows. Une fois le fichier enregistré, je vais remasquer mes lignes 159 à 218 de ma feuille Feuille de calcul indemnités et revenir en cellule A1 de ma feuille renseignements salariés

La deuxiéme : Même chose mais cette fois-ci en sélectionnant toutes les feuilles du classeur sauf les feuilles modes opératoires, critères conventions collectives et Paramètres

La troisième : Sélection de la feuille Courriers Salariés et enregistrement en pdf

En tout j'ai donc 3 codes à écrire

Voilà, j'espère avoir été plus clair

Dommage que vous ne puissiez ouvrir mon fichier

Merci

D'accord, je pensais qu'il y avait un code . Et bien ce que je propose, c'est une macro unique qui se déclenchera au clic du bouton valider. Elle dépendra du choix que vous ferez dans votre userform. Seul pré-requis, il faudra refaire enlever les cases à cocher et mettre une combobox à la place (liste) pour n'avoir qu'un choix à faire.

Voici la code :

'CODE A METTRE DANS UN MODULE NORMAL

Public fselected()

Sub EditionPDF(Choix as byte)

Dim ws as worksheet
Dim Dossier$, chemin$

'DEFINIT LES FEUILLES A IMPRIMER SELON LE CHOIX SELCTIONNE DANS USERFORM
Select case Choix
    case 0: fselected = Array("calcul indemnités", "renseignements salariés") 'A ADAPTER AVEC VRAIS NOMS
    case 1: fselected = Array("f4", "f4", "f6") 'A ADAPTER
    case 2: fselected = Array("Courriers Salariés") 'A ADAPTER
end select

'OUVRE BOITE DE DIALOGUE DE SELECTION DOSSIER
with Application.FileDialog(msoFileDialogFolderPicker)
    .show = true 'affiche
    if .selecteditems.count > 0 then 'si dossier selectionné
        Dossier = .selected.items(1) 'Dossier a pour valeur le répertoire
    else
        msgbox "Procédure annulée, aucun dossier sélectionné"
        Exit Sub 'sinon, sortie procédure
    end if
end with

'EDITIONS DES PDF
for each ws in worksheets(fselected) 'pour chaque feuille de notre sélection
    if ws.name = "calcul Indemnités" then ws.rows("159:218").hidden = true 'le nom de feuille = "Indemnités" > on masque les lignes
    with ws 'avec feuille en cours (indifférent du nom)
        chemin = Dossier & "\" & .name & ".pdf" 'chemin = dossier & nom de feuille.pdf >>> A AMELIORER (VARIABILISER DATE OU NOMS)
        .exportasfixedformat type:=xltypePDF, filename:=chemin, ignoreprintareas:=false 'export pdf
        .rows("159:218").hidden = false 'affichage des lignes (indifférent du nom de feuille)
    end with
next ws 'feuille suivante

Msgbox "Edition des fichiers terminée !"

End sub

'CODE A PLACER AU SEIN DU MODULE DU FORMULAIRE

Private Sub CommandButton_valider_Click()

Dim Selection as byte

With ComboBox1 'avec combobox
    If .listindex = -1 then 'si vide
        msgbox "Procédure annulée, aucune donnée n'est renseignée!", vbcritical, "Erreur de sélection"
        exit sub 'sortie procédure
    end if
    If not msgbox("Etes-vous certain de votre choix ?", vbyesno, "Demande de confirmation") = vbyes then 'si non, sortie
        exit sub
    end if
    Selection = .listindex 'selection = index dans combobox > repris pour définir les feuilles
    Call EditionPDF(Selection) 'exécution EditionPDF (en fonction du choix sélectionné)
    If not msgbox("Voulez-vous poursuivre avec le formulaire ?", vbyesno, "Demande de confirmation") = vbyes then 'si contniuer non, on ferme
        Unload.Me
        exit sub
    end if    
    .listindex = -1 'si non, on définit la liste sur valeur vide
end with

end sub

Sur les commentaires, il y a des indications, parfois utiles. Il faut donc bien mettre les codes aux endroits appropriés et adapter avec vos références à vous (en particulier les noms de feuille qui sont à modifier). D'ailleurs, il pourrait être plus simple d'avoir des noms de feuilles courts.

En espérant que ça marchera sans trop de modifications.

Cdlt,

Merci

Pourriez me faire un exemple sur un fichier excel vierge afin que je vois comment vous avez paramétré le code svp ?

Voici en pièce jointe comment j'ai changé mon userform

En relisant le code que vous m'avez gentiment rédigé, je ne suis pas certain que cela fasse ce que je souhaite, c'est pourquoi je vous mets un fichier visuel de ce que je souhaite réellement afin que vous compreniez mieux

Désolé ce n'est pas simple à expliquer par écrit

Voici le code que j'ai rajouté pour ma liste déroulante

Private Sub UserForm_Initialize()
  With Me.ComboBox1
    .AddItem "Estimation indemnités de rupture"
    .AddItem "Dossier Complet"
    .AddItem "Courriers STC"
  End With
End Sub

Cordialement

Oui, ça parait nickel. J'espère bien que ça fonctionnera, en tout cas, c'est en bonne voie. Attention, il faut en priorité renommer les valeurs de fselected : mettre tous les noms de feuilles à imprimer suivant les cas.

Je n'ai pas compris ce que vous entendiez par "un exemple sur un fichier excel vierge afin que je vois comment vous avez paramétré le code svp" ?

En fait je ne vois pas trop ou et comment mettre les codes, un fichier vierge de votre part me permettrait visuellement de comprendre

D'autant plus que si je comprends le code que vous m'avez fait je ne suis pas certain qu'il fasse ce que je souhaite. CF mon dernier post

Oups je me suis trompé dans ce que je souhaite faire.

Je refais donc un explicatif visuel avec les écrans qui apparaitront et vous renvoie tout ca

Désolé

Voici le fichier explicatif en détail

Encore désolé du temps passé

Bonjour

Besoin d'autres explications ?

Bonjour FMAILYS,

Alors, vos explications étaient déjà très claires, merci. Mais ça m'a demandé un petit peu de bricolage .

J'espère que mes commentaires seront aussi compréhensibles (pas sûr). D'ailleurs, il faut les lire pour comprendre le code et aussi pour le rendre opérationnel car il faudra renommer tous les éléments de votre fichier (noms de feuille et éventuellement la combobox). Aussi, vous devriez nommer la partie à masquer/afficher de votre feuille calcul indemnités. Ça me permettrait d'adapter dès maintenant le code pour le rendre dynamique car si un jour vous modifiez cette plage, il faudra mettre les mains dans le cambouis .

Ensuite, chose importante, je n'ai pas jugé nécessaire d'appeler un second userform, juste pour dire oui ou non. Le code génère des boîtes de dialogues qui amènent au même résultat (mais en plus simple).

Ce code est le code d'édition des PDF. Il ne s'exécute pas seul puisqu'il est subordonné au code de l'userform, duquel il tire les paramètres temps partiel et sélection des feuilles à imprimer. IL EST A PLACER DANS UN MODULE NORMAL (dans le menu contextuel de l'éditeur "Visual Basic"/ Insertion / Module / Coller tel quel dedans)

'CODE A METTRE DANS UN MODULE NORMAL
Sub EditionPDF(fselection, TempsPartiel as Boolean)

Dim ws as worksheet
Dim Dossier$, chemin$

'OUVRE BOITE DE DIALOGUE DE SELECTION DOSSIER
with Application.FileDialog(msoFileDialogFolderPicker)
    .show = true 'affiche
    if .selecteditems.count > 0 then 'si dossier selectionné
        Dossier = .selected.items(1) 'Dossier a pour valeur le répertoire
    else
        msgbox "Procédure annulée, aucun dossier sélectionné"
        Exit Sub 'sinon, sortie procédure
    end if
end with

'EDITIONS DES PDF
for each ws in worksheets(fselection) 'pour chaque feuille de notre sélection
    if TempsPartiel then 'si temps partiel (issu du choix effectué en amont) vrai
        if ws.name = "Feuille calcul Indemnités" then ws.rows("159:218").hidden = false 'si feuille "Indemnités" > affiche les lignes
    end if
    with ws 'avec feuille en cours (indifférent du nom)
        chemin = Dossier & "\" & .name & ".pdf" 'chemin = dossier & nom de feuille.pdf >>> A AMELIORER (VARIABILISER DATE OU NOMS)
        .exportasfixedformat type:=xltypePDF, filename:=chemin, ignoreprintareas:=false 'export pdf
    end with
    if ws.name = "Feuille calcul Indemnités" then ws.rows("159:218").hidden = true 'si feuille "Indemnités" > masque lignes
next ws 'feuille suivante

Msgbox "Edition des fichiers terminée !"

End sub<br>

Ce code s'exécute au clic sur le bouton valider (c'est plus ou moins la macro principale). Il est organisé par cas et relativement simple à comprendre. C'est dans ce code qu'on définit si les indemnités ont été calculées le cas échéant et si il y avait un temps partiel, et donc qu'on établit les feuilles à imprimer. Ensuite on exécute la macro edition des pdf en fonction des paramètres obtenus en amont (grâce aux choix retenus).

IL EST A PLACER DANS LE MODULE DE L'USERFORM.

'CODE A PLACER AU SEIN DU MODULE DU FORMULAIRE

Private Sub CommandButton_valider_Click()

Dim Choix%, ReponseIndem%, ReponseTP%
Dim fselection()
Dim TpsPart as Boolean

Choix = ComboBox1.listindex 'renvoie le choix sélectionné

'DEFINIT LES FEUILLES A IMPRIMER SELON LE CHOIX SELECTIONNE DANS USERFORM
Select case Choix
'CHOIX INDEMNITE
    case 0
        fselection = Array("Feuille calcul indemnités", "renseignements salariés") 'FEUILLES A IMPRIMER (A ADAPTER!)
        ReponseTP = msgbox("Le salarié avait-il une période à temps partiel ?", vbyesno, "Temps partiel") 'msg temps partiel
        select case ReponseTP
            case vbno: TpsPart = False 'si reponse non, variable TpsPart = faux
            case vbyes: TpsPart = True 'si reponse oui, TpsPart = vrai
            case else: msgbox "Procédure annulée !",, "Annulation": Exit sub 'sinon, sortie procedure
        end select
'CHOIX DOSSIER COMPLET
    case 1
        ReponseIndem = msgbox("AVEZ-VOUS CALCULE UNE INDEMNITE ?", vbyesno, "Indemnités") 'msg indemnités
        select case ReponseIndem
            case vbno: fselection = Array("f4", "f4", "f6") 'A ADAPTER (ici, sans "Indemnités" !!!) 'si non, feuilles sans "Indemn"
            case vbyes
                fselection = Array("f4", "f4", "f6", "Feuille calcule Indemnités") 'si oui, feuilles avec "Indemn" PUIS :
                ReponseTP = msgbox("Le salarié avait-il une période à temps partiel ?", vbyesno, "Temps partiel") 'msg TP
                select case ReponseTP
                    case vbno: TpsPart = False 'voir cas 0
                    case vbyes: TpsPart = True
                    case else: msgbox "Procédure annulée !",, "Annulation": Exit sub
                end select
            case else: msgbox "Procédure annulée !",, "Annulation": Exit sub
        end select
'CHOIX COURRIERS STC
    case 2
        fselection = Array("Courriers Salariés") 'feuille à imprimer
'LISTE LAISSEE VIDE
    case else
        msgbox "Procédure annulée, aucune donnée n'est renseignée!", vbcritical, "Erreur de sélection"
        exit sub 'sortie procédure
end select

'EXECUTION DE LA MACRO EditionPDF (qui dépend du choix temps partiel)
Call EditionPDF(fselection, TpsPart) 'exécution EditionPDF (en fonction de fselection et de TpsPart)

'MSG POUR CONTINUER SUR UF OU FERMER
If not msgbox("Voulez-vous poursuivre avec le formulaire ?", vbyesno, "Demande de confirmation") = vbyes then 'si continuer non, on ferme
    Unload.Me
    exit sub
end if

ComboBox1.listindex = -1 'si continuer oui, on définit la liste sur valeur vide

end sub

Si vous avez des questions, n'hésitez pas. Si vous voulez que je le fasse sur une feuille vierge, il n'y a pas de souci mais je pense que vous devriez y parvenir seul.

Cdlt,

Bonjour

Un grand merci et encore désolé pour ce cafouillage

J'essaie de faire marcher le truc et si je n'y arrive pas je reviens vers

Serais-ce abuser de vous demander si vous pouvez regarder mes deux autres posts

Aussi, vous devriez nommer la partie à masquer/afficher de votre feuille calcul indemnités.

Vous parlez surement de définir un nom aux lignes 159 à 218 de la feuille calcul indemnités, c bien cela ?

Je viens de le nommer "Partiel"

Exactement, mais seule la plage utilisée est à nommer (pas les lignes entières). Ensuite, je l'adapte dans le code.

Edit : Très bon pour le nom. Voici le code modifié en conséquence

'CODE A METTRE DANS UN MODULE NORMAL
Sub EditionPDF(fselection, TempsPartiel as Boolean)

Dim ws as worksheet
Dim Dossier$, chemin$

'OUVRE BOITE DE DIALOGUE DE SELECTION DOSSIER
with Application.FileDialog(msoFileDialogFolderPicker)
    .show = true 'affiche
    if .selecteditems.count > 0 then 'si dossier selectionné
        Dossier = .selected.items(1) 'Dossier a pour valeur le répertoire
    else
        msgbox "Procédure annulée, aucun dossier sélectionné"
        Exit Sub 'sinon, sortie procédure
    end if
end with

'EDITIONS DES PDF
for each ws in worksheets(fselection) 'pour chaque feuille de notre sélection
    if TempsPartiel then 'si temps partiel (issu du choix effectué en amont) vrai
        if ws.name = "Feuille calcul Indemnités" then ws.range("Partiel").entirerow.hidden = false 'si feuille "Indemnités" > affiche les lignes
    end if
    with ws 'avec feuille en cours (indifférent du nom)
        chemin = Dossier & "\" & .name & ".pdf" 'chemin = dossier & nom de feuille.pdf >>> A AMELIORER (VARIABILISER DATE OU NOMS)
        .exportasfixedformat type:=xltypePDF, filename:=chemin, ignoreprintareas:=false 'export pdf
    end with
    if ws.name = "Feuille calcul Indemnités" then ws.range("Partiel").entirerow.hidden = true 'si feuille "Indemnités" > masque lignes
next ws 'feuille suivante

Msgbox "Edition des fichiers terminée !"

End sub

Le bouton Valider présent sur mon userform fait appel au code

Private Sub CommandButton1_Click()

et non pas à

Private Sub CommandButton_valider_Click()

Dois je changer mon bouton à l'aide la boite à outils. Lequel prendre ?

Tu gardes tous les noms de ton fichier, donc tu remplaces

Private Sub CommandButton_valider_Click() par Private Sub CommandButton1_Click()

Idem peut-être avec combobox (nom à changer probablement mais au sein du code).

Et les feuilles bien entendu, notamment Case 1. Il faudra en ajouter probablement

J'ai fait les modif nécessaire selon moi

'CODE A PLACER AU SEIN DU MODULE DU FORMULAIRE
Private Sub CommandButton1_Click()

Dim Choix%, ReponseIndem%, ReponseTP%
Dim fselection()
Dim TpsPart As Boolean

Choix = ComboBox1.ListIndex 'renvoie le choix sélectionné

'DEFINIT LES FEUILLES A IMPRIMER SELON LE CHOIX SELECTIONNE DANS USERFORM
Select Case Choix
'CHOIX INDEMNITE
    Case 0
        fselection = Array("Feuille calcul indemnités", "renseignements salariés") 'FEUILLES A IMPRIMER (A ADAPTER!)
        ReponseTP = MsgBox("Le salarié avait-il une période à temps partiel ?", vbYesNo, "Temps partiel") 'msg temps partiel
        Select Case ReponseTP
            Case vbNo: TpsPart = False 'si reponse non, variable TpsPart = faux
            Case vbYes: TpsPart = True 'si reponse oui, TpsPart = vrai
            Case Else: MsgBox "Procédure annulée !", , "Annulation": Exit Sub 'sinon, sortie procedure
        End Select
'CHOIX DOSSIER COMPLET
    Case 1
        ReponseIndem = MsgBox("AVEZ-VOUS CALCULE UNE INDEMNITE ?", vbYesNo, "Indemnités") 'msg indemnités
        Select Case ReponseIndem
            Case vbNo: fselection = Array("Renseignements salarié", "CONTROLE DSN FIN CONTRAT", "Calcul CP", "Courriers Salariés") 'A ADAPTER (ici, sans "Indemnités" !!!) 'si non, feuilles sans "Indemn"
            Case vbYes
                fselection = Array("Renseignements salarié", "Feuille calcule Indemnités", "CONTROLE DSN FIN CONTRAT", "Calcul CP", "Courriers Salariés") 'si oui, feuilles avec "Indemn" PUIS :
                ReponseTP = MsgBox("Le salarié avait-il une période à temps partiel ?", vbYesNo, "Temps partiel") 'msg TP
                Select Case ReponseTP
                    Case vbNo: TpsPart = False 'voir cas 0
                    Case vbYes: TpsPart = True
                    Case Else: MsgBox "Procédure annulée !", , "Annulation": Exit Sub
                End Select
            Case Else: MsgBox "Procédure annulée !", , "Annulation": Exit Sub
        End Select
'CHOIX COURRIERS STC
    Case 2
        fselection = Array("Courriers Salariés") 'feuille à imprimer
'LISTE LAISSEE VIDE
    Case Else
        MsgBox "Procédure annulée, aucune donnée n'est renseignée!", vbCritical, "Erreur de sélection"
        Exit Sub 'sortie procédure
End Select

'EXECUTION DE LA MACRO EditionPDF (qui dépend du choix temps partiel)
Call EditionPDF(fselection, TpsPart) 'exécution EditionPDF (en fonction de fselection et de TpsPart)

'MSG POUR CONTINUER SUR UF OU FERMER
If Not MsgBox("Voulez-vous poursuivre avec le formulaire ?", vbYesNo, "Demande de confirmation") = vbYes Then 'si continuer non, on ferme
    Unload.Me
    Exit Sub
End If

ComboBox1.ListIndex = -1 'si continuer oui, on définit la liste sur valeur vide

End Sub

Toutefois lorsque je lance la macro avec mon bouton valider j'obtiens le message d'erreur en pièce jointe

capture
Rechercher des sujets similaires à "demasquage conditions lors impression"