Questionnaire (optimisation du code) [débutant]

  • Initiateur de la discussion Initiateur de la discussion Lionel
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

L

Lionel

Guest
Bonjour,

C’est la première fois que je réalise un questionnaire sur Excel et je ne suis pas sûr que ma méthode soit la bonne. De plus je suis débutant en VBA.

But du questionnaire :
Il y a trois cases à cocher par question et en fonction de la réponse donnée, des points seront répartis parmi un choix de constitutions notées sur la feuille2.

J’ai réalisé le code pour la première question.

Qu’en pensez-vous ? Dois-je le faire ainsi pour l’ensemble du questionnaire ?
Je ne suis pas certain que mon code soit optimum.

Je vous remercie d’avance.

Lionel [file name=QuestionnaireHomeo.zip size=26850]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/QuestionnaireHomeo.zip[/file]
 

Pièces jointes

Nickel pour le InputBox. Je vais bosser dessus et je te redis.

Par contre pour la réinitialisation j'ai regardé l'aide:

'La méthode ne peut pas être utilisée dans le contexte. Notamment, certaines méthodes d'objets Range nécessitent une plage qui contient des données. Si la plage ne contient pas de données, la méthode échoue.'

Alors j'ai noté ça mais c'est toujours pas bon
parce qu'il ne différencie pas ceux vides et ceux contenant du texte

Range('B3😀16,F4:S4').Select
Selection.ClearContents
Sheets('BD').Select
If Range('B2:V169').Select Is Not Empty Then
Selection.Font.ColorIndex = 0
End If
End Sub

Merci
 
Salut Lionel,

Je viens de jeter un oeil a ton fichier qui je suppose ressemble a la version finale.

Chez moi, le bouton Reinitialiser ne fonctionnaias pas, il me mettait une erreur sur le
Code:
If Range('B2:V169').Select Is Not Empty Then
alors j'ai du le modifier de la manière suivante.

Dans le code du bouton, j'ai mis :
Code:
Private Sub CommandButton1_Click()
Range('B3:D16').Select
Selection.ClearContents
clear 'appelle la macro clear
End Sub

et dans un module standard, j'ai mis la macro suivante :
Code:
Sub clear()
Sheets('BD').Select
Range('B2:V169').Select
Selection.Font.ColorIndex = 0
End Sub

et ca fonctionne.

Voila et bien je crois qu'on a terminé, si tu as d'autres questions je suis dispo, sinon et bien merci a toi et a Jean-Yves parce que ton projet m'a permis d'apprendre pas mal de chose.

@+
 
Hello

peut-être juste une dernière question.

Dans la macro Color()

Il faudrait mettre au lieu de Feuil6 le nom de la feuille généré par Creation_questionnaire()

J'ai essayé des variantes au hasard comme:

Création_Questionnaire.ActiveSheet.Name
ou
Création_Questionnaire.Sheets.Names

Mais c'est pas ça.

Tu saurais comment faire ?

Merci

Sinon oui ce fichier est terminé et il est parfait.

Porcinet82, JYLL:
Je vous remercie beaucoup de l'aide et pour le savoir que vous m'avez apporté !!!!!!

-- un GRAND GRAND MERCI. 🙂 --
A+
 
re,

Je pense que tu dois pouvoir t'en sortir en placant le feuille créer pour le questionnaire en dernière position, puis compter le nombre de feuille, disons par exemple 5, que tu place dans une variable nb_feuille.

Ensuite, tu met le code Sheets(nb_feuille) a la place de Sheets('Feuil6'), et la ca devrait fonctionner.

@+
 
Hello

J'ai pas réussi à coder ta solution.

Par contre j'ai eu une idée qui m'a semblé intéressante mais...

Tu l'as sûrement deviné... ça marche pas.

Quand je donne le nom à la feuille en même temps avec le Userform, j'inscris ce nom dans la cellule Z2 de la page BD.

Du coup, à chaque fois qu'on créait une grille l'ancien nom est remplacé pas son nouveau.

Private Sub CommandButton1_Click()

ActiveSheet.Name = Me.TextBox1.Value & Me.TextBox2.Value

Feuil1.Range('Z2').Value = ActiveSheet.Name

UserForm1.Hide
End Sub


Ensuite dans ton code color j'ai mit:

'colorise les valeurs de la page BD en fonction que la réponse soit 1, 2 ou 3
Dim nom_feuille As String
Sub color()
Dim i As Byte, j As Byte
nom_feuille = Feuil1.Range('Z2').Value
'Avant de lancer la colorisation, je lance une vérification sur la feuil 6 afin de savoir
'si toutes les questions ont obtenues une réponse
For j = 1 To 168
If Sheets('nom_feuille').Cells(j, 2).Value = '' Then
MsgBox 'Vous avez oublier de repondre à la ' & Sheets('nom_feuille').Cells(j, 1).Value, vbCritical, 'Attention'
Application.Goto Sheets('nom_feuille').Cells(j, 1)
End If
Next j
Exit Sub

'Colorisation des cellules
Application.Goto Sheets('BD').Range('B2')
For i = 2 To Range('A65536').End(xlUp).Row
If Sheets('nom_feuille').Cells(i - 1, 2).Value = '1' Then
Sheets('BD').Range('B' & i & ':H' & i).Font.color = vbRed
ElseIf Sheets('nom_feuille').Cells(i - 1, 2).Value = '2' Then
Sheets('BD').Range('I' & i & ':O' & i).Font.color = vbGreen
ElseIf Sheets('nom_feuille').Cells(i - 1, 2).Value = '3' Then
Sheets('BD').Range('P' & i & ':V' & i).Font.color = vbBlue
End If
Next i
End Sub


Erreur: L'indice n'appartient pas à la section.

Je t'ai envoyé le fichier à ton adresse perso.

Merci A+
 
Hello

J'ai réussi.

Sub color()
Dim i As Byte, j As Byte
Dim MaFeuille As Integer
MaFeuille = 2


Et dans le code de JYLL

Sheets('Grille').Select
Lecture_Tableau

Sheets.Add after:=Worksheets(1)

Reste que j'ai dû mettre ton test dans la méthode color() en commentaire car il n'y sortait jamais. Avant pourtant ça marchait bien.

A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Retour