Réalisation d'un test

Bonjour,

Je souhaiterais réaliser un mini examen en VBA, je suis arriver à m'occuper de la partie présentation, par contre pour la partie génération de question j'ai un peu de mal. Pour cela j'ai plusieurs onglets qui récapitules les questions (chaque onglet correspond à un sujet). Pour réaliser mon test, je voudrais prendre aléatoirement 3-4 questions de chaque onglets avec les réponses possibles,... et les mettre dans un onglet appelé questiong.

Comment pourrais-je faire ?

Merci d'avance

Bonjour CARREAU,

Peux-tu joindre ton fichier stp ? Adapter une solution sera plus facile pour nous.

Désolé.

Merci du conseil


Il y aura quelqueS beug, quand vous allez l'ouvrir étant donné que :

1) pas fini

2) je ne vous ai pas envoyer les images.

Merci d'avance

P.S. : Je ne trouve plus grand chose sur le net, quel livre me conseillez-vous pour approfondir mes bases ?

11questionnaire.zip (89.49 Ko)

Re,

Il faudrait que tu nous donnes un exemple en manuel de ce que tu souhaites obtenir. Joins un fichier avec les onglets contenant les questions/réponses et l'onglet représentant ton choix "aléatoire" de questions/réponses.

Et de cette basse (il manque des onglet, sinon trop volumineux) de donné créer un questionnaire d'une trentaine de questions dans l'onglet questiong dans le premier fichier envoyé précédemment.

Merci

J'ai bien compris le principe ! Mais il faut voir la structure de tes feuilles contenant les questions/réponses pour pouvoir adapter une solution à ta structure de données !

Un exemple à l'aveugle dans le fichier suivant en lançant la macro test :

Ah mince, mon base de donné ne s'est pas envoyer, je m'en occupe, mais en brefs, c'est la même mise en forme que l'onglet questiong. Je viens de regarder ce que vous avez faits, c'est ça, mais je voudrais

  • en même temps copier les réponses.
  • d'un autre classeur et non du même

C'est possible ?

Merci beaucoup

Voici la base de donnée, mais il en manque à l'appel, sinon je dépasse en terme de volume pour l'envoi

Voila

12bd.zip (12.71 Ko)

Bonjour CARREAU,

Un code à adapter et à tester sur ton fichier réel :

Sub test()
    Dim f As Workbook, WbkSource As Workbook

    Set f = ThisWorkbook    'classeur maitre
    Wbk = "C:\Dossier\MonClasseurDeQuestionReponse.xls" 'fichier à adapter
    Workbooks.Open Wbk
    Set WbkSource = ActiveWorkbook
    f.Sheets("Questionsg").Range("B2:B" & Rows.Count).ClearContents
    nbQuestParOnglet = Application.InputBox("Prendre combien de questions par onglet ?", Type:=1)
    For Each sht In Array("Pression")    'mettre ici les feuilles contenant les questions/réponses sous la forme ("Feuil1", "Feuil2")
        f.Sheets("temp").Range("A:K").ClearContents
        nbQuest = Application.CountA(WbkSource.Sheets(sht).Columns(1))
        limite = Application.Min(nbQuestParOnglet, nbQuest)
        For i = 1 To limite
            Do
                Randomize
                NumQuestion = Int((nbQuest) * Rnd + 1)
                Set c = f.Sheets("temp").Columns(1).Find(NumQuestion, LookIn:=xlValues, lookat:=xlWhole)
            Loop While Not c Is Nothing And Application.CountA(f.Sheets("temp").Columns(1)) < limite
            With f.Sheets("temp").Range("A" & Rows.Count).End(xlUp).Offset(1)
                .Value = NumQuestion
                .Offset(, 1).Resize(, 10).Value = WbkSource.Sheets(sht).Range("B" & NumQuestion + 1).Resize(, 10).Value
            End With
        Next i
        f.Sheets("Questionsg").Range("B" & Rows.Count).End(xlUp).Offset(1).Resize(nbQuestParOnglet, 10).Value = _
        f.Sheets("temp").Range("B2").Resize(nbQuestParOnglet, 10).Value
    Next sht
    WbkSource.Close False
End Sub

Edit : tu dois créer au préalable une feuille appelée temp

Super merci beaucoup

Et juste un dernier truc, comment on fais pour que le fichier "BD" reste fermé et non souvrir en pleins milieu ??

Merci

Lire et écrire dans un classeur fermé n'est pas aussi simple qu'il n'y parait. Pour la plupart des méthodes il faut utiliser des connexions OLE en utilisant la librairie ADO.

A défaut, minimise la fenêtre active en ajoutant le code suivant :

ActiveWindow.WindowState = xlMinimized

après la ligne

Set WbkSource = ActiveWorkbook
Rechercher des sujets similaires à "realisation test"