Filtrer selon condition case à cocher et préparer un document d'impression

cgpa

XLDnaute Occasionnel
Bonjour le forum,

Voici la situation: j'ai créé un rapport de visite de chantier avec remarques récurrentes sous forme de cases à cocher pour différents intervenants. Les critères à cocher sont identiques pour différentes pièces.

Objectif: à l'aide d'une macro, préparer un document de sortie spécifique à chaque intervenant (chacun n'a pas besoin de voir les remarques des autres).

Solution envisagée: rechercheV, filtre, index décalé etc. Mais j'ai à chaque fois un problème.

Dans le fichier en pièce jointe: feuille 1 = feuille que j'utilise pour cocher les critères; feuille 2 = liaison du résultat vrai/faux des cases à cocher. Formules de transposition de la valeur vrai/faux en langage texte pour éventuelle liaison vers Word (je coince sur la manière de trier car si j'arrive à obtenir un tableau avec les données par intervenant, je serai capable d'envoyer vers word avec une macro style bouton par intervenant).

J'ai essayé au plus simple en créant une petite macro de sélection spécifique par intervenant, mais cela ne va pas à cause des cases à cocher des autres intervenant qui restent à l'écran.

Ma question: quelqu'un peut-il me mettre sur la voie pour que je puisse sortir un document à l'impression reprenant les données par intervenant?

Je vous remercie pour votre aide. Bonne journée à tous!
 

Fichiers joints

cgpa

XLDnaute Occasionnel
Re : Filtrer selon condition case à cocher et préparer un document d'impression

Bonjour,
Je coince également sur le problème suivant: comment réaliser une macro permettant de remettre toutes les cases à cocher vides en 1 seule fois?
Merci pour votre aide et bonne journée!
 

phlaurent55

XLDnaute Barbatruc
Re : Filtrer selon condition case à cocher et préparer un document d'impression

Bonjour cgpa,
Je coince également sur le problème suivant: comment réaliser une macro permettant de remettre toutes les cases à cocher vides en 1 seule fois?
avec ceci:
Code:
Sub RAZero()
Dim cellule As Range
For Each cellule In Sheets("Résultat").Range("B13:E80")
If cellule = True Then cellule = False
Next cellule
End Sub
à+
Philippe
 

cgpa

XLDnaute Occasionnel
Re : Filtrer selon condition case à cocher et préparer un document d'impression

Un tout grand merci à Philippe pour sa macro qui fonctionne parfaitement.
Je l'ai adaptée en ajoutant l'effacement des données d'autres cellules (colonne "remarques").
Je joins le nouveau fichier.
Si quelqu'un trouve une solution pour le problème de filtre par société pour préparer le document d'impression, il est le bienvenu!
 

Fichiers joints

Yaloo

XLDnaute Barbatruc
Re : Filtrer selon condition case à cocher et préparer un document d'impression

Bonsoir Patrick,

Comment veux-tu que tes données soient envoyées vers Word, sous quelle forme ?

Et surtout quelles données ?

Directement les données ou données à incorporer dans un document déjà existant ?

A+

Martial
 

phlaurent55

XLDnaute Barbatruc
Re : Filtrer selon condition case à cocher et préparer un document d'impression

Re, Bonjour

Dans la macro d'effacement, pour éviter le scintillement d'écran, il faut éviter le "Select"
cette seule et unique ligne de code peut remplacer les autres:
Code:
Range("E6,F14:F21,F24:F29,F32:F39,F43:F48,F53:F58,F63:F68,F73:F80").ClearContents
à+
Philippe
 

cgpa

XLDnaute Occasionnel
Re : Filtrer selon condition case à cocher et préparer un document d'impression

Re, Bonjour

Dans la macro d'effacement, pour éviter le scintillement d'écran, il faut éviter le "Select"
cette seule et unique ligne de code peut remplacer les autres:
Code:
Range("E6,F14:F21,F24:F29,F32:F39,F43:F48,F53:F58,F63:F68,F73:F80").ClearContents
à+
Philippe
Bonjour Philippe, le forum,
Merci pour ce code qui effectivement permet d'éviter le scintillement assez dérangeant et a l'avantage d'alléger le code.
Bonne journée!
 

cgpa

XLDnaute Occasionnel
Re : Filtrer selon condition case à cocher et préparer un document d'impression

Bonjour Martial, le forum,

L'objectif est de pouvoir sortir un document (sous word ou même excel, peu importe) par société.
J'aimerais que les données à imprimer ne soient que les lignes pour lesquelles une case à cocher a été cochée ou une remarque encodée. Soit la structure "société / pièce / critères cochés"
Exemple:
Société 1 cuisine : ragréage; déchets, remarque
société 1 sdb, remarque

J'ai bien essayé différentes formules, j'ai même essayé une macro basique en masquant les lignes mais à chaque fois j'ai le problème des cases à cocher des lignes masquées qui restent à l'écran. J'imagine un bouton de commande par société.

Si tu penses que la destination vers word est plus utile, je partirai alors sur un doc existant que je pourrais créer.

Penses-tu que cela soit réalisable?

Merci pour ton éclairage et bonne journée.
 

Yaloo

XLDnaute Barbatruc
Re : Filtrer selon condition case à cocher et préparer un document d'impression

Bonjour Patrick, Philippe,

Personnellement je ne travaillerais pas avec des cases à cocher, mais plutôt avec des macros événementielles.

Pour mettre les coches dans les cellules, tu fais un clic-droit, pour les enlever : même chose.
Pour le moment je n'ai fait que les "Cuisine" et "Living"

Tu cliques sur Société, tu choisis ta société et le tour est joué.

Dis-moi si ça te conviens.

Martial

PS : En plus, ton fichier est 3 fois moins lourd.
 

Fichiers joints

cgpa

XLDnaute Occasionnel
Re : Filtrer selon condition case à cocher et préparer un document d'impression

Bonjour Martial, Philippe, le forum,

La solution des cases événementielles me convient bien mieux car visuellement, c'est nettement supérieur!

La macro "société" est parfaite.

J'aimerais terminer le travail que tu as commencé pour les 2 premières pièces. Mais je ne comprends pas le code et ne vois pas où je dois adapter pour que cela fonctionne pour les autres pièces. Et je ne désire pas demander qu'on me fasse le travail, ce ne serais pas formatif.
Dès lors, peux-tu me dire comment tu fais? (un ligne d'explication dans le code devrait pouvoi m'aider).

Dans le code, je ne comprends également pas la ligne suivante:

Application.ScreenUpdating = 1: Application.EnableEvents = 1

Un grand merci pour cette aide précieuse.

Bonne journée.
 

Yaloo

XLDnaute Barbatruc
Re : Filtrer selon condition case à cocher et préparer un document d'impression

Salut,

En début de macro :
Application.ScreenUpdating = 0 ou 1
Signifie que les actions de la macro seront vu ou pas à l'écran :0 = False (pas vu) ou 1 = True (vu)

En fin de macro :
Application.EnableEvents = 0 ou 1
Signifie que les actions événementielle seront ou pas lancer :0 = False (pas lancée) ou 1 = True (lancée)

Pour modifier le fichier, il faut :

- Changer le nom de la police en "Wingdings" sur les zones où l'on doit faire le double-clic
dans la macro Worksheet_BeforeRightClick il y a cette ligne :
If Target.Font.Name = "Wingdings" Then Target = IIf(Target = "", "ü", "")
qui veut dire, si la police de la cellule (target) est "Wingdings" alors si la valeur de la cellule est "rien" alors on mets ü sinon on mets "Rien" (en gros soit c'est déjà rempli et on vide ou l'inverse).

- Il faut copier les formules de la colonne G dans toutes les lignes correspondant aux sociétés.

Je ne sais pas si tu as vu, mais j'ai créé un onglet paramètres avec les données des sociétés. Cela permet de le récupérer dans l'UserForm et surtout qu'il n'y ai pas d'erreur d'orthographe dans les noms de ta feuille "Encodage".

A+

Martial
 

cgpa

XLDnaute Occasionnel
Re : Filtrer selon condition case à cocher et préparer un document d'impression

Bonjour Martial,

Je te remercie d'avoir pris le temps de m'expliquer: c'est très clair.

J'ai pu adapter aux autres cellules.
J'avais cependant un problème pour les critères spécifiques à la société 6 qui n'apparaissaient pas comme il fallait. J'ai trouvé une solution qui me convient en adaptant le code de l'userform et celui de la remise à zéro.

Pour fignoler, 1°) j'aimerais un bouton qui remet la feuille "par société" à zéro après avoir sauvegardé. Je connais le code pour effacer les colonnes, mais pas celui pour les lignes à partir de la ligne n°8. Or, j'aimerais garder les 7 premières lignes. Connais-tu un code?

Enfin, 2°) j'ai essayé de créer un code "enregistrer sous" dans le module 2 mais il ne marche pas: connais-tu le code pour qu'un bouton ouvre la boite "enregistrer sous" dans excel et propose le nom du fichier que j'ai placé dans le code? voici ce que j'ai essayé:

' EnregisterSous Macro
'
Dim Fichier As String

Name = "Rapport " & Ws4.Cells(DerLWs4, E6)

'Changement du répertoire
Application_Excel.ChangeFileOpenDirectory ThisWorkbook.Path
'Définit et ouvre la boite de dialogue "Enregistrer sous" avec le nom du fichier
Set dlgSaveAs = Application_Excel.Dialogs(wdDialogFileSaveAs)
With dlgSaveAs
.Name = Nom
.Show
End With

End Sub

Encore merci pour ta collaboration et tes explications, c'est vraiment sympa.
Bonne journée!
 

Fichiers joints

Yaloo

XLDnaute Barbatruc
Re : Filtrer selon condition case à cocher et préparer un document d'impression

Bonsoir Patrick,

J'avais cependant un problème pour les critères spécifiques à la société 6 qui n'apparaissaient pas comme il fallait. J'ai trouvé une solution qui me convient en adaptant le code de l'userform et celui de la remise à zéro.
J'ai modifié les formules concernant ces lignes, de façon à ce qu'elles apparaissent seulement si une des cellules du dessous est cochées.

Pour fignoler, 1°) j'aimerais un bouton qui remet la feuille "par société" à zéro après avoir sauvegardé. Je connais le code pour effacer les colonnes, mais pas celui pour les lignes à partir de la ligne n°8. Or, j'aimerais garder les 7 premières lignes. Connais-tu un code?
Pour quelle raison ? Car j'ai intégré la suppression dans le code de l'userform.

Enfin, 2°) j'ai essayé de créer un code "enregistrer sous" dans le module 2 mais il ne marche pas: connais-tu le code pour qu'un bouton ouvre la boite "enregistrer sous" dans excel et propose le nom du fichier que j'ai placé dans le code? voici ce que j'ai essayé:

' EnregisterSous Macro
'
Dim Fichier As String

Name = "Rapport " & Ws4.Cells(DerLWs4, E6)

'Changement du répertoire
Application_Excel.ChangeFileOpenDirectory ThisWorkbook.Path
'Définit et ouvre la boite de dialogue "Enregistrer sous" avec le nom du fichier
Set dlgSaveAs = Application_Excel.Dialogs(wdDialogFileSaveAs)
With dlgSaveAs
.Name = Nom
.Show
End With
End Sub
Voici une macro pour n'enregistrer que la feuille Société puis supprimer les données de la ligne 9 à 2000, puis activer la feuille Encodage

VB:
Sub EnreistrerSous()
  Dim objSaveBox As FileDialog, Nom$

  'Définit la fenêtre "Enregistrer sous"
  Set objSaveBox = Application.FileDialog(msoFileDialogSaveAs)
  Sheets("Par société").Copy
  Nom = "Rapport " & Feuil4.[E6]
 
  With objSaveBox
    'Définit un nom par défaut dans le champ "Nom de fichier".
    .InitialFileName = Nom
    'Définit le type de fichier par défaut:
    '(la valeur 1 Permet de spécifier les classeurs "XLSX" lorsque vous êtes dans Excel 2007 ou 2010)
    .FilterIndex = 1
    'Affiche la boîte de dialogue
    .Show
    'Evite l'alerte
    Application.DisplayAlerts = False
    'Enregistre
    .Execute
  End With
  'Fermeture du fichier actif (celui qui vient d'être enregistré)
  ActiveWorkbook.Close
  'Suppression des données en feuille Société
  Feuil4.Rows("9:2000").Clear
  'Activation de la Feuille Encodage
  Feuil1.Activate
End Sub
A te relire

Martial
 

Fichiers joints

cgpa

XLDnaute Occasionnel
Re : Filtrer selon condition case à cocher et préparer un document d'impression

Bonjour Martial,

Je te remercie pour ta correction et tes explications dans le code. J'ai essayé cela et ça marche à merveille.

Je n'avais en effet pas pensé à modifier simplement la formule NB.SI. Cela est bien plus simple que modifier le code.

Pour la remise à zéro de la feuille "société", cela n'a en effet plus de sens puisque tu as pu rédiger le code pour l'enregistrement et le retour en feuille d'encodage. Ce sera un véritable gain de temps et je te remercie grandement.

Tes explications dans le code me permettront d'utiliser celui-ci pour d'autres fichiers de l'entreprise.

Une fois de plus, tu m'as apporté une aide précieuse: celle-ci servira pour d'autres dossiers. Si seulement je pouvais te renvoyer l'ascenseur!

Merci beaucoup pour l'aide qu tu apportes à tous et à bientôt!
Bonne journée.
 

Discussions similaires


Haut Bas