Analyse de verbatim sous Excel
Bonjour,
J'ai extrait une enquête depuis un logiciel et je me retrouve avec un fichier possédant plusieurs réponses, dont les fameuses ouvertes (verbatim).
Ma question est la suivante : Quelle serait votre technique pour faire une analyse de verbatim sous Excel, que mettriez-vous en avant ?
Merci d'avance
(Je n'ai pas joint de fichier car je veux savoir quelle serait la/les manières utiles pour en tirer quelque chose).
Bonjour,
J'ai sous la main une macro que j'utilisais pour ce genre de travail :
Sub RechercheMots()
On Error Resume Next
Dim i1 As Integer, i2 As Integer, TabSource() As Variant, TabCible() As String, ColRep As Range
With Sheets("Liste")
'Sélection de la plage à transformer
Set ColRep = Application.InputBox("Selectionner la plage de réponses à traiter (1 colonne à la fois)", Type:=8)
ReDim TabCible(1 To ColRep.Count)
Application.ScreenUpdating = False 'Désactive affichage
Application.Calculation = xlCalculationManual 'Désactive recalcul auto des formules Excel à chaque modification
'Chargement des données dans des variables tableau
For i1 = 1 To ColRep.Count
If Not IsEmpty(ColRep(i1, 1)) Then TabCible(i1) = LCase(SupprimerAccents(ColRep(i1, 1).Value)) 'Retire accents et majuscules
Next i1
TabSource = .Range("A2:A" & .Cells(Rows.Count, 1).End(xlUp).Row).Value
'Boucles pour parcourir chaque tableau
For i1 = LBound(TabCible) To UBound(TabCible)
If TabCible(i1) <> "" Then
For i2 = LBound(TabSource) To UBound(TabSource)
If InStr(1, TabCible(i1), TabSource(i2, 1), 1) > 0 Then
If IsEmpty(.Range("C" & i1 + 1)) Then .Range("C" & i1 + 1) = TabSource(i2, 1) Else .Range("C" & i1 + 1) = .Range("C" & i1 + 1) & ", " & TabSource(i2, 1)
End If
Next i2
End If
Next i1
End With
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
Function SupprimerAccents(ByVal sChaine As String) As String
Dim sTmp As String, i As Long, p As Long
Const sCarAccent As String = "ÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïñòóôõöùúûüýÿ"
Const sCarSansAccent As String = "AAAAACEEEEIIIINOOOOOUUUUYaaaaaaceeeeiiiinooooouuuuyy"
sTmp = sChaine
For i = 1 To Len(sTmp)
p = InStr(sCarAccent, Mid(sTmp, i, 1))
If p > 0 Then Mid$(sTmp, i, 1) = Mid$(sCarSansAccent, p, 1)
Next i
SupprimerAccents = sTmp
End Function
Le principe est qu'elle se base sur une liste de mots à repérer, en colonne A d'une feuille nommée "Liste". Ces mots sont à écrire en minuscules sans caractères spéciaux ni accents.
Ton questionnaires doit se présenter sous forme de tableau, avec en colonne les questions et en lignes les réponses (1 ligne = 1 répondant). A l'exécution, la macro te demande de sélectionner la plage (colonne) correspondant à la question à traiter. Elle place ensuite les mots clés trouvés en feuille liste, en respectant l'ordre des lignes de ton questionnaire.
Bonjour @Pedro22,
Merci pour ta macro qui va m'être utile.
J'ai une question. Pour la partie :
Je dois donc renseigner une liste de "mots clés" à analyser ? Si oui dans la macro directement ou ailleurs? Dsl je n'ai pas saisi cette partie de la réponse.Le principe est qu'elle se base sur une liste de mots à repérer, en colonne A d'une feuille nommée "Liste". Ces mots sont à écrire en minuscules sans caractères spéciaux ni accents.
J'ai une question. Pour la partie :
Je dois donc renseigner une liste de "mots clés" à analyser ? Si oui dans la macro directement ou ailleurs? Dsl je n'ai pas saisi cette partie de la réponse.Le principe est qu'elle se base sur une liste de mots à repérer, en colonne A d'une feuille nommée "Liste". Ces mots sont à écrire en minuscules sans caractères spéciaux ni accents.
Désolé si je ne suis pas clair, c'est pas évident à décrire de façon concise !
Il faut que tu créés une feuille vierge nommée "Liste". Dans cette feuille, tu inscris en colonne A une série de mots-clés à rechercher.
La macro te les écrit dans cette même feuille, en face de chaque réponse dans laquelle ils ont été trouvé. Exemple, le répondant n°50 présente le mot clé "Toto", tu auras "toto" écrit en ligne 50 de la feuille liste, colonne C de mémoire. Si plusieurs mots-clés sont repérés dans une même réponse, ils seront ajoutés à la suite et séparés par une virgule en feuille "Liste".
Je vais essayer de commenter davantage la macro, pour te permettre d'une part de mieux comprendre son fonctionnement, et d'autre part de gagner en autonomie pour l'adapter (si besoin).
Sub RechercheMots()
On Error Resume Next
'Déclaration des variables utilisées dans le code
Dim i1 As Integer, i2 As Integer, TabSource() As Variant, TabCible() As String, ColRep As Range
With Sheets("Liste") 'Tout objet commençant par "." se rapporte à cette feuille
'Sélection de la plage à transformer
'La ligne ci-dessous affiche une boite de dialogue pour sélectionner la plage, on peut aussi la définir directement dans le code (Set ColRep = Sheets("Questionnaire").Range("D2:D30"))
Set ColRep = Application.InputBox("Selectionner la plage de réponses à traiter (1 colonne à la fois)", Type:=8)
ReDim TabCible(1 To ColRep.Count)
Application.ScreenUpdating = False 'Désactive affichage
Application.Calculation = xlCalculationManual 'Désactive recalcul auto des formules Excel à chaque modification
'Chargement des données dans des variables tableau
For i1 = 1 To ColRep.Count 'Parcourir les réponses
If Not IsEmpty(ColRep(i1, 1)) Then TabCible(i1) = LCase(SupprimerAccents(ColRep(i1, 1).Value)) 'Retire accents et majuscules
Next i1
'Charger la liste des mots clés dans une variable tableau
TabSource = .Range("A2:A" & .Cells(Rows.Count, 1).End(xlUp).Row).Value
'Boucles pour parcourir chaque tableau
For i1 = LBound(TabCible) To UBound(TabCible)
If TabCible(i1) <> "" Then 'Si il y a une réponse
For i2 = LBound(TabSource) To UBound(TabSource) 'Parcourir les mots clés
If InStr(1, TabCible(i1), TabSource(i2, 1), 1) > 0 Then 'Si correspondance
'Ajouter le mot clé en colonne C de la feuille "Liste", à la même ligne que la réponse traitée
If IsEmpty(.Range("C" & i1 + 1)) Then .Range("C" & i1 + 1) = TabSource(i2, 1) Else .Range("C" & i1 + 1) = .Range("C" & i1 + 1) & ", " & TabSource(i2, 1)
End If
Next i2
End If
Next i1
End With
Application.ScreenUpdating = True 'Rétablir l'affichage
Application.Calculation = xlCalculationAutomatic 'Rétablir le calcul auto des formules Excel
End Sub
Je vais essayer de commenter davantage la macro, pour te permettre d'une part de mieux comprendre son fonctionnement, et d'autre part de gagner en autonomie pour l'adapter (si besoin).
Sub RechercheMots() On Error Resume Next 'Déclaration des variables utilisées dans le code Dim i1 As Integer, i2 As Integer, TabSource() As Variant, TabCible() As String, ColRep As Range With Sheets("Liste") 'Tout objet commençant par "." se rapporte à cette feuille 'Sélection de la plage à transformer 'La ligne ci-dessous affiche une boite de dialogue pour sélectionner la plage, on peut aussi la définir directement dans le code (Set ColRep = Sheets("Questionnaire").Range("D2:D30")) Set ColRep = Application.InputBox("Selectionner la plage de réponses à traiter (1 colonne à la fois)", Type:=8) ReDim TabCible(1 To ColRep.Count) Application.ScreenUpdating = False 'Désactive affichage Application.Calculation = xlCalculationManual 'Désactive recalcul auto des formules Excel à chaque modification 'Chargement des données dans des variables tableau For i1 = 1 To ColRep.Count 'Parcourir les réponses If Not IsEmpty(ColRep(i1, 1)) Then TabCible(i1) = LCase(SupprimerAccents(ColRep(i1, 1).Value)) 'Retire accents et majuscules Next i1 'Charger la liste des mots clés dans une variable tableau TabSource = .Range("A2:A" & .Cells(Rows.Count, 1).End(xlUp).Row).Value 'Boucles pour parcourir chaque tableau For i1 = LBound(TabCible) To UBound(TabCible) If TabCible(i1) <> "" Then 'Si il y a une réponse For i2 = LBound(TabSource) To UBound(TabSource) 'Parcourir les mots clés If InStr(1, TabCible(i1), TabSource(i2, 1), 1) > 0 Then 'Si correspondance 'Ajouter le mot clé en colonne C de la feuille "Liste", à la même ligne que la réponse traitée If IsEmpty(.Range("C" & i1 + 1)) Then .Range("C" & i1 + 1) = TabSource(i2, 1) Else .Range("C" & i1 + 1) = .Range("C" & i1 + 1) & ", " & TabSource(i2, 1) End If Next i2 End If Next i1 End With Application.ScreenUpdating = True 'Rétablir l'affichage Application.Calculation = xlCalculationAutomatic 'Rétablir le calcul auto des formules Excel End Sub
Merci @Pedro22 pour ta réponse