Questionnaire (optimisation du code) [débutant]

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

  • QuestionnaireHomeo.zip
    26.2 KB · Affichages: 27
L

Lionel

Guest
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:D16,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
 
L

Lionel

Guest
Voilà mon travail. En fouillant sur Internet, j'ai trouvé une solution avec UserForm.

A+ [file name=TestUserForm.zip size=10411]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/TestUserForm.zip[/file]
 

Pièces jointes

  • TestUserForm.zip
    10.2 KB · Affichages: 25
  • TestUserForm.zip
    10.2 KB · Affichages: 28
  • TestUserForm.zip
    10.2 KB · Affichages: 29

porcinet82

XLDnaute Barbatruc
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.

@+
 
L

Lionel

Guest
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+
 

porcinet82

XLDnaute Barbatruc
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.

@+
 
L

Lionel

Guest
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+
 
L

Lionel

Guest
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+
 

Discussions similaires

Réponses
5
Affichages
561

Statistiques des forums

Discussions
312 416
Messages
2 088 248
Membres
103 787
dernier inscrit
Sprat