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 :

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.

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.

J'ai une question. Pour la partie :

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.

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.

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

Rechercher des sujets similaires à "analyse verbatim"