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
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
A voir également:
- Que choisir pour extraire de Excel et afficher dans Excel?
- Liste déroulante excel - Guide
- Si et excel - Guide
- Word et excel gratuit - Guide
- Formule excel pour additionner plusieurs cellules - Guide
- Aller à la ligne excel - Guide
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
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.
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.
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
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.
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.
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
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...
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...
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
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!
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!
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
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
Je reste en attente de ton retour après lecture des commentaires.
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.
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.
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...
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...
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
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 :
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 :
Ce qui peux donner, dans l'événement "clic" sur le bouton "envoyer les résultats" :
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
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 codeWith 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 SubEnfin, 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 Scoresoit 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.
- 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 codeWith 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 SubEnfin, 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 Scoresoit 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.
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
14 févr. 2013 à 11:25
Voici mon fichier
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.
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
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) :
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
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?
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
15 févr. 2013 à 16:47
Yes!
A+ alors.
N'hésite pas...
A+ alors.
N'hésite pas...
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+
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!
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
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...
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...
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é!...).
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
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"...
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"...
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. ..
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
21 févr. 2013 à 17:28
Tu cherches la première ligne vide dans la colonne A :
Tu écris le nom du gars en colonne A :
Ensuite, à chaque réponse, tu enregistres dans la cellule qui se trouve à la ligne "Ligne" et à la première colonne vide à droite... Soit :
Ce qui doit te donner un code complet voisin de :
Code à placer dans la procédure Private Sub UserForm_Initialize() :
Code à placer dans le clic du bouton :
Attention, je n'ai rien testé!
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é!
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
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...
J'ai pensé, sous ma douche ce matin, à 2-3 adaptations possibles...
Envoie moi ton fichier, par mail, je te l'adapterais...
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
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" :
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 :
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 :
inscrit ces quelques lignes :
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 :
Après le traitement "fausse réponse" et "bonne réponse" et avant l'effacement des optionbutton.value :
ajouter :
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.
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.
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
22 févr. 2013 à 11:09
Voici ma dernière mouture.
Enjoy it!
https://www.cjoint.com/?CBwljtXO5mk
Enjoy it!
https://www.cjoint.com/?CBwljtXO5mk
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
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
...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...
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
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???
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???
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?
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
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...
Tu va sur ce site, créer un lien vers ton fichier, reviens ici coller ton lien dans une réponse...
Merci infiniment! Voici le lien: http://cjoint.com/?CBmmtnY6KLQ
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
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
- 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