Questionnaire (optimisation du code) [débutant]

L

Lionel

Guest
Bonjour,

C’est la première fois que je réalise un questionnaire sur Excel et je ne suis pas sûr que ma méthode soit la bonne. De plus je suis débutant en VBA.

But du questionnaire :
Il y a trois cases à cocher par question et en fonction de la réponse donnée, des points seront répartis parmi un choix de constitutions notées sur la feuille2.

J’ai réalisé le code pour la première question.

Qu’en pensez-vous ? Dois-je le faire ainsi pour l’ensemble du questionnaire ?
Je ne suis pas certain que mon code soit optimum.

Je vous remercie d’avance.

Lionel [file name=QuestionnaireHomeo.zip size=26850]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/QuestionnaireHomeo.zip[/file]
 

Pièces jointes

  • QuestionnaireHomeo.zip
    26.2 KB · Affichages: 27
L

Lionel

Guest
Se serait une bonne idée de pouvoir valider les réponses à la fin du questionnaire seulement sinon à chaque fois que le questionné change de choix, il faudra décrémenter la valeur si celle-ci se valide directement et ça complique le code. En plus, si on veux réutiliser le questionnaire pour un autre sujet, se sera plus facile à modifier.

Mais j'ai pas compris pourquoi tu veux faire ainsi:

Pour i=1 to 60
Si Enormement de la question i = true alors
dans la feuille Pers_temp je supprime le contenu des cellules Gi:Qi
sinon si Beaucoup de la question i = true alors
dans la feuille Pers_temp je supprime le contenu des cellules (Bi:Fi,Li:Qi)
sinon
dans la feuille Pers_temp je supprime le contenu des cellules (Bi:Ki)
next i


A+
 

porcinet82

XLDnaute Barbatruc
Salut Lionel,

En fait, je ce que je te propose comme solution, c'est de valider les reponses a la fin de chaque partie du questionnaire.
C'est a dire tu cliques sur un bouton, et il 'attribue' les points pour chacune des questions.

Pour attribuer les points, en fait, j'avais penser a une macro qui testerait pour chaque questions, la reponse, et en fonction de la reponse, j'effacerai le contenu des cellules de la feuille adéquate (c'est à dire dans le cas de la première partie du questionnaire, la feuille Pers_temp).
Ainsi, j'obtiendrai un fichier du genre de celui en PJ. Il resterai alors qu'a compter le nombre de fois qu'apparait une chaine dans les plages de cellules définit. Il y a plus d'explication sur la PJ.

[file name=QuestionnaireHomeo_bidon_vtest.zip size=49301]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/QuestionnaireHomeo_bidon_vtest.zip[/file]

@+
 

Pièces jointes

  • QuestionnaireHomeo_bidon_vtest.zip
    48.1 KB · Affichages: 19

JYLL

Nous a quitté
Repose en paix
Bonsoir vous deux et le Forum,

J'ai revu mon code et maintenant la réponse à une question figure dans une cellule en face de cette question; J'ai modifié la hauteur des lignes et tout ce qu'il faut pour en arriver là.

J'espère que vous trouverez matière à avancer.

En ajoutant automatiquement le nom, il devient possible de sauvegarder chaque questionnaire.

Bonne fêtes de fin d'années et à plus sur le forum.

Amicalement.

Jean-Yves [file name=QuestionnaireHomeo_bidon_20051230233031.zip size=22734]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/QuestionnaireHomeo_bidon_20051230233031.zip[/file]
 

Pièces jointes

  • QuestionnaireHomeo_bidon_20051230233031.zip
    22.2 KB · Affichages: 30

porcinet82

XLDnaute Barbatruc
Salut Lionel, Jean-Yves,

Et bien je pense qu'avec ton code, Lionel ne devrait plus avoir de mal a finir son questionnaire.

J'ai cependant une petite question pour ma culture personnelle. Lorsque l'on choisit Enormement, Beaucoup ou Un peu, il apparait dans la colonne B, soit 1, 2 ou 3. J'ai bien vu qu'il y avait une liaison, mais je ne sais pas comment tu attribues les valeurs, est-ce que les valeurs sont par défaut?

@+

PS: si tu vois pas comment faire, ou si tu as un soucis, Lionel, refais signe. Avec l'aide jean-Yves, il me semble que maintenant, c'est a ma porté.

Message édité par: porcinet82, à: 31/12/2005 14:27
 
L

Lionel

Guest
Hello

J'ai prit en compte ton idée Porcinet82.

J'ai essayé de mettre en œuvre ta solution pour la suite Porcinet82. Mais au lieu de supprimer les 'constitutions' qui ne sont pas prises en compte, je modifie celles qui doivent être comptabilisées en leur attribuant une couleur.

Énormément = rouge
Beaucoup = vert
Un peu = bleu.

Ensuite chaque somme est multiplié respectivement par 5,3 et 1.

Mon problème se situe au niveau de la colorisation.

Ma matrice est un groupe de 3X7 colonnes
et 169 lignes.

Ce code vaut pour 1 ligne !

If Feuil6.Range('B1').Value = '1' Then
Feuil1.Range('B2:H2').Font.Color = vbRed
ElseIf Feuil6.Range('B1').Value = '2' Then
Feuil1.Range('I2:O2').Font.Color = vbRed
ElseIf Feuil6.Range('B1').Value = '3' Then
Feuil1.Range('P2:V2').Font.Color = vbRed

C'est sûrement pas comme ça qu'on programme :p

Et ensuite je dois descendre d'une ligne.

Alors j'ai vu qu'il y avait le .Offset pour ça mais j'ai pas réussi à l'utiliser.

Merci et excellent réveillon !!!!!
 

JYLL

Nous a quitté
Repose en paix
Bonsoir vous deux,

Pour l'attribution des valeurs, elles se font dans l'ordre de la création des cases d'options.
Je pense que pour attribuer les points en recherchant, avec Nb.SI il est facile de comptabiliser le nombre de 1 etc....

Je suis toujours présent en cas de PB, je suis le fil. pourvu que Michel retourne sur le fil. J'en avais mis un autre (Question) avec vos pseudo, mais je me suis fait remonter les bretelles, il n'y a pas le droit.

Bon réveillon à vous tous.

Amicalement.

Jean-Yves
 

porcinet82

XLDnaute Barbatruc
Salut Lionel,

Je commencerai par vous souhaiter a tous une bonne et heureuse année.

Je te file mon adresse perso, si tu as besoin de m'envoyer ton fichier.

Pour le code c'est quasiment ca, moi je ferais de la manière suivante (mais c'est pas pour ca que c'est bien, je n'ai pas la reflexion des programeurs LoL) :

Code:
Sub color()
Dim i As Byte

Application.Goto Sheets('feuil6').Range('A1')
For i = 1 To Range('A65536').End(xlUp).Row
    If Feuil6.Cells(i, 2).Value = '1' Then
        Feuil1.Range('B' & i + 1 & ':H' & i + 1).Font.color = 3
    ElseIf Feuil6.Cells(i, 2).Value = '2' Then
        Feuil1.Range('I' & i + 1 & ':O' & i + 1).Font.color = 43
    ElseIf Feuil6.Cells(i, 2).Value = '3' Then
        Feuil1.Range('P' & i + 1 & ':V' & i + 1).Font.color = 41
    End If
Next i
End Sub

Si tu veux des explications sur le code ou autre je suis dispo.

@+
 
L

Lionel

Guest
Hello

Également une excellente année à vous tous !!!

J'ai mit ta méthode color(). Mais je n'ai pas réussi à la faire fonctionner.


A chaque fois qu'on génère une grille, on créait une nouvelle feuille appelé Feuil1,Feuil2 etc.

Tu aurais une solution pour ton code color() afin qu'on ne doit pas systématiquement modifier les références des feuilles dans le code ?

Merci
A+

PS: j'ai compressé le fichier avec 7-Zip.
 
P

porcinet82

Guest
Salut Lionel,

Je t'ai dit je te file mon adresse perso et apres je te la file pas, les lendemain de fete c'est toujours un peu difiicile, donc la voila : romain.01@wanadoo.fr

Pour le code, il faut modifier le code de Jean-Yves, et ajouter la seconde ligne (sous celle de Jean-Yves) afin d'affecter un nom a la feuille créée :

Code:
Sheets.Add
ActiveSheet.Name = 'Nom_de_la_nouvelle_feuille'

J'attend ton fichier.

@+

Message édité par: porcinet82, à: 02/01/2006 11:40
 
L

Lionel

Guest
Hello

Merci pour les modifs!


Lorsque l'utilisateur clic sur 'Réaliser Grille'
Le nom de la feuille sera 'Questionnaire'

Ensuite la méthode color() va planter car elle ne reconnaitra que la Feuil6.

Donc on change Feuil6 en questionnaire mais lorsque l'on réalisera une nouvelle grille c'est ce code qui va planter car il ne peut créer deux feuilles ayant le même nom.

J'ai pensé à cette solution.
(J'ignore si elle est réalisable)

lorsque l'on clic sur 'Réaliser Grille':
Une boîte de dialogue apparaît et nous demande notre nom et prenom en un mot.
ActiveSheet.Name = nomprenom

J'ai essayé de voir sur le net pour ça et j'ai trouvé le InputBox comme objet qui pourrait être utilisé. Tu sais si c'est ça ?

Ensuite la méthode color prendra au lieu de Feuil6 le nom de la feuille généré par la méthode 'Création_Questionnaire()'.
Mais là je rêve un peu !? non. :)


J'ai fait un bouton réinitialiser

Private Sub CommandButton1_Click()
Range('B3:D16,F4:S4').Select
Selection.ClearContents
Sheets('BD').Select
Range('B2:V169').Select <-c'est ici le bug
Cells.Font.color = vbBlack
End Sub

Je comprends pas pourquoi ce code ne fonctionne pas.

Merci a+
 

Discussions similaires

Réponses
5
Affichages
563

Statistiques des forums

Discussions
312 429
Messages
2 088 349
Membres
103 822
dernier inscrit
kader55