Questionnaire intelligent - Afficher questions selon choix
Bonjour à tous,
J'ai créé un questionnaire sous Excel que je voudrais rendre "intelligent" ie lier l'affichage de questions à des choix dans des menus déroulants : question par question, selon la réponse, il affiche la bonne question suivante ou un certain message.
J'ai mis toutes les règles que je voudrais dans mon fichier, il ne me reste plus qu'à savoir comment lier les actions entre elles et j'ai lu qu'une macro pourrait le faire. Mon problème est que je n'y connais RIEN, j'ai vu des lignes de code type à amender mais je ne sais pas par quel bout le prendre, je maîtrise déjà peu Excel...
Pourriez vous m'aider s'il vous plaît ? merci d'avance!!
Camille
Bonsoir,
J'ai commencé la procédure jusqu'à la question 5, je vous laisse continuer sur le même principe pour la suite.
Lancez la macro "Question_1" suivant la réponse, soit vous aurez le message "mon projet n'est pas éligible" ou la macro passera la main à la Question_2 et ainsi de suite.
La Question_5 traite une liste de choix, c'est le même principe qu'il faudra appliquer pour les questions avec liste de choix.
Le code jusqu'à la question 6 (non traitée):
Sub Question_1()
If MsgBox("Mon projet est greenfield ou sans IRVE préexistant?", vbYesNo + vbDefaultButton2, "Question1") = vbNo Then
MsgBox "Mon projet n'est pas éligible"
Else
Question_2 'on passe à la question 2
End If
End Sub
Sub Question_2()
If MsgBox("Mon projet est conforme à l'AFIR?", vbYesNo + vbDefaultButton2, "Question2") = vbNo Then
MsgBox "Mon projet n'est pas éligible"
Else
Question_3 'on passe à la question 3
End If
End Sub
Sub Question_3()
If MsgBox("Mon projet a une durée d'exploitation ? 5 ans à compter de la date de signature de la convention de subvention", vbYesNo + vbDefaultButton2, "Question3") = vbNo Then
MsgBox "Mon projet n'est pas éligible"
Else
Question_4 'on passe à la question 4
End If
End Sub
Sub Question_4()
If MsgBox("La mise en service des PDC est prévue ? 39 mois après le 17/12/2025", vbYesNo + vbDefaultButton2, "Question4") = vbYes Then
MsgBox "Mon projet est éligible au cut-off du 11/06/25 ou du 17/12/25, le projet ne peut pas démarrer avant la date de soumission du dossier (cible mi-mars 25) et la mise en service doit être réalisée dans les 39 mois du cut-off choisi"
Question_5 'on passe à la question 5
Else
MsgBox "Mon projet n'est pas éligible au CEF AFIF 2024, il conviendra d'attendre un prochain dispositif "
End If
End Sub
Sub Question_5() 'Question avec choix
If MsgBox("Mon projet porte sur des PDC privés ou non accessibles 24/7", vbYesNo + vbDefaultButton2, "Question5") = vbYes Then
MsgBox "Mon projet n'est pas éligible"
Exit Sub
ElseIf MsgBox("Mon projet porte sur des PDC dans une zone accessible au public et 24/7 mais réservés à un large groupe d'utilisateurs", vbYesNo + vbCritical + vbDefaultButton2, "Question5") = vbYes Then
Question_6 'on passe à la question 6
ElseIf MsgBox("Mon projet porte sur des PDC publics accessibles 24/7", vbYesNo + vbCritical + vbDefaultButton2, "Question5") = vbYes Then
Question_6 'on passe à la question 6
End If
End Sub
Sub Question_6()
End SubCdlt
Edit: si vous ne vous en sortez pas, je vous le ferai demain.
Bonsoir Arturo, merci beaucoup pour votre rapidité !
Bien compris le modèle de code pour les questions oui/non, en revanche pour les questions à choix dans liste déroulante je vois aussi du oui/non donc j'ai l'impression que vous voulez créer un fonctionnement similaire ? j'aimerais éviter cela et que chaque choix renvoie directement à une réponse ou une question suivante sans passer par la sous-étape oui/non. Est-ce possible?
Par ailleurs j'ai vu un "Exit sub" dans la question 5 après le 1er choix qui me semblait peut-être être une erreur?
Sans toucher à votre code, voici ce que j'obtiens sur le même modèle pour les Q6 à Q13, est-ce que vous voyez des erreurs? (FYI j'ai dû traduire en anglais).
Sub Question_6()
If MsgBox("My CPs are dedicated to HDV (>3,5T) either due to the specific design of the connectors/plugs or to the design of the parking space adjacent to the CPs", vbYesNo + vbDefaultButton2, "Question6") = vbNo Then
MsgBox "My project is not eligible"
Else
Question_7 'on passe à la question 7
End If
End Sub
Sub Question_7() 'Question avec choix
If MsgBox("My CPs are located in a truck park", bYesNo + vbCritical + vbDefaultButton2, "Question7") = vbYes Then
Question_7 'on passe à la question 8
ElseIf MsgBox("My CPs are located on the road", vbYesNo + vbCritical + vbDefaultButton2, "Question7") = vbYes Then
Question_7 'on passe à la question 9
ElseIf MsgBox("My CPs are located on a multimodal hub", vbYesNo + vbCritical + vbDefaultButton2, "Question7") = vbYes Then
Question_7 'on passe à la question 10
End If
End Sub
Sub Question_8()
If MsgBox("The truck park is a ground floor safe & secure truck park", vbYesNo + vbDefaultButton2, "Question8") = vbNo Then
MsgBox "My project is not eligible"
Else
Question_8 'on passe à la question 11
End If
End Sub
Sub Question_9()
If MsgBox("The road site is located on the TEN-T network or within < 3 km", vbYesNo + vbDefaultButton2, "Question9") = vbNo Then
MsgBox "My project is not eligible"
Else
Question_9 'on passe à la question 12
End If
End Sub
Sub Question_10()
If MsgBox("The multimodal hub is located on the TEN-T network", vbYesNo + vbDefaultButton2, "Question10") = vbNo Then
MsgBox "My project is not eligible"
Else
Question_10 'on passe à la question 12
End Sub
Sub Question_11() 'Question avec choix
If MsgBox("My CP output power is <150 kW", vbYesNo + vbDefaultButton2, "Question11") = vbYes Then
MsgBox "My project is not eligible"
Exit Sub
ElseIf MsgBox("My CP output power is > 150 kW and my pool has less than 4 CP x 1MW or, if a combination, less than 50% of CPs at 1MW", vbYesNo + vbCritical + vbDefaultButton2, "Question11") = vbYes Then
MsgBox "My project is eligible to a Unit Contribution only : 20k€/CP >150 kW and <350 kW ; 40k€/CP >350 kW, providing the total subsidy request amounts 2M€"
ElseIf MsgBox("My CP output power is > 150 kW and my pool has at least 4 CP x 1MW or, in case of mixed powers, at least 50% at 1MW", vbYesNo + vbCritical + vbDefaultButton2, "Question11") = vbYes Then
MsgBox "My project is eligible to Unit Contribution : 20k€/CP >150 kW and <350 kW; 40k€/CP >350kW, providing the total subsidy request amounts 2M€, OR, my project is eligible to the Co-funding rate : max 30% of engaged & eligible CAPEX /CP >150 kW and <350 kW up to 20k€, max 30% of engaged & eligible CAPEX /CP >350 kW and <1 MW up to 40k€, max 30% of engaged & eligible CAPEX /CP >1 MW without cap, providing the total subsidy request amounts 1M€"
End If
End Sub
Sub Question_12() 'Question avec choix
If MsgBox("My CP output power is <350 kW", vbYesNo + vbDefaultButton2, "Question11") = vbYes Then
MsgBox "My project is not eligible"
Exit Sub
ElseIf MsgBox("My CP output power is >350 kW and my pool has less than 4 CP x 1MW or, if a combination, less than 50% of CPs at 1MW", vbYesNo + vbCritical + vbDefaultButton2, "Question12") = vbYes Then
MsgBox "My project is eligible to a Unit Contribution only : 40k€/CP >350 kW, providing the total subsidy request amounts 2M€"
ElseIf MsgBox("My CP output power is >350 kW and my pool has at least 4 CP x 1MW or, in case of mixed powers, at least 50% at 1MW", vbYesNo + vbCritical + vbDefaultButton2, "Question12") = vbYes Then
MsgBox "My project is eligible to Unit Contribution : 40k€/CP >350kW, providing the total subsidy request amounts 2M€, OR, my project is eligible to the Co-funding rate : max 30% of engaged & eligible CAPEX /CP >350 kW and <1 MW up to 40k€, max 30% of engaged & eligible CAPEX /CP >1 MW without cap, providing the total subsidy request amounts 1M€"
End If
End SubPar ailleurs, Q13 à 17, j'ai du mal à faire le code car il me manque la question amont (cf même sujet que les questions avec liste de choix) :
Sub Question_13() 'Question avec choix
If MsgBox("On a scale from 1 to 5 (5 being the highest), my project is prioritary and urgent (based on the CEF requirements, EU sectoral policy objectives and priorities, and where applicable possible synergies with other sectors)", bYesNo + vbCritical + vbDefaultButton2, "Question13") = vbYes Then
MsgBox "A score < 3/5 is disqualifying"
ElseIf MsgBox("2", vbYesNo + vbCritical + vbDefaultButton2, "Question13") = vbYes Then
MsgBox "A score < 3/5 is disqualifying"
ElseIf MsgBox("3", vbYesNo + vbCritical + vbDefaultButton2, "Question13") = vbYes Then
Question_13 'on passe à la question 14
ElseIf MsgBox("4", vbYesNo + vbCritical + vbDefaultButton2, "Question13") = vbYes Then
Question_13 'on passe à la question 14
ElseIf MsgBox("5", vbYesNo + vbCritical + vbDefaultButton2, "Question13") = vbYes Then
Question_13 'on passe à la question 14
End If
End SubA la fin de la Q17, je voudrais insérer après la réponse le calcul des points attribués par l'utilisateur aux Q13 à 17 incluses, comment formaliser ce calcul ?
Une fois le code bien ficelé, comment intégrer la macro dans mon fichier Excel ? Est-ce que son activation génère un questionnaire ou bien est-ce que cela affecte juste l'affichage de mon questionnaire sur la feuille spécifiquement choisie ? Quid si je change un peu de wording dans mon questionnaire, dois-je mettre à jour le code pour qu'il reflète exactement ce qui est écrit dans mon questionnaire?
Un grand merci d'avance!
Bonjour,
Bien compris le modèle de code pour les questions oui/non, en revanche pour les questions à choix dans liste déroulante je vois aussi du oui/non donc j'ai l'impression que vous voulez créer un fonctionnement similaire ? j'aimerais éviter cela et que chaque choix renvoie directement à une réponse ou une question suivante sans passer par la sous-étape oui/non. Est-ce possible?
Concernant les listes de choix, quand on sort d'une question où plusieurs directions sont possible, on teste chacun de ces choix à tour de rôle
Exemple avec la question 5: (il faut commencer par les dernier choix qui oriente vers la question 6) à la question posée si la réponse est "NON", on passe au second choix qui lui aussi oriente vers la question 6, et si la réponse est toujours "NON", on passe au dernier choix qui renvoie le message ""Mon projet n'est pas...." et on quitte le programme.
Dans la question 5, j'avais pas mis le bon ordre chronologique, cela aurait dû être:
Sub Question_5() 'Question avec choix
ElseIf MsgBox("Mon projet porte sur des PDC dans une zone accessible au public et 24/7 mais réservés à un large groupe d'utilisateurs", vbYesNo + vbCritical + vbDefaultButton2, "Question2") = vbYes Then
Question_6 'on passe à la question 6
ElseIf MsgBox("Mon projet porte sur des PDC publics accessibles 24/7", vbYesNo + vbCritical + vbDefaultButton2, "Question2") = vbYes Then
Question_6 'on passe à la question 6
If MsgBox("Mon projet porte sur des PDC privés ou non accessibles 24/7", vbYesNo + vbDefaultButton2, "Question2") = vbYes Then
MsgBox "Mon projet n'est pas éligible"
Exit Sub
End If
End SubJe n'ai pas relu ni vérifié votre code, mais si vous avez compris le principe cela devrait aller, il y aura sûrement quelques petits réglages à faire pour arriver au résultat souhaité.
***********************************************************************************************************************************
Une fois le code bien ficelé, comment intégrer la macro dans mon fichier Excel ? Est-ce que son activation génère un questionnaire ou bien est-ce que cela affecte juste l'affichage de mon questionnaire sur la feuille spécifiquement choisie ?
Pour lancer la macro, dessinez un bouton sur une feuille auquel vous attribuez la macro. (clic droit sur l'objet dessiné, sélectionnez "Affecter une macro" et sélectionnez la macro "Question_1"
***********************************************************************************************************************************
Quid si je change un peu de wording dans mon questionnaire, dois-je mettre à jour le code pour qu'il reflète exactement ce qui est écrit dans mon questionnaire?
Si vous devez changer les textes du questionnaire, vaut mieux appeler la cellule contenant le texte plutôt que de mettre le texte en dur dans la macro.
Exemple pour la question_1:
Sub Question_1()
Texte1 = Range("B2").Value
Reponse1 = Range("E3").Value
If MsgBox(Texte1, vbYesNo + vbDefaultButton2, "Question1") = vbNo Then
MsgBox Reponse1
Else
Question_2 'on passe à la question 2
End If
End SubCdlt
Merci
Pour lancer la macro, dessinez un bouton sur une feuille auquel vous attribuez la macro. (clic droit sur l'objet dessiné, sélectionnez "Affecter une macro" et sélectionnez la macro "Question_1"
Je dois créer un bouton pour chaque question ?! Je ne peux pas avoir 1 macro unique qui régit tout le questionnaire ?
Non, 1 seul bouton et affectez-lui la macro "Question_1".
La macro "Question_1" se chargera d'appeler les autres macros séquentiellement en fonction de la réponse donnée.

