IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Réaliser un test d'évaluation


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 45
    Points : 30
    Points
    30
    Par défaut Réaliser un test d'évaluation
    Bonjour à tous et toutes,

    Je suis actuellement en stage dans une entreprise qui utilise des questionnaires d'évaluations très régulièrement pour telle ou telle activité.

    En gros, ils ont x items, par exemple:

    Relation avec le client
    Satisfaction avec le client
    Qualité de la prestation
    ...

    Et ils notent le tout comme dans un questionnaire de satisfaction sur une échelle de 1 à 4, en mettant un x sans la case correspondante.
    choix 1 2 3 4
    Relation avec le client :
    Satisfaction avec le client
    Qualité de la prestation
    ...

    sachant que pour les calculs ultérieurs, les 4 choix valent 10, 7, 3, 0, ils utilisent une feuille excel, avec quelques formules, et ils obtiennent un résultat en pourcentage à la fin.

    En substance, il y a la feuille du questionnaire: 150 questions dans un tableau où il suffit de mettre un "x" dans la colonne désirée pour chaque ligne,
    il y a la feuille des calculs: le même tableau (caché pour l'utilisateur où il y a des formules du genre "si la case est vide alors 0 sinon 10"), et une feuille où s'affichent les résultats calculés aussi par des formules avec des commentaires selon les résultats, affichée par une macro.

    En fait, c'est un peu comme un test de personnalité du type "si vous avez entre 10 et 20 alors, ..."

    ET DONC MON PROBLEME

    J'aimerais que plutôt que d'avoir à mettre un x dans les cases ( ce qui est fastidieux sur 150 questions) l'utilisateur n'aie qu'un clic à faire dans la bonne case.

    Je sais que l'on peut insérer des zones de groupes, et y mettre des boutons qui renvoient la valeur 1, 2,3,4, et c'est la solution que je retiendrai pour l'instant, mais d'une part, c'est un peu lourd à faire 150 fois, et par ailleurs, ne sachant pas supprimer le contour de la zone de groupe, c'est particulièrement peu esthétique (si vous savez le faire, je suis preneur).

    N'y a-t-il pas une méthode miracle pour rendre les cellules "cochables", ou en tout cas faire rentrer ça de manière jolie dans une user forme (c'est à dire sous forme d'un tableau assez serré?)

    Je vous remercie de m'avoir lu jusqu'au bout, et d'éventuellement m'aider à progresser dans ce problème qui n'a pas l'air trop complexe, mais dont la dimension (150 questions) oblige à en penser l'ergonomie (on ne veut pas utiliser 10 usrform).

    Bien Cordialement,

  2. #2
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour.

    Tu peux faire cela sur une feuille Excel. Comme tu as 150 questions, je ne vois pas l'intérêt ergonomique d'utiliser une userform.

    Je suppose que tes questions sont en ligne et pour chaque question les cases à cocher en colonne.

    Tu peux détecter le clic sur une cellule par l'évènement SelectionChange de la feuille.

    La procédure évènmentielles associée doit déterminer si la cellule cible est dans la zone à cocher. Si oui, elle détermine la ligne concernée, coche la colonne correspondante et décoche les autres colonnes.

    C'est assez simple.

    Bon courage,

    PGZ
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  3. #3
    Membre actif
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Points : 283
    Points
    283
    Par défaut
    Pour aller dans le sens de pgz j'utilisaerai aussi cet évênement:
    Voic
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
    If 8 < target.Column < 26 Then 'Imaginons que l'utilisateur puisse cocher des cases de la colonne 9 à 25
     
       If Target.Value="X" then 'Permet de décocher la case si elle était cochée avant le clic
          Target.clear
       Else
          Target.Value="X" 'Coche la case si elle n'était pas cochée
       End If
     
    End If
     
    End Sub

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Je suppose que les questions sont dans la colonne A de la ligne 5 à 154
    les 4 cases sont dans les colonnes de B à E.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Count > 1 Or Intersect(Target, Range("B5:E154")) Is Nothing Then Exit Sub   'pour se limiter l'évènement à l'intérieur de la zone à cocher Range("B5:E154")
    Range("B" & Target.Row & ":E" & Target.Row).ClearContents
    Target = "X"
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 45
    Points : 30
    Points
    30
    Par défaut
    Bonjour,

    Je tiens à vous remercier très chaleureusement pour la précision et la rapidité de votre aide, ainsi que d'être allé jusqu'à m'indiquer des bouts de code. Mon problème est réglé!

    J'ajoute une question subsidiaire:

    Après avoir obtenu le score final, l'utilisateur doit pouvoir afficher quels items ont reçu la note "3" par exemple.

    Pour identifier les questions et les réponses, j'utilise la feuille qui comporte les valeurs numériques (Cf mon premier post), et comme la somme des 4 colonnes détermine de manière unique quel choix a été fait, je peux baser l'algorithme sur ces chiffres.

    Et là j'hésite

    La solution que j'envisage pour le moment est en gros de faire une macro qui copiecolle les lignes devant lesquels on trouve le chiffre désiré dans une nouvelle feuille, mais cela me semble assez "sale" (l'écran va clignoter 50 fois, etc...)

    Sauriez-vous me suggérer une meilleure solution?

    Très cordialement,

  6. #6
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Pourquoi pas filtrer par colonne des cases "X"???
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  7. #7
    Membre actif
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Points : 283
    Points
    283
    Par défaut
    Pour information, pour éviter que l'écran clignote on fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpdating=False
    En plus ça améliore la rapidité du code.
    Sinon pour ton cas comme disais mercatog, un filtre suffit je pense
    La commande VBA est AutoFilter je croit

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 45
    Points : 30
    Points
    30
    Par défaut
    Oui, en effet, cela simplifie mon usine à gaz de somme, et je retiens cette solution. Mais comment faire pour lui demander d'afficher uniquement les items devant les colonnes x, et le tout dans une autre feuille?

  9. #9
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    (l'écran va clignoter 50 fois, etc...)
    Ceci n'est pas un problème majeur, puisque avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpadating=False
    au début et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpadating=True
    à la fin du code, l'utilisateur ne verra rien du clignotement.
    Analyse bien ce que tu veux faire. les possibilités existent en abondance.

    Edit, Grillé, Bonjour Diude; pas rafraichi
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 45
    Points : 30
    Points
    30
    Par défaut
    Ok, alors si je vous ai bien compris, la méthode consistant à faire des copiercollers ne vous choque pas. Merci bien pour l'instruction anti clignotis.

    Une dernière chose:

    Depuis l'autre message, j'essaie d'adapter le code que Mercatog a donné:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Count > 1 Or Intersect(Target, Range("B5:E154")) Is Nothing Then Exit Sub   'pour se limiter l'évènement à l'intérieur de la zone à cocher Range("B5:E154")
    Range("B" & Target.Row & ":E" & Target.Row).ClearContents
    Target = "X"
    End Sub
    L'adapter au cas où des blocs de questions sont discontinus, avec des réponses situées sur B5:E10 et aussi sur J5:M10.

    J'ai essayé de remplacer dans le code par et de rajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("J" & Target.Row & ":M" & Target.Row) .ClearContents
    Et le système me renvoie une erreur que je sais pas éliminer.

    Par ailleurs, j'ai essayé d'écrire tout simplement deux fois la sub pour des coordonnées différentes, mais garder le même nom provoque un conflit, et en changer la rend inefficace.

    Pourrais-je abuser une dernière fois de votre temps?

    Merci encore.

  11. #11
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    à la place mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Union(Range("B5:E10"), Range("J5:M10"))
    quand tu écris Union, fais un F1 sur elle.
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 45
    Points : 30
    Points
    30
    Par défaut
    Tant de pertinence dans les conseils,
    et de rapidité pour les réponses,
    Bravo et merci.

  13. #13
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    mais pour le ClearContents?

    si tu as les range("B5:E10") et range("J7:M20") nous ferons ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Count > 1 Or Intersect(Target, Union(Range("B5:E10"),Range("J7:M20"))) Is Nothing Then Exit Sub
    If Target.Column<=5 Then
        Range("B" & Target.Row & ":E" & Target.Row).ClearContents
    ElseIf Target.Column >= 10 Then
        Range("J" & Target.Row & ":M" & Target.Row).ClearContents
    End If
     
    Target = "X"
    End Sub
    Un Then oublié!!
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 45
    Points : 30
    Points
    30
    Par défaut
    Avant de voir ta réponse, mon code a fonctionné lorsque j'ai remplacé le clear contents par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Union(Range("B" & Target.Row & ":E" & Target.Row), Range("J" & Target.Row & ":M" & Target.Row)).ClearContents
    Quelle est la meilleure méthode entre celle-ci, et celle que tu me proposes dans ton dernier post?

    EDIT


    Au temps pour moi, dans mon cas, ça supprime tous les x de la ligne, ce que l'on ne veut évidemment pas.

  15. #15
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Mais ben oui, la logique des choses
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 45
    Points : 30
    Points
    30
    Par défaut
    Et oui, filtrer est bien la meilleure des choses.

    Merci encore.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. réaliser un test dont l'indicateur de comparaison dépend d'un combobox
    Par oscar.cesar dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/04/2009, 16h03
  2. Réaliser les tests unitaires avec Nunits
    Par soso78 dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 18/02/2009, 22h33
  3. réaliser un test avec php
    Par souad23 dans le forum Langage
    Réponses: 1
    Dernier message: 14/06/2007, 17h43
  4. réaliser des tests
    Par gentil dans le forum Struts 1
    Réponses: 4
    Dernier message: 31/03/2007, 13h35
  5. Que fais t-on qd on "réalise des tests" ?
    Par hélios44 dans le forum Emploi
    Réponses: 20
    Dernier message: 26/01/2007, 14h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo