Que choisir pour extraire de Excel et afficher dans Excel?

Fermé
starter01 - 12 févr. 2013 à 09:56
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 22 févr. 2013 à 12:42
Bonjour à la communauté!
 Sur une feuille Excel, je dispose d'un certain nombre de questions d'évaluation. A chacune de ces question, l'élève répond par Vrai ou Faux avec un indice de certitude (résolu hier). Parmi ces questions, j'aimerais maintenant en tirer 15 au hasard qui devraient apparaître, (j'ignore ce qui est faisable et de plus simple): sur une autre feuille Excel? un formulaire Excel?, autre? 
En complément d'info, je dispose en fait et en tout, de 12 feuilles de questions mais ce qui change n'est que la matière ayant trait aux questions sur la feuille. Le protocole à appliquer reste le même. Peut-être qu'une liste déroulante qui s'affiche sur une feuille ou formulaire unique pourrait permettre de choisir l'envoi des 15 questions d'une des feuilles 1 à 12. Enfin, l'affichage d'une question à la fois pour répondre aux 15 questions serait l'idéal.
 Quelqu'un voudrait bien me dire, SVP, comment je devrais envisager de résoudre? Je pourrais alors me mettre à la tâche et vous demander au besoin comment sortir de tel point où je n'en sortirais pas. D'avance merci!            
                
A voir également:

54 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
12 févr. 2013 à 15:55
Bon je vais m'absenter pour le reste de la journée. Je te proposes de me préparer un fichier avec tes feuilles de questions/réponses, ta feuille avec le noms de participants (faux pour préserver la confidentialité) etc etc... Tu me ficèle un joli fichier excel et on reverra la programmation demain.
Pour te répondre, non il s'agit toujours de bureautique. Certains parlent de programmation de "bas étage", perso je ne trouve pas. Tu peux te créer de vrais outils de travail qui te permettent un gain de temps considérable.
Voilà à demain.
2
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
12 févr. 2013 à 11:08
Bonjour,

Tout dépend de ce que vous souhaitez...

Personnellement, je trouve ça plus convivial de le faire par un formulaire de type UserForm.
Faut s'y connaitre un minimum en VBA, mais ça peut être sympa à créer puis exploiter.

Je t'ai bricolé cet exemple. Il est très incomplet mais te donne une idée de ce que l'on peux faire.
Si tu es intéressé on développera.

Tu dis.
2
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
12 févr. 2013 à 13:49
Nouvel exemple.
Celui-ci tu trouveras tout le code commenté.....
Dans les commentaires du module1, tu trouveras 3 questions et une amélioration à faire absolument.
Dis moi...
2
Entre temps, toujours merci. Il me serait impossible d'avancer si vite sans aide (si je peux dire que j'avance, bien sûr). Voici à nouveau ma contribution dans ton formulaire: http://cjoint.com/?CBmnMtmLWY4
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Je suis allé voir, ça frôle la perfection ... ça va bien!
Alors, ce qu'il faudrait pour bien faire (voilà, ...ça commence..), c'est que le bouton radio soit initialisé après une réponse. En effet, le candidat pourrait valider sa réponse sans se rendre compte qu'il ne vient pas de cliquer. Très bien le tableau inséré avec les indices!
Ce que je vais faire maintenant est d'aller extrapoler d'après ton code pour des données de ma feuille (voir si j'y arrive).  Je dois me rendre compte le + rapidement possible des difficultés pour finaliser. Je m'en vais donc dans ton code et commentaires. Merci!
                
1
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
12 févr. 2013 à 14:59
s'il est certain mais que c'est faux le tarif sera -5 (et non +5) ==> fait dans la nouvelle version
c'est que le bouton radio soit initialisé après une réponse
==> fait également sauf pour le choix de l'indice...
Je reste en attente de ton retour après lecture des commentaires.
0
Merci. je suis en train de travailler dessus. Vos commentaires sont très soignés. Je n'ai pas fini de chercher à comprendre certains effets de vos instructions (code) avec la conséquence. Par exemple, vous pouvez voir ici http://cjoint.com/?CBmpeKSKQES j'ai ajouté une feuille "Candidats" (mais qui s'ajoute aux listes des matière...) mais sans (encore) réussir (à comprendre) à l'importer dans la liste. Je ne vois pas encore POURQUOI votre code importe, sur quel critère. Bien entendu je ne manquerai pas d'étudier purement et simplement dans la littérature, votre aide est bien précieuse pour montrer le chemin.
 J'ai 2-3 questions que j'aimerais poser: 1/. l'extraction actuelle est-elle aléatoire? 2/. serait-il (simple) d'enregistrer les questions qui ont été posées, sinon, enregistrer le score et la date par exemple dans une colonne de la feuille "Candidats" à côté du nom? Quant à "Imprimer" je réalise que c'est dangereux car tôt ou tard on finirait par avoir su papier toutes questions ...et les réponses. Je vais donc retirer "Imprimer" du bouton "Imprimer/ Enregistrer". Avec tout cela, vous m'avez donné beaucoup de courage et vraiment une très bonne base pour continuer. Je ne suis pas sorti de l'auberge mais c'est très positif.
                
1
Ou alors prévoir un enregistrement du style :
01/01/2013¤35¤0 ==> Le 01/01/2013 - 35 pts / 75 - 0 = éliminatoire
02/12/2012¤45¤1 ==> Le 02/12/2012 - 45 pts - 1 = non éliminé
C'est + simple à mettre en place.....
Ce serait super bien de faire comme tu le proposes. Je voulais aussi te dire que le Form qui était resté à l'écran après 2 échecs d'envoi, après la correction du SMTP il a envoyé. Il permet donc d'être cliqué plusieurs fois. De la sorte, si la réponse pop de Win tarde, la personne pourrait recliquer plusieurs fois et envoyer plusieurs messages les mêmes...
                
1
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
Modifié par pijaku le 14/02/2013 à 10:52
Pour l'enregistrement des résultats, dans le module 1, tout en bas, copie colle ce code :
Sub EnregistreResultats(Nom As String, Article As String, Result As Integer, Elim As Byte)   
Dim Lig As Integer, Col As Integer, Pos As Integer, NbrCar As Integer   
Dim Score   

'Dans la feuille "Résultats"   
With Sheets("Résultats")   
    'on cherche la ligne ou en colonne A on a le nom de l'utilisateur   
    Lig = .Columns(1).Cells.Find(Nom, Lookat:=xlWhole).Row   
    'on cherche la colonne ou dans la 1ere ligne on a le nom de l'article   
    Col = .Rows(1).Cells.Find(Article, Lookat:=xlWhole).Column   
    'Si la cellule d'intersection lig col est vide   
    If .Cells(Lig, Col) = "" Then   
        'on y enregistre : la date + ¤ + le résultat   
        .Cells(Lig, Col) = Date & "¤" & Result & "¤" & Elim   
       
    Else 'sinon, si elle n'est pas vide   
           
        'On regarde si la note précédente était éliminatoire   
        If Right(.Cells(Lig, Col), 1) = 0 Then   
            'Si c'est le cas, et que la note du jour n'est pas éliminatoire   
            If Elim = 1 Then   
'Cas : ce jour non éliminatoire ; jour précédent éliminatoire   
    'ON REMPLACE   
                .Cells(Lig, Col) = Date & "¤" & Result & "¤" & Elim   
                Exit Sub   
            Else   
'Cas : ce jour éliminatoire ; jour précédent éliminatoire   
    'ON VERIFIE LE SCORE   
                Pos = InStr(.Cells(Lig, Col), "¤") + 1   
                NbrCar = InStr(InStr(1, .Cells(Lig, Col), "¤") + 1, .Cells(Lig, Col), "¤") - (InStr(1, .Cells(Lig, Col), "¤") + 1)   
                Score = Mid(.Cells(Lig, Col), Pos, NbrCar)   
                'si le score de la cellule est, inférieur au résultat du jour   
                If Score < Result Then   
                    'on enregistre, dans la cellule : la date + ¤ + le résultat   
                    .Cells(Lig, Col) = Date & "¤" & Result & "¤" & Elim   
                    Exit Sub   
                End If 'dans le cas contraire (résultat inférieur) on ne fait rien   
            End If   
        Else   
'Cas : ce jour éliminatoire ; jour précédent non éliminatoire   
    'ON N'ENREGISTRE PAS   
            If Elim = 0 Then Exit Sub   
        End If   
'Cas : ce jour non éliminatoire ; jour précédent non éliminatoire   
    'ON VERIFIE LE SCORE   
        'on extrait le score de la cellule   
        Pos = InStr(.Cells(Lig, Col), "¤") + 1   
        NbrCar = InStr(InStr(1, .Cells(Lig, Col), "¤") + 1, .Cells(Lig, Col), "¤") - (InStr(1, .Cells(Lig, Col), "¤") + 1)   
        Score = Mid(.Cells(Lig, Col), Pos, NbrCar)   
        'si le score de la cellule est, inférieur au résultat du jour   
        If Score < Result Then   
            'on enregistre, dans la cellule : la date + ¤ + le résultat   
            .Cells(Lig, Col) = Date & "¤" & Result & "¤" & Elim   
        End If 'dans le cas contraire (résultat inférieur) on ne fait rien   
    End If   
End With   
End Sub   


Ce code doit être appelé depuis une procédure de l'UserForm "Questionnaire". J'ai choisit d'enregistrer lors de l'envoi du mail, mais tu peux très bien choisir autre chose (créer un nouveau bouton etc...). Quoiqu'il en soit, voici la procédure d'appel de cette Sub :
Dim Nom As String, Article As String, Resultats As Integer, Elim As Byte   
Nom = Label19.Caption   
Article = ComboBox1.Value   
Resultats = TextBox4.Value   
If Eliminatoire = False Then Elim = 1 Else Elim = 0   
EnregistreResultats Nom, Article, Resultats, Elim

Ce qui peux donner, dans l'événement "clic" sur le bouton "envoyer les résultats" :
'Clic sur Envoyer les résultats"   
Private Sub CommandButton4_Click()   
Dim Expedit As String, Destinat As String, CopieA As String   
Dim Nom As String, Article As String, Resultats As Integer, Elim As Byte   
'Si l'utilisateur n'a pas répondu à 15 questions on quitte on n'envoie rien   
If Cpt <> 15 Then MsgBox "Vous n'avez pas répondu aux 15 questions.": Exit Sub   
'***** A ADAPTER : mettre les adresses mails des expéditeurs, destinataires et copies   
Expedit = "xxxxx.xxxxxx@xxx.fr"   
Destinat = "franck.xxxxxxxxxxx@xxx.fr"   
CopieA = "xxx.xxxxxxxxxxxxxxx@xxx.fr"   
EnvoiMail Expedit, Destinat, CopieA   
'On place les résultats dans la feuille "résultats"   
'si ceux ci sont les meilleurs pour ce candidat   
Nom = Label19.Caption   
Article = ComboBox1.Value   
Resultats = TextBox4.Value   
If Eliminatoire = False Then Elim = 1 Else Elim = 0   
EnregistreResultats Nom, Article, Resultats, Elim 'cf Module1  
'on efface le contenu de la feuille "Questions deja posees"   
With Sheets("Questions deja posees")   
    .Cells.Clear   
End With   
'on règle le boolean Eliminatoire = false   
Eliminatoire = False   
End Sub
0
dans ton dernier Post, à partir de "Ce code doit être appelé depuis une procédure de l'UserForm "Questionnaire". J'ai choisit ... je ne suis pas sur de comprendre mon action a faire. Est-ce:
- dans VB => Questionnaire => clic-clic pour afficher le code et insérer tes bouts de codes mais qui, dans le Post contiennent des coupure pour tes tes explications. Pourrais-tu, Franck, m'envoyer tout le code du Questionnaire (ancien et modifié?) ici j'ai peur de planter mais surtout d'introduire des erreurs qui n'apparaîtront pas directement...


Quant au score, c'est ok mais j'attends de vérifier que ça va bien car, dans "Resultats" j'ai encollé après "Option Explicit" ton code
With Sheets("Résultats")

'on cherche la ligne ou en colonne A on a le nom de l'utilisateur
Lig = .Columns(1).Cells.Find(Nom, Lookat:=xlWhole).Row
'on cherche la colonne ou dans la 1ere ligne on a le nom de l'article
Col = .Rows(1).Cells.Find(Article, Lookat:=xlWhole).Column
'Si la cellule d'intersection lig col est vide
If .Cells(Lig, Col) = "" Then
'on y enregistre : la date + ¤ + le résultat
.Cells(Lig, Col) = Date & "¤" & Result & "¤" & Elim

Else 'sinon, si elle n'est pas vide

'On regarde si la note précédente était éliminatoire
If Right(.Cells(Lig, Col), 1) = 0 Then
'Si c'est le cas, et que la note du jour n'est pas éliminatoire
If Elim = 1 Then
'Cas : ce jour non éliminatoire ; jour précédent éliminatoire
'ON REMPLACE
.Cells(Lig, Col) = Date & "¤" & Result & "¤" & Elim
Exit Sub
Else
'Cas : ce jour éliminatoire ; jour précédent éliminatoire
'ON VERIFIE LE SCORE
Pos = InStr(.Cells(Lig, Col), "¤") + 1
NbrCar = InStr(InStr(1, .Cells(Lig, Col), "¤") + 1, .Cells(Lig, Col), "¤") - (InStr(1, .Cells(Lig, Col), "¤") + 1)
Score = Mid(.Cells(Lig, Col), Pos, NbrCar)
'si le score de la cellule est, inférieur au résultat du jour
If Score < Result Then
'on enregistre, dans la cellule : la date + ¤ + le résultat
.Cells(Lig, Col) = Date & "¤" & Result & "¤" & Elim
Exit Sub
End If 'dans le cas contraire (résultat inférieur) on ne fait rien
End If
Else
'Cas : ce jour éliminatoire ; jour précédent non éliminatoire
'ON N'ENREGISTRE PAS
If Elim = 0 Then Exit Sub
End If
'Cas : ce jour non éliminatoire ; jour précédent non éliminatoire
'ON VERIFIE LE SCORE
'on extrait le score de la cellule
Pos = InStr(.Cells(Lig, Col), "¤") + 1
NbrCar = InStr(InStr(1, .Cells(Lig, Col), "¤") + 1, .Cells(Lig, Col), "¤") - (InStr(1, .Cells(Lig, Col), "¤") + 1)
Score = Mid(.Cells(Lig, Col), Pos, NbrCar)
'si le score de la cellule est, inférieur au résultat du jour
If Score < Result Then
'on enregistre, dans la cellule : la date + ¤ + le résultat
.Cells(Lig, Col) = Date & "¤" & Result & "¤" & Elim
End If 'dans le cas contraire (résultat inférieur) on ne fait rien
End If
End With
End Sub
Enfin, relativement à l'enregistrement des résultats, le code se termine ainsi
...objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = "25"

objMessage.Configuration.Fields.Update
objMessage.Send
MsgBox "Vos résultats ont bien été transmis."
Exit Sub
errorHandler:
MsgBox Err.Description
End Sub

Sub EnregistreResultats(Nom As String, Article As String, Result As Integer, Elim As Byte)
Dim Lig As Integer, Col As Integer, Pos As Integer, NbrCar As Integer
Dim Score
soit donc par "Dim score"au lieu du précédent "End Sub"
 Pour t'éviter de m'expliquer et que je réagisse aux explication (on voit ici que ça devient compliqué) ce srait mieux que, si tu veux bien, me renvoies ton Form. Pour y insérer mes données je dispose maintenant de l'entraînement suffisant pour effectuer les opérations.
                
1
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
14 févr. 2013 à 11:25
Voici mon fichier
0
Merci Franck ! Je vais travailler dessus. Là ça va bien aller. Je te tiens au courant
1
Bien le bonjour, Franck! Aujourd'hui test de ton application en grandeur nature. Tout est bien opérationnel et apprécié, juste que la copie email ne marche pas... L'email avec les résultats part bien, à la réception le destinataire voit qui était en copie mais la copie n'arrive pas à destination... Bien à toi.
1
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
15 févr. 2013 à 16:27
Salut,

Malheureusement je ne peux rien pour toi sur ce point...
Peut être une autre façon de procéder serait d'envoyer, non pas en copie, mais en destinataire supplémentaire...

Comme ceci (là ou tu as mis tes adresses) :
Expedit = "franck.111111@xxxxx.fr"
Destinat = "xxxx.xxxxxx@xxxxx.fr, yyyyyyyy.yyyy@yyyyy.com"
CopieA = ""
EnvoiMail Expedit, Destinat, CopieA
0
Je te remercie Franck! L'important est fait et c'est bien super comme cela! A ce stade, l'objectif étant atteint, on clôture la question?
1
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
15 févr. 2013 à 16:47
Yes!
A+ alors.
N'hésite pas...
0
Ok, merci ! La question est résolue. Cela étant, j'ai visité ton site Web http://www.4smyki.fr. l'art et la rigueur de programmation peuvent faire bon ménage... J'espère en de nouvelles occasions de partage mais où je pourrai (une prochaine fois) apporter du bien. A+
1
Bonjour Franck et communauté. J'aimerais savoir (question à Franck) s'il serait laborieux d'obtenir un enregistrement des questions posées à un candidat avant qu'elles soient effacées de la feuille des résultats (temporaires). Sans cet enregistrement, en cas de "discussion" l'instructeur ne peut pas "étaler" les fautes commises par un candidat. D'avance merci pour votre retour!
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
21 févr. 2013 à 09:17
Salut,

Qu'entends tu par "obtenir un enregistrement"?

Plusieurs possibilités :
1- stocker les questions/réponses des candidats dans une feuille
avantage : tu conserves une trace de tout
inconvénient : risque qu'à terme ton fichier soit énorme, lent etc.

2- envoyer par mail les questions-réponses de chaque tests,
avantage : tu conserves une trâce de tout
inconvénient : ta boîte mail risque de péter une durite...

3- imprimer une feuille par test avec les questions et réponses
avantage : tu conserves une trâce de tout (j'l'ai pas déjà dit?), le candidat peut repartir avec ses résultats.
inconvénient : tu tues la forêt équatoriale...

4- autre solution : dis moi ce que tu envisageais...
0
Bonjour Franck. Merci de ta réactivité. La première possibilité me conviendrait bien. Il s'agit de disposer d'un stockage temporaire (que j'efface ultérieurement à la main ou que je copie-encolle ailleurs pour archivage) me permettant de justifier l'évaluation auprès de parents ou de l'élève lui-même, si demandé (voire si exigé!...).
1
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
21 févr. 2013 à 14:47
alors,
il faut créer une nouvelle feuille, appelle la "archive" par exemple,
Avec :
en entête de colonnes :
Nom - Question 1 - Question 2 - ... - question 15
Et, à chaque clic sur le bouton "valide ta réponse", celle ci est enregistrée dans la feuille "archives"...
0
Merci! j'ai inséré la feuille "archive" et nommé les entêtes de colonne. Dans le code du bouton "Valide ta réponse" il me faut donc ajouter un bout de code... Je vais tenter de trouver (par analogie à ton code d'enregistrement temporaire dans dans la feuille "résultats"). Si je ne m'en sors pas je lance un appel à l'aide. ..
1
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
21 févr. 2013 à 17:28
Tu cherches la première ligne vide dans la colonne A :
Dim Ligne As Long 
Ligne = Range("A" & Rows.Count).End(xlUp).Row + 1

Tu écris le nom du gars en colonne A :
Range("A" & Ligne) = Me.Label19.Caption

Ensuite, à chaque réponse, tu enregistres dans la cellule qui se trouve à la ligne "Ligne" et à la première colonne vide à droite... Soit :
Dim Col As Integer 
Col = Cells(Ligne, Cells.Columns.Count).End(xlToLeft).Column + 1


Ce qui doit te donner un code complet voisin de :
Code à placer dans la procédure Private Sub UserForm_Initialize() :
Dim Ligne As Long 
With Sheets("Archives")
    Ligne = .Range("A" & Rows.Count).End(xlUp).Row + 1
    .Range("A" & Ligne) = Me.Label19.Caption
End With

Code à placer dans le clic du bouton :
Dim Ligne As Long 
Dim Col As Integer 

With Sheets("Archives")
    Ligne = .Range("A" & Rows.Count).End(xlUp).Row
    Col = .Cells(Ligne, Cells.Columns.Count).End(xlToLeft).Column + 1
    .Range("A" & Ligne) = Me.Label19.Caption
    .Cells(Ligne, Col) = Reponse
End With


Attention, je n'ai rien testé!
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
22 févr. 2013 à 08:40
Salut,
J'ai pensé, sous ma douche ce matin, à 2-3 adaptations possibles...
Envoie moi ton fichier, par mail, je te l'adapterais...
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
22 févr. 2013 à 09:58
J'ai essayé d'être pédagogique. Cela m'arrive de temps en temps, mais il faut dire que c'est beaucoup plus long. Mais aussi beaucoup plus profitable pour toi... Donc....
Pour archiver, nous avons besoin de quels renseignements :
- NOM Prénom,
- Date,
- Nom du questionnaire (pour retrouver les questions...)
- Les réponses du gars aux 15 questions.
La feuille archive se compose donc de :
- colonne A : NOM PRénom
- colonne B : Date,
- colonne C : Nom du questionnaire,
- colonnes de D à R : colonnes ou on va inscrire les réponses des questions de 1 à 15

Pour coder cela :
On a besoin du numéro de la ligne, dans la feuille archive, ou stocker les résultats. Cette ligne est la première ligne vide. On en a besoin dans :
- l'initialisation de l'Userform,
- le clic sur le bouton.
Comme elle doit rester en mémoire tout le temps d'exécution, il convient de la placer en entête du module de l'UserForm Questionnaire.

Tu verras donc, en tête du code de "Questionnaire" :
Option Explicit  'ça y était déjà...

Dim LignArchive As Long

Une fois ceci fait, on se pose la question :
Quand a t'on besoin de recalculer le numéro de la première ligne vide colonne A Feuille "Archive"?
- Lors de l'initialisation de l'Userform,
- Lors d'un clic sur le bouton "Evaluer un autre article",
- Pour être sur de nous, lors d'un clic sur le bouton "Envoyer les résultats".
Donc, dans ces trois procédures de l'USF Questionnaire, nous allons ajouter ces 3 lignes :
With Sheets("Archive")
    LignArchive = .Range("A" & Rows.Count).End(xlUp).Row + 1
End With


Ensuite, avec ce numéro de ligne, il nous faut stocker, dans la feuille archive :
- le nom,
- la date,
- le nom du questionnaire.
Quand faire cela???
Lorsque le candidat choisit son questionnaire
avantage : même s'il ne finit pas de répondre, cela sera archivé.
Genre s'il change de questionnaire sans avoir répondu à une seule question, la feuille archive aura tout de même les colonnes A, B et C de remplies et donc tu le sauras...

Donc, dans la procédure :
'En cas de changement de choix d'article :
Private Sub ComboBox1_Change()

inscrit ces quelques lignes :
'on enregistre le nom, la date et le questionnaire dans la feuille archive
With Sheets("Archive")
    .Range("A" & LignArchive).Value = Me.Label19.Caption
    .Range("B" & LignArchive).Value = Date
    .Range("C" & LignArchive).Value = ComboBox1.Value
End With


Ne reste plus qu'à écrire, dans cette même ligne, les réponses à chaque clic sur "valider". Profitons en pour stocker, dans ces mêmes cellules :
- le degré de certitude choisi ==> pour cela, il nous faut une nouvelle variable numCertitude...
- le score obtenu par réponse
Dans la procédure :
'Lors d'un clic sur le bouton "valider une réponse" :
Private Sub CommandButton1_Click()

Après le traitement "fausse réponse" et "bonne réponse" et avant l'effacement des optionbutton.value :
ajouter :
    'On stocke les réponses+degré de certitude + résultat
    Dim ColonnArchive As Integer
    With Sheets("Archive")
        ColonnArchive = .Range("IV" & LignArchive).End(xlToLeft).Column + 1
        .Cells(LignArchive, ColonnArchive) = Reponse & "¤" & numCertitude & "¤" & Points
    End With


Après cela, ne reste plus qu'à exploiter ces résultats... Pour cela, il nous faut :
- un 3ème userform,
- une nouvelle feuille que tu pourrais imprimer...
Je m'y penche ce matin.
1
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
22 févr. 2013 à 11:09
Voici ma dernière mouture.
Enjoy it!
https://www.cjoint.com/?CBwljtXO5mk
1
Déjà grand merci!
J'ai vu l'exemple. Oui! ça me plaît! Entre temps j'avais penché aussi sur l'UserForm et j'avais commenté par expérimenter les commandes de VBA (je suis sur Office 2000 professionnel). J'arrive à quelque chose (dans l'utilisation de ces commandes) et concluant dans mes essais.
De votre côté vous en êtes à un autre stade... L'exemple (sans doute rapide pour vous mais pour moi y arriver il y a un délai) montre bien le profil d'une solution élégante. Ainsi, dans une telle perspective, partant de votre exemple (si je peux en modifier le code), je peux extrapoler aux dénominations réelles relatives à mes questions. Une manière de dire que je ne m'attends pas à "du tout cuit dans mon assiette".

Là où je ne saurais pas de si tôt en sortir se serait au niveau de l'application dans l'UserForm de la formule suivante qui résout dans Excel (écrite hier par Bruce Willix de la communauté de ce site):  =SI(A2=B2;SI(C2=1;0;SI(C2=2;3;SI(C2=3;4;SI(C2=4;5))));SI(C2=1;0;SI(C2=2;-1;SI(C2=3;-2;SI(C2=4;-5))))). 
En conclusion, merci donc de votre disponibilité et compétence. J'opte pour votre suggestion de déployer la solution via un UserForm
                
0
...entre temps je vois que je peux entrer dans le code et que vous y avez écrit des informations (non visibles dans le Form). Je vais y bricoler dedans...
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
12 févr. 2013 à 11:41
Tu peux, tu peux...

En ce qui concerne ta formule, je suis allé sur ta discussion d'hier (au passage tontong n'est pas bruce willix et donc un ptit merci à tontong serait le bienvenu...) il s'agit d'un système de points attribués aux réponses???
0
ha bon? J'ai bien lu tontong hier mais j'ai cru qu'il félicitait Bruce... Faut que j'aille revoir ça et remercier tontong, en plus! Entre temps, le Form de l'exemple je l'ai amplifié avec des cases nécessaires. Mais comment je fais pour te le renvoyer?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
12 févr. 2013 à 12:12
tu passes par un service de pièce jointe comme https://www.cjoint.com/
Tu va sur ce site, créer un lien vers ton fichier, reviens ici coller ton lien dans une réponse...
0
Merci infiniment! Voici le lien: http://cjoint.com/?CBmmtnY6KLQ
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
12 févr. 2013 à 12:33
premiers commentaires :
- pourquoi des boutons "vrai" "faux" associés à des checkbox...
Dans ce cas, il convient d'utiliser le contrôle adapté, soit des optionbutton... Dans l'exemple, j'ai affecté, à leurs propriétés groupename la même valeur (GP1) pour signifier qu'un seul peux être actif.
- pourquoi un bouton certitude? totalement inutile. Suffit de mettre dans la propriété caption de la frame2 : certitude.
- ton barème peux très bien être inclus dans un label.

Après faut adapter le code du bouton valider...
Ton fichier
0