Recopier lignes selon critères

Bonjour

j'ai grand besoin de vos lumières.

j'ai besoin de recopier des valeurs selon un critère. Explications:

j'ai environ 120 personnes qui ont répondu plusieurs fois à un questionnaire. J'ai besoin de regrouper les réponses de chaque personne dans un onglet à son nom. L'individu IND01 doit voir toutes ses réponses recopier dans un onglet intitulé IND01

Ce même questionnaire va recevoir ultérieurement les réponses d'autres personnes et il faudra que je recommence la même manœuvre. C'est pourquoi j'ai besoin que cette tache soit automatisée.

Merci de ce que vous pourrez me trouver comme solutions

Cordialement

13essai.xlsx (8.75 Ko)

Bonjour le forum,

Essaie ceci :

Option Explicit
Sub test()
Dim a, e, dico As Object, wsName As String
    Application.ScreenUpdating = False
    Set dico = CreateObject("Scripting.Dictionary")
    With Sheets("Feuil1")
        With .Range("a1").CurrentRegion
            a = .Columns(1).Offset(1).Resize(.Rows.Count - 1).Value
            For Each e In a
                If Not dico.exists(e) Then
                    dico(e) = Empty
                    wsName = e
                    If Not Evaluate("isref('" & wsName & "'!a1)") Then
                        Sheets.Add(after:=Sheets(Sheets.Count)).Name = wsName
                    End If
                    Sheets(wsName).Cells.Delete
                    .AutoFilter 1, e
                    .SpecialCells(xlCellTypeVisible).Copy Sheets(wsName).Cells(1)
                    .AutoFilter
                End If
            Next
        End With
    End With
    Set dico = Nothing
    Application.ScreenUpdating = True
End Sub

klin89

Bonsoir. Merci et respect. Cela fonctionne parfaitement. Cela engendre encore beaucoup de travail qu'il va falloir automatiser et je me demande s'il n'y a pas encore une solution plus rapide. Explications :

Je dois effectuer la moyenne des valeurs pour chaque participant (240 participants) et chaque item (78 items) .

Est ce que sur le même onglet ou dans un autre on peut calculer la moyenne pour chaque item et pour chaque participant voir fichier joint

Merci de vos lumières

Peut être faut-il que j'ouvre une autre conversation pour ce nouveau problème ?

3essai-5.xlsx (8.89 Ko)

Re pbpb76,

Si tu veux les moyennes en fin de tableaux.

Option Explicit
Sub test()
Dim a, e, dico As Object, wsName As String
    Application.ScreenUpdating = False
    Set dico = CreateObject("Scripting.Dictionary")
    With Sheets("Feuil1")
        With .Range("a1").CurrentRegion
            a = .Columns(1).Offset(1).Resize(.Rows.Count - 1).Value
            For Each e In a
                If Not dico.exists(e) Then
                    dico(e) = Empty
                    wsName = e
                    If Not Evaluate("isref('" & wsName & "'!a1)") Then
                        Sheets.Add(after:=Sheets(Sheets.Count)).Name = wsName
                    End If
                    Sheets(wsName).Cells.Delete
                    .AutoFilter 1, e
                    .SpecialCells(xlCellTypeVisible).Copy Sheets(wsName).Cells(1)
                     With Sheets(wsName).Cells(1).CurrentRegion
                         With .Rows(.Rows.Count + 1)
                             .Cells(1) = "Moyennne"
                             With .Cells(2).Resize(, .Columns.Count - 1)
                                 .Formula = "=average(r2c:r[-1]c)"
                                 .NumberFormat = "0.00"
                             End With
                             .Interior.ColorIndex = 19
                             .BorderAround Weight:=xlThin
                         End With
                         With .Rows(1)
                            .Interior.ColorIndex = 43
                            .BorderAround Weight:=xlThin
                         End With
                         With .Resize(.Rows.Count + 1)
                             .Font.Name = "calibri"
                             .Font.Size = "10"
                             .VerticalAlignment = xlCenter
                             .Borders(xlInsideVertical).Weight = xlThin
                             .BorderAround Weight:=xlThin
                         End With
                     End With
                    .AutoFilter
                End If
            Next
        End With
    End With
    Set dico = Nothing
    Application.ScreenUpdating = True
End Sub

klin89

Gloire à toi. Tu n'imagines pas le bénéfice en terme d'heures de travail que tu me fais gagner. Merci encore

Re pbpb76,

Si tu veux les moyennes en fin de tableaux.

Option Explicit
Sub test()
Dim a, e, dico As Object, wsName As String
    Application.ScreenUpdating = False
    Set dico = CreateObject("Scripting.Dictionary")
    With Sheets("Feuil1")
        With .Range("a1").CurrentRegion
            a = .Columns(1).Offset(1).Resize(.Rows.Count - 1).Value
            For Each e In a
                If Not dico.exists(e) Then
                    dico(e) = Empty
                    wsName = e
                    If Not Evaluate("isref('" & wsName & "'!a1)") Then
                        Sheets.Add(after:=Sheets(Sheets.Count)).Name = wsName
                    End If
                    Sheets(wsName).Cells.Delete
                    .AutoFilter 1, e
                    .SpecialCells(xlCellTypeVisible).Copy Sheets(wsName).Cells(1)
                     With Sheets(wsName).Cells(1).CurrentRegion
                         With .Rows(.Rows.Count + 1)
                             .Cells(1) = "Moyennne"
                             With .Cells(2).Resize(, .Columns.Count - 1)
                                 .Formula = "=average(r2c:r[-1]c)"
                                 .NumberFormat = "0.00"
                             End With
                             .Interior.ColorIndex = 19
                             .BorderAround Weight:=xlThin
                         End With
                         With .Rows(1)
                            .Interior.ColorIndex = 43
                            .BorderAround Weight:=xlThin
                         End With
                         With .Resize(.Rows.Count + 1)
                             .Font.Name = "calibri"
                             .Font.Size = "10"
                             .VerticalAlignment = xlCenter
                             .Borders(xlInsideVertical).Weight = xlThin
                             .BorderAround Weight:=xlThin
                         End With
                     End With
                    .AutoFilter
                End If
            Next
        End With
    End With
    Set dico = Nothing
    Application.ScreenUpdating = True
End Sub

klin89

Bonjour

Si Klin89 a encore des miracles de disponible avec ses codes VBA, je suis preneur. J'ai présenté à l'équipe pédagogique les possibilités offertes par le code VBA écrit par Klin 89. Succès évidemment. Cela a suscité de nouvelles demandes complémentaires.

  • Les commentaires récoltés auprès des évaluateurs doivent faire l'objet d'un retour auprès des personnes évaluées. Ils doivent donc être rassemblés (Concatener dans excel ?)
  • Il ne faut envoyer les évaluations que si un nombre suffisant d'évaluations a été effectué. Il faut donc compter le nombre d'évaluation par personne évaluée.
  • Ces données doivent être ensuite disposées dans un tableur Google Sheets afin d'être envoyé par publipostage avec Yamm dans Gmail. Il faut donc que toutes ces données soient rassemblées sur une seule feuille
Est ce possible? Merci en tout cas de votre implication

Exemple en fichier joint

Cordialement

Précisions je vais avoir à traiter environ 200 évaluées sur 72 items

je ne sais plus si j'ai mis le fichier montrant ce que je souhaiterais au final. Je vous le reme

7essai-5.xlsm (16.28 Ko)

ts

Rechercher des sujets similaires à "recopier lignes criteres"