Bonjour à tous,
Je débute en VBA et je n’en maîtrise donc pas toutes les subtilités.
Voilà mon problème (du jour) : je dois automatiser la gestion d’un questionnaire de satisfaction utilisateurs.
Pour cela, j’ai créé un questionnaire dans une feuille [Questionnaire] d’un fichier Excel pour saisir les réponses des utilisateurs, et je consolide les résultats dans une autre feuille [Resultats] du même fichier. Les réponses sont stockées dans un tableau [T_Result]
J’ai réussi à alimenter mon tableau via le questionnaire avec ce code :
Sub Enregistrement()
Dim LR As ListRow
Worksheets("Resultats").Activate
Worksheets("Resultats").Range("A4").Select
With Sheets("Resultats").ListObjects("T_Result")
Set LR = Selection.ListObject.ListRows.Add(alwaysinsert:=True)
LR.Range.Cells(1, 1) = Range("Q_COLMAT").Value
LR.Range.Cells(1, 2) = Range("Q_COLNOM").Value
LR.Range.Cells(1, 3) = Range("Q_COLPNM").Value
…
End With
End Sub
(En réalité, mon questionnaire comporte 214 questions, les champs de la feuille Questionnaire sont tous nommés et préfixés par Q_).
Je voudrais maintenant pouvoir afficher certains questionnaires déjà enregistrés à partir de la ligne correspondante du tableau de résultats. J’ai réussi, mais en mettant par VBA des formules dans les champs du Questionnaire (du genre Recherchev dans T_Result), mais pas par VBA.
Et je voudrais surtout pouvoir modifier ces enregistrements dans mon tableau (affichage du résultat choisi dans la feuille Questionnaire, modification de certains champs, puis enregistrement de la ligne modifiée à sa place dans le tableau de résultats).
Ce que j’ai tenté (récupération, toujours via des formules de la « bonne ligne » du tableau, et paramètre alwaysinsert à False) ne fonctionne pas.
Le code ci-dessous provoque l’ajout d’une nouvelle ligne vide dans le tableau T_Result, et l’ajout de mes valeurs modifiées plus bas, en dehors du tableau.
Sub Mise_a_jour()
Dim LR As ListRow
Dim I As Integer
Worksheets("Resultats").Activate
Worksheets("Resultats").Range("A3").Select
Range("Q_NumLig").FormulaLocal = "=EQUIV(Q_COLMAT;T_Result[R_COLMAT];0)"
I = Range("Q_NumLig").Value
MsgBox (I)
With Sheets("Resultats").ListObjects("T_Result")
Set LR = Selection.ListObject.ListRows.Update(alwaysinsert:=False)
LR.Range.Cells(I, 1) = Range("Q_COLMAT").Value
Set LR = Selection.ListObject.ListRows.Add(alwaysinsert:=False)
LR.Range.Cells(I, 1) = Range("Q_COLMAT").Value
LR.Range.Cells(I, 2) = Range("Q_COLNOM").Value
LR.Range.Cells(I, 3) = Range("Q_COLPNM").Value
…
End With
End Sub
Quelqu’un aurait-il une idée ?
D’avance merci
Sylvie
Je débute en VBA et je n’en maîtrise donc pas toutes les subtilités.
Voilà mon problème (du jour) : je dois automatiser la gestion d’un questionnaire de satisfaction utilisateurs.
Pour cela, j’ai créé un questionnaire dans une feuille [Questionnaire] d’un fichier Excel pour saisir les réponses des utilisateurs, et je consolide les résultats dans une autre feuille [Resultats] du même fichier. Les réponses sont stockées dans un tableau [T_Result]
J’ai réussi à alimenter mon tableau via le questionnaire avec ce code :
Sub Enregistrement()
Dim LR As ListRow
Worksheets("Resultats").Activate
Worksheets("Resultats").Range("A4").Select
With Sheets("Resultats").ListObjects("T_Result")
Set LR = Selection.ListObject.ListRows.Add(alwaysinsert:=True)
LR.Range.Cells(1, 1) = Range("Q_COLMAT").Value
LR.Range.Cells(1, 2) = Range("Q_COLNOM").Value
LR.Range.Cells(1, 3) = Range("Q_COLPNM").Value
…
End With
End Sub
(En réalité, mon questionnaire comporte 214 questions, les champs de la feuille Questionnaire sont tous nommés et préfixés par Q_).
Je voudrais maintenant pouvoir afficher certains questionnaires déjà enregistrés à partir de la ligne correspondante du tableau de résultats. J’ai réussi, mais en mettant par VBA des formules dans les champs du Questionnaire (du genre Recherchev dans T_Result), mais pas par VBA.
Et je voudrais surtout pouvoir modifier ces enregistrements dans mon tableau (affichage du résultat choisi dans la feuille Questionnaire, modification de certains champs, puis enregistrement de la ligne modifiée à sa place dans le tableau de résultats).
Ce que j’ai tenté (récupération, toujours via des formules de la « bonne ligne » du tableau, et paramètre alwaysinsert à False) ne fonctionne pas.
Le code ci-dessous provoque l’ajout d’une nouvelle ligne vide dans le tableau T_Result, et l’ajout de mes valeurs modifiées plus bas, en dehors du tableau.
Sub Mise_a_jour()
Dim LR As ListRow
Dim I As Integer
Worksheets("Resultats").Activate
Worksheets("Resultats").Range("A3").Select
Range("Q_NumLig").FormulaLocal = "=EQUIV(Q_COLMAT;T_Result[R_COLMAT];0)"
I = Range("Q_NumLig").Value
MsgBox (I)
With Sheets("Resultats").ListObjects("T_Result")
Set LR = Selection.ListObject.ListRows.Update(alwaysinsert:=False)
LR.Range.Cells(I, 1) = Range("Q_COLMAT").Value
Set LR = Selection.ListObject.ListRows.Add(alwaysinsert:=False)
LR.Range.Cells(I, 1) = Range("Q_COLMAT").Value
LR.Range.Cells(I, 2) = Range("Q_COLNOM").Value
LR.Range.Cells(I, 3) = Range("Q_COLPNM").Value
…
End With
End Sub
Quelqu’un aurait-il une idée ?
D’avance merci
Sylvie