Actualisation TCD en VBA

Bonjour,

Tout d'abord je vous remercie d'accorder votre attention à lire ce post.

Je développe un programme Excel VBA, pour un projet professionnel de fin d'étude. Je n'ai aucune notions de programmation VBA, et grâce à vos forum, et les cours, mais ma capacité d'organisation est limité. Donc j'en appel à vos lumières pour m'assister dans la réalisation de mon programme.

L’objectif est d’automatiser la saisie des résultats d’audit et de pouvoir consulter et imprimer les rapports.

Données d’entrées : il y a 14 responsables, assistés de leur Technicien Atelier, qui doivent réaliser toutes les semaines un audit. Parmi eux il y a des responsables qui ont 1 section d’autre 2 et d’autres 3. Une section est représentée par l’intitulé « MXX ».

1ère étape :

L’utilisateur ouvre le fichier puis clique sur le bouton « AUDIT EHS »

L’USF « Formulaire » s’ouvre, il le complète, puis passe sur les questionnaires qui se succèdent dans l’ordre.

Pour chaque réponse, une valeur est ajoutée à la base « Recueil données »

  • OUI = 0
  • N/A = « rien »
  • NON = 1 et ouvre l’USF « Plan_action » (Je reviendrai sur cette USF, pour d’autres problèmes)
L’utilisateur rempli l’USF « Plan_action » et valide pour passer à la question suivante.

La validation de celui-ci permet de remplir la base « Plan d’action »

Une fois que tous les questionnaires sont remplis. Il valide et reviens sur la feuille de départ (Sheet1, que je renommerai « Menu »)

2ème étape

L’utilisateur clique sur le bouton « RAPPORT D’AUDIT »

L’USF « Rapport » s’ouvre, il le complète, et valide

La validation doit changer les items de filtre dans l’onglet « Rapport » avec les valeurs des ComboBox, par exemple, pour le choix de la section M01, les Items « SECTION » des TCD6 et TCD7 cochés sont M01, M10 et M81, et l’Item « SECTION » du TCD8 est égal à M01-10-81, mais aussi l’Item « SECTION2 »du TCD9 a comme sélections cochées M01, M10 et M81.

Ma demande est : si l’utilisateur a fait son audit et n’a pas trouvé d’écarts, il doit pouvoir consulter et imprimer son rapport. Comment le faire ?

J’ai d’autres problèmes mais celui-ci est prioritaire pour la suite.

Problèmes suivants à résoudre :

1- Sur TCD9 :

Lorsque que l’Item change, le format de certaines cellules change, la police passe à 11 au lieu de 8, le font redevient blanc. Comment figer le format ?

2- Dans USF « Plan_Action »

a. Récupérer le Caption du frame ayant ouvert l’USF.

Lorsque je choisi « NON », à la 5ème question du Questionnaire1_Sécu, je voudrais récupérer, dans le Label20 de l’USF, la valeur « QS5 » (correspondant au Caption du frameQS5). Quel code pourrait me faire ça ?

b. Réinitialiser les OptionButton

Quand je clique sur « Annuler », je voudrais que la dernière réponse « NON » ayant affiché mon USF « Plan_action », se désactive et donc que l’ensemble des « OptionButton » du frame se réinitialise. Je ne vois pas comment cela peux se faire ?

c. A chaque ouverture de l’USF

Lorsque que j’ai rempli une première fois mon USF « Plan_action » et que par la suite sur une autre question. Les commentaires précédents restent. Comment rafraichir ?

3- Zone d’impression inférieure, au bord de la dernière ligne

Macro : ActiveSheet.PageSetup.PrintArea = "$E$3:$M$31", valable pour une plage de cellules choisies. Mais lorsque la dernière ligne de mon TCD9 se trouve par exemple en E50 :M50 comment le codifier, avec un End(xlDown).Row ?

4- Changement d’année.

Quand je changerai d’année, par ex 2013, est ce que j’aurai les données de décembre 2012 et celles de janvier 2013 dans « Suivi mensuel » ?

Je pense que ma liste de problème n’est pas exhaustive, et que d’autres questions me viendront au fur et à mesure de l’avancement du projet.

Je ne peux pas joindre le fichier, car il dépasse la capacité maximum (1585 ko, compressé), mais je m'engage à l'envoyer par mail, à ceux le désirant.

Désolé pour ce petit désagrément.

Cordialement

Bonjour Pimpon81 le forum

moi je n'ai pas eu le courage de lire tout, tu peux commencer par décomposer un peu ta demande STP et on va répondre au fur et à mesure

a+

papou

re,

....Je n'ai aucune notions de programmation VBA,.....

Eh bien au vu des explications dans ta dermande tu m'as l'air de déjà connaitre pas mal de choses tout de même.

Pour compléter Paritec, si trop lourd mets un fichier en ligne via www.cjoint.com

Le point 3, tu peux essayer comme ceci :

Dim lg As Byte
lg = Range("A" & Rows.Count).End(xlUp).Row
ActiveSheet.PageSetup.PrintArea = "$E$3:$M$" & lg

Amicalement

Bonjour.

Merci pour votre attention.

Voici le lien de mon fichier pour commencer :

Dan, je n'ai pas testé ton code mais il me parait très intéressant.

Paritec, et les autres ; voici pour commencer ma première question :

Lorsque une section n'a pas d'écart (ou n'a pas réalisé d'audit, il y en a des récalcitrantes), la base "Plan d'action" n'est pas remplie pour cette section.

Quand je test mon code (choix de section "M01", mois "juin" dans USF "Rapport"), pour en revenir à mon groupe de section M01-M10-M81 (correspond à un responsable) un bugg apparait car il ne peut pas lire la propriété PivotItems de la classe PivotFeild (Ligne 339 du module1), ça me parait logique puisque M01 n'a pas touvé d'écart en juin.

Comment empêcher ce genre de bugg? par une condition de boucle ? (qui plus est simplifiera largement la lecture du code).

Merci d'avance pour vos réponses.

Merci Dan, le point 3 est résolu.

J'ai juste apporté une modif dans le code, j'ai remplacer A qui correspondait à la dernière ligne de la colonne "A" par "I" qui correspond à ma dernière ligne remplie.

Dim lg As Byte
lg = Range("I" & Rows.Count).End(xlUp).Row
ActiveSheet.PageSetup.PrintArea = "$E$3:$M$" & lg

re

2- Dans USF « Plan_Action »

a. Récupérer le Caption du frame ayant ouvert l’USF.

Lorsque je choisi « NON », à la 5ème question du Questionnaire1_Sécu, je voudrais récupérer, dans le Label20 de l’USF, la valeur « QS5 » (correspondant au Caption du frameQS5). Quel code pourrait me faire ça ?

b. Réinitialiser les OptionButton

Quand je clique sur « Annuler », je voudrais que la dernière réponse « NON » ayant affiché mon USF « Plan_action », se désactive et donc que l’ensemble des « OptionButton » du frame se réinitialise. Je ne vois pas comment cela peux se faire ?

c. A chaque ouverture de l’USF

Lorsque que j’ai rempli une première fois mon USF « Plan_action » et que par la suite sur une autre question. Les commentaires précédents restent. Comment rafraichir ?

- Pour le point A, en en tête du module 1, décalre une variable public -->

Public question as string

dans l'SUF Questionnaire1_Sécu remplace la Private Sub OptionButtonQS52_Click() (de même que les autres Optionbutton) par celle ci-dessous

Private Sub OptionButtonQS52_Click()
  qs(5) = "1": activer
  'Ouverture du plan d'action
question = "QS52"
Plan_action.Show
End Sub

- Pour le point A et le point C, dans l'USF Plan action remplace la private sub initialize par celle ci-après

Private Sub UserForm_Initialize()
n_lignes = 0
Label16.Caption = Date
Label17.Caption = Formulaire.ComboBox_Section.Value 'Valeur du "Section" du formulaire
Label18.Caption = Formulaire.ComboBox_Poste.Value 'Valeur du "N° Poste" du formulaire
Label20.Caption = question
ComboBox_Theme = ""
TextBox_Commentaires = ""
TextBox_Pilote = ""
TextBox_AC = ""
TextBox_Delai = ""
question = ""
End Sub

Pour le point B, dans l'USF Plan action remplace la Private Sub CommandButtonPA_Annuler_Click() apr celle ci-dessous :

Private Sub CommandButtonPA_Annuler_Click()
Unload Plan_action
Dim c As Control
For Each c In Questionnaire1_Sécu.Controls
    If TypeName(c) = "OptionButton" Then c.Value = False
Next c
End Sub

Un truc à éviter est de choisir HIDE lorsque tu n'as plus besoin de l'USF. Choisis UNLOAD car le HIDE laisse l'USF à l'arrière plan de ton application.

Amicalement

Merci Dan pour ton aide très précieuse.

Mon problème sur le point est résolu, mais en testant je me suis aperçu que l'OptionButton a été désactivé, mais sans refaire de choix sur ce frame, en faisant un choix sur les autres, ça active le bouton "suivant". Or je souhaite que le bouton, "suivant" soit activé uniquement lorsque tous les bouton sont choisis.

Est ce que mon "private sub activer" ne serait pas à améliorer pour régler ce problème?

Un grand merci encore.

Pimpom81

Re,

l'OptionButton a été désactivé

Il faudrait que tu me dises ce que tu fais car je ne vois pas cela à l'utilisation.

PAr contre, il faudrait que tu changes dans toutes tes codes l'instruction HIDE qui comme expliqué avant, laisse l'USF à l'arrière plan avec toutes tes options cochées.

exemple : au lieu de "Plan_action.Hide" mets --> Unload Plan_action

A te relire

Salut Dan,

J'ai supprimé tous les HIDE de mon programme et les ai remplacé par Unload. De ce coté ça marche très bien.

En ce qui concerne la réinitialisation d'un Frame, le résultat obtenu est celui que j'attendais.

Mais ce qu'il se passe, lorsque j'ai cliqué sur "annuler" de l'USF "Plan_action", le frame (par ex QS5) est réinitialisé, mais si je continu à cocher les autres frame, sans modifier mon choix sur celui qui à été réinitialiser (QS5 sans bouton coché), le bouton "Suivant" de mon questionnaire s'active, et donc par conséquent il manquera une réponse.

Voici le code de contrôle pour activer le bouton "Suivant" de mon questionnaire

Private Sub CommandButton_Valider2_Click()
  Worksheets("Recueil données").Activate 'Activation de la feuille de recueil
  no_lignes = Range("A10000").End(xlUp).Row
       Cells(no_lignes, 7) = qs(1)
       Cells(no_lignes, 8) = qs(2)
       Cells(no_lignes, 9) = qs(3)
       Cells(no_lignes, 10) = qs(4)
       Cells(no_lignes, 11) = qs(5)
       Cells(no_lignes, 12) = qs(6)
       Cells(no_lignes, 13) = qs(7)
       Cells(no_lignes, 14) = qs(8)
       Cells(no_lignes, 15) = qs(9)
       Cells(no_lignes, 16) = qs(10)
       Cells(no_lignes, 17) = qs(11)
  Unload Me
  Questionnaire2_Enviro.Show
  Sheets("Recueil données").Activate
End Sub
Private Sub activer()
   'Activation du bouton "VALIDER", quand toutes les réponses sont remplies
   If qs(1) <> "" And qs(2) <> "" And qs(4) <> "" And qs(5) <> "" And qs(6) <> "" And qs(6) <> "" And qs(7) <> "" And qs(8) <> "" And qs(9) <> "" And qs(10) <> "" And qs(11) <> "" Then
       If qs(3) = "" Or qs(3) <> "" Then
        CommandButton_Valider2.Enabled = True
       End If
   End If
End Sub

J'espère avoir été un peu plus clair dans mes explications.

Merci encore Dan

Re,

Bizarre ton souci mais bon en regardant plus près, lorsque tu cliques sur NON dans qs52, tu mets une variable qs(5) à 1.Vu qu'elle est déclarée GLOBAL, il se peut que la variable conserve son statut de 1 quand tu cliques sur ANNULER.

Dans l'USF plan Action, modifie le code et remplace le par celui ci-arpès :

Private Sub CommandButtonPA_Annuler_Click()
Unload Plan_action
Erase qs()
End Sub

Je n'ai pas testé mais bon fais l'essai et dis moi.

Cela serait intéressant de savoir qui t'a fait ce code là en tout cas

Amicalement

J'ai testé et en fait ça revenais à ce que j'avais à l'origine

Alors j'ai complété le code :

Private Sub CommandButtonPA_Annuler_Click()
    Unload Plan_action
    Dim c As Control
    For Each c In Questionnaire1_Sécu.Controls
        If TypeName(c) = "OptionButton" Then c.Value = False
    Next c
    Erase qs()
End Sub

Or malheureusement ça me désactive tous les optionsbutton précédement cochés. Dans un sens ça empèche le passage au questionnaire suivant sans avoir oublié une réponse, mais ça implique de recommencer le questionnaire.

re

Or malheureusement ça me désactive tous les optionsbutton précédement cochés. Dans un sens ça empèche le passage au questionnaire suivant sans avoir oublié une réponse, mais ça implique de recommencer le questionnaire.

En fait ce que tu veux c'est annuler la dernière opération ?

Si tu cliques sur ANNULER dans l'USF plan action relative à une question, tu veux uniquement réinitialiser le frame de la question?

A te relire

Salut Dan

C'est exactement ça!

re,

Dans l'USF Plan action, modifie le code comme suit :

Private Sub CommandButtonPA_Annuler_Click()
Dim opb As Byte
opb = Mid(question, 3)
Questionnaire1_Sécu.Controls("Optionbutton" & "QS" & opb) = False
Me.Label20.Caption = ""
Plan_action.Hide
End Sub

A te relire

Salut Dan,

Je viens de tester ton code. J'ai un bug "Incompatibilité de type" sur

opb = Mid(question, 3)

arf!

A quoi correspond "Mid(question,3)"?

Cordialement

re,

En entête de ton module 1, tu as bien cette instruction --> Public question As String ??

Sinon juste avant l'instruction qui bugue, mets ceci "Msgbox question" et dis moi ce que te renvoies le message

A te relire

Salut Dan,

J'ai la déclaration de "question As String" dans le module1

et lors du test le messgbox me renvoi rien, c'est à dire vide de contenu ou d'information

A plus de te relire

erreur

re,

J'ai la déclaration de "question As String" dans le module1

Ce n'est pas juste, cela doit être "Public question as string" et placé en entête de module juste la ligne en dessous de GLOBAL .....

Si le message box ne te renvoie tu as un souci qui se voit d'ailleurs dans l'USF puisqu'il te manque "section audité" poste audité et N° question".

A te relire

Même message dans la "messgbox", en ayant fais le test depuis la feuille "menu".

A+ de te relire

re,

Essaie en modifiant comme suit dans l'USF plan action

Private Sub CommandButtonPA_Annuler_Click()
Questionnaire1_Sécu.Controls("Optionbutton" & question) = False
Me.Label20.Caption = ""
Unload Plan_action
End Sub

Dans la private sub initialize, à la fin désactive l'instruction --> question = ""

En regardant ce que je t'ai proposé, je pense que le souci vient de là car j'avais omis de te dire de désactiver cette instruction.

Pour mes tests, je pârs toujours de la feuille suivi, bouton Audit EHS

N'oublie pas de router aussi dans chaque code Private Sub OptionButtonQSxx_Click() l'instruction --> "question = "QSxx"

Dans mon post je ne t'ai donné que pour QS52, mais tu en as plein d'autres.

A te relire

Rechercher des sujets similaires à "actualisation tcd vba"