Compteur en Excel

Mon fichier comporte 50 feuilles à l'intérieur, dont chaque feuille est une forme standard. Désignons le formulaire Form1, Form2, Form3.

Je veux créer une feuille d'impression, où je sélectionne le formulaire que je veux voir, afin que je n'ai pas besoin de naviguer entre une feuille pour trouver la page souhaitée. Et je souhaite avoir un compteur dans cette feuille d'impression qui compte chaque fois que j'envoie à une imprimante.

Qu'est-ce que j'ai fait jusqu'ici? J'ai créé cette formule, où M1 est une liste déroulante avec les noms de formulaire. Donc, si je veux voir le Form2, je sélectionne Form2 dans la liste déroulante, et la formule affiche toutes les feuilles Form2.

=IF($M$1="Form1";IF('Form1'!A1="";"";'Form1'!A1);"")&IF($M$1="Form2";IF('Form2'!A1="";"";'Form2'!A1);"")&IF($M$1="Form3";IF('Form3'!A1="";"";'Form3'!A1);"") 

Cela fonctionne bien, car toutes les formes sont normalisées.

Après avoir choisi le formulaire sélectionné, je dois insérer un numéro d'identification de ma société et l'imprimer.

J'aimerais savoir s'il est possible de créer un compteur dans cette fiche qui compte combien de fois j'ai imprimé … Ou tout ce qui compte dans un ordre chronologique lorsque je sauvegarde ou change quoi que ce soit …

Toutes vos demandes peuvent être acceptées. Mais j'utilise uniquement VBA.

Gardez le menu déroulant, mais ajoutez également un bouton qui déclenche une macro.

Dans la macro, lisez la cellule avec la liste déroulante et envoyez la feuille appropriée pour imprimer. Ensuite, mettez à jour le compteur approprié qui peut être dans un ensemble de cellules sur la même page que le menu déroulant et le bouton.

Pour compter le nombre d'enregistrements, vous avez besoin d'une macro qui avant la fonction de sauvegarde. Vous devez rechercher cela, je pense qu'il pourrait même y avoir un article à ce sujet sur mon blog, ne me souviens pas, il y a quelques années que je l'ai fait. Le principal est identique à celui de la macro précédente en ajoutant 1 à la cellule appropriée.

Une manière un peu plus propre de construire la «feuille d'impression» qui montrera le contenu de l'une des 50 autres feuilles est de configurer la cellule A1 vers

 =INDIRECT($M$1 & "!A1") 

Qui crée une chaîne de texte qui ressemble au nom qualifié de la cellule que vous voulez voir, puis utilise la fonction INDIRECT() pour renvoyer cette chaîne (c'est-à-dire la traiter comme une adresse de cellule et récupérer le contenu de la chaîne Cellule identifiée). Avec cela, vous n'aurez pas besoin de modifier votre (s) formule (s) lorsque vous ajoutez Form51 . Avertissements:

  • Cela peut faire en sorte que Excel effectue beaucoup de travail (c.-à-d. Passe beaucoup de temps) "recalculant" ces cellules indirectes chaque fois que quelque chose change (pas seulement M1 ). Je ne suis pas sûr de savoir si ce serait pire que ce que vous avez maintenant.
  • Assurez-vous d'éviter la tentation de modifier les données ou d'entrer de nouvelles données dans la «feuille d'impression» lorsque vous souhaitez mettre à jour Form42 . (Bien sûr, vous avez ce problème maintenant.) Vous pouvez vous protéger contre ces accidents en protégeant la feuille d'impression.

Il existe d'autres façons de construire la feuille d'impression; Par exemple, en utilisant VBA pour

  • Créez une fonction définie par l'utilisateur qui pourrait remplacer l'appel INDIRECT() , mais fonctionne plus facilement, ou
  • Copiez effectivement toutes les données du Form nn à la feuille d'impression chaque fois que vous modifiez M1 .

Vous pouvez compter les modifications en écrivant une routine Worksheet_Change VBA.

Je ne connais aucun moyen pour la logique de la feuille de pouvoir compter / détecter lorsque vous l'imprimer. Cependant, vous pourriez obtenir l'effet souhaité en écrivant une routine d'impression dans VBA. UNE

 PrintOut , , , True 

La déclaration vous imprimera la fiche; Ajoutez toutes les autres actions souhaitées (p. Ex., Incrémentation d'un compteur). (Il vous suffit de vous souvenir de l'impression à l' aide de cette macro .) Le quatrième paramètre de PrintOut est Prévisualisation , définie sur True pour que Microsoft Excel invoque l'impression prévisualisée avant d'imprimer la feuille (vous donnant ainsi l'option d'annulation) ou False (ou omise) Pour imprimer la feuille immédiatement, sans conditions.

Voir Comment puis-je ajouter VBA dans MS Office? Pour des informations sur, eh bien, vous savez.