Extraire des informations d'un onglet vers un autre

Bonjour le forum,

Je souhaiterai pouvoir extraire la ou les informations correspondant à une personne grâce à son « ID » unique et évitant les erreurs en cas d'homonymes. Cela me permettrait d’avoir dans un nouvel onglet un tableau récapitulatif de toutes les formations que cette personne a faites et il peut y en avoir beaucoup.

J’ai essayé d’adapter une macro « double clic » mais elle bug. Donc si quelqu’un peu soit la corriger ou soit en créer une nouvelle pour obtenir mon résultat je suis preneur.

Je prends un exemple pour essayer d’être plus clair. Dans l’onglet « Liste AF à compléter par DATES » du fichier exemple joint si je double clic sur l’ID « 88257492 » qui est en colonne N ligne 18, il faudrait que la macro me créée un onglet avec le nom de l’ID (bien sûr si l’onglet existe déjà il est supprimé pour être re-créé avec les dernières infos) où je devrais trouver toutes les infos des lignes A à U mais uniquement pour la personne ayant l'ID « 88257492 » dans ce cas là.

Je ne sais pas si j’ai été clair.

Cordialement

9extraction.xlsm (41.85 Ko)

Bonjour,

à tester,

ps/ j'ai enlevé les cellules fusionnées sur l'onglet "Liste AF à compléter par DATES"

Sub copy_filtre()
Dim sh1, sh2
Dim LastRw&

Set sh1 = Sheets("Liste AF à compléter par DATES")
Set sh2 = Sheets("ModèleOrg")
LastRw = sh2.Cells(Rows.Count, 1).End(xlUp).Row + 1
x = 88257492

With sh1.Range("A2:U2")
    If Not sh1.FilterMode Then
      .AutoFilter
    End If
    .AutoFilter Field:=14, Criteria1:="=" & x
    .Range("_FilterDatabase").SpecialCells(xlCellTypeVisible).Copy sh2.Range("A" & LastRw)
    .AutoFilter
End With

Set sh1 = Nothing
Set sh2 = Nothing
End Sub

Bonjour,

Merci pour ton travail super rapide mais ce n'est pas tout à fait ce que je recherche enfin je pense car la macro bug (cf ligne de commande ci-dessous) et je ne peux pas voir le résultat final. De plus l'ID "88257492" que j'ai pris est UNIQUEMENT pour l'exemple. Donc peut-être que dans macro un "inputmsgbox" pourrait être mis pour choisir quel ID extraire car là je n'ai pas de choix avec "x = 88257492".

Tu dis "ps/ j'ai enlevé les cellules fusionnées sur l'onglet "Liste AF à compléter par DATES". Les fusions dans les cellules me sont nécessaires pour avoir plus de clarté dans la lecture de mon tableau donc il faut que j'ai toujours ce fusionnage. Si tu dois les enlever il faut pouvoir les remettre dès que la macro a fini son travail.

erreur

Cordialement.

Bonjour,

Autre proposition sans filtrage

Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim sh As Worksheet
    Dim id_personnes As Range, cell As Range, cell1 As Range
    Dim i As Integer

    Application.DisplayAlerts = False
    Cancel = True
    If Target.Count <> 1 Then Exit Sub

    Set id_personnes = Me.UsedRange.Columns("N")
    If Not Intersect(Target, id_personnes) Is Nothing Then
        '// création de l'onglet personne et suppression éventuelle du précédent
        Feuil2.Copy after:=Me: Set sh = Me.Next
        On Error Resume Next
        sh.Name = Target: If Err.Number <> 0 Then Sheets(Target.Value).Delete: sh.Name = Target
        On Error GoTo 0

        '// copie des infos personne dans l'onglet personne
        Set cell = id_personnes.Find(Target, lookat:=xlWhole)
        If Not cell Is Nothing Then
            Set cell1 = cell
            Do
                With sh
                    i = .Columns("A").Find("").Row  '1ère ligne vide dans l'onglet de la personne
                    .Rows(i).Value = Me.Rows(cell.Row).Value
                End With
                Set cell = id_personnes.Find(Target, after:=cell, lookat:=xlWhole)
            Loop Until cell.Address = cell1.Address
        End If

        sh.Visible = xlSheetVisible: sh.Activate
    End If

    Application.DisplayAlerts = True

End Sub
5extraction1.xlsm (45.18 Ko)

Salut,

Super ta deuxième proposition. Elle fonctionne impec mais il faudrait (et c'est là difficulté des cellules fusionnées) que je puisse voir pour chaque ligne extraite les infos des colonnes B, C, D, F, G, H, I et plus particulièrement celles des colonnes F, G et H qui me donnent le lieu, le date de début et la date de fin.

Quand l'Id de la personne ne se trouve pas au rang 1 (n°1) de la colonne J ces infos n'apparaissent pas.

Merci encore pour ton travail.

Cordialement

Bonsoir,

ci-joint ajustement pour les cellules fusionnées des colonnes B à I.

Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim sh As Worksheet
    Dim id_personnes As Range, cell As Range, cell1 As Range
    Dim i As Integer, i1 As Integer, i0 As Integer, j As Integer

    Application.DisplayAlerts = False
    Cancel = True
    If Target.Count <> 1 Then Exit Sub

    Set id_personnes = Me.UsedRange.Columns("N")
    If Not Intersect(Target, id_personnes) Is Nothing Then
        '// création de l'onglet personne et suppression éventuelle du précédent
        Feuil2.Copy after:=Me: Set sh = Me.Next
        On Error Resume Next
        sh.Name = Target: If Err.Number <> 0 Then Sheets(Target.Value).Delete: sh.Name = Target
        On Error GoTo 0

        '// copie des infos personne dans l'onglet personne
        Set cell = id_personnes.Find(Target, lookat:=xlWhole)
        If Not cell Is Nothing Then
            Set cell1 = cell
            Do
                i1 = cell.Row                                'ligne sélectionnée dans liste AF
                With sh
                    i = .Columns("N").Find("").Row          '1ère ligne vide dans l'onglet de la personne
                    .Rows(i).Value = Me.Rows(i1).Value
                    For j = 2 To 8
                        i0 = Me.Cells(i1, j).MergeArea.Row  '1ère ligne des lignes fusionnées de la ligne sélectionnée
                        .Cells(i, j).Value = Me.Cells(i0, j).Value
                    Next j
                End With
                Set cell = id_personnes.Find(Target, after:=cell, lookat:=xlWhole)
            Loop Until cell.Address = cell1.Address
        End If

        sh.Visible = xlSheetVisible: sh.Activate
    End If

    Application.DisplayAlerts = True

End Sub
9extraction2.xlsm (46.29 Ko)

Super thev ta macro, elle me donne le résultat attendu. Je voudrais savoir comment je peux adapter cette macro qui encore une fois est nickel pour :

- ne copier uniquement que les colonne A à U dans l'onglet qui est créer car le fichier original comporte des info de la colonne A à BA ;

- et comment je peux avoir un message d'alerte lorsque je fais le double clic pour me demander si je veux bien extraire les donner de cette ID et/ou pour me dire que je ne suis pas dans la bonne colonne des ID. En effet un double clic peut être fait par erreur et je me retrouverai avec un onglet pas souhaité.

Sinon encore merci à toi et à sabV pour sa participation. Je mets ma question en résolu et si tu peux m'apporter les deux modificatifs àma question ça ne sera que du bonus.

Cordialement.

Bonsoir,

ci-jointe nouvelle version incorporant les modifications demandées

11extraction3.xlsm (46.91 Ko)

Impec tu es un vrai chef. Merci pour la maro et le temps que tu as dû prendre.

Je reviens vers toi thev juste pour savoir comment faire au-lieu d'impacter à chaque fois un nouvel onglet avec le nom de l'ID choisi en créer un unique appelé par exemple "extraction" qui serait à chaque fois remis à jour avec les infos correspondantes aux ID sur lesquels j'aurai double cliqué.

Je viens de m'apercevoir que mon fichier devient très vite illisible avec les onglets qui se créent à force de vouloir faire des extractions d'information sur des personnes.

Je sais j'aurai pu le dire dès le départ mais c'est en travaillant dessus que je me suis aperçu de ce "léger" petit problème. Donc désolé et si je peux te solliciter de nouveau je te dis merci par avance.

Cordialement.

comment faire au-lieu d'impacter à chaque fois un nouvel onglet avec le nom de l'ID choisi en créer un unique appelé par exemple "extraction" qui serait à chaque fois remis à jour avec les infos correspondantes aux ID sur lesquels j'aurai double cliqué.

Pas bien compliqué. ci-jointe nouvelle version.

4extraction4.xlsm (47.18 Ko)

Effectivement ce n'est pas bien compliqué surtout c'est ce que j'avais fait mais je ne peux pas expliquer pourquoi avec moi j'ai eu une fois l'onglet "extraction" puis ensuite il me créée de les nouveaux onglets avec les noms des ID.

Enfin là ça marche et c'est très bien. Encore merci et vive Excel et le VBA

Cordialement.

Salut le forum,

La macro que m'a fait thev que l'on trouve dans le fichier "EXTRACTION4" de son dernier message fonctionne sans problème. Cependant je voudrais savoir s'il est possible que les données qui vont impacter l'onglet "extraction" reprenne les couleurs des lignes qui peuvent être verte, rouge, bleue...en fonction des critères dans la colonne "S".

J'ai essayé de modifier la ligne de commande "Columns("A:U").Rows(i).Value = Me.Columns("A:U").Rows(i1).Value" dans la partie "'// copie des infos personne dans l'onglet personne" par "Columns("A:U").Rows(i).Copy = Me.Columns("A:U").Rows(i1).Value" mais ça aurait été trop simple car ça ne marche pas.

thev va peut-être me dire "pas bien compliqué" mais pour moi c'est compliqué

Cordialement.

Bonsoir,

ceci serait mieux :

Me.Columns("A:U").Rows(i1).Copy .Cells(i, "A")

ci-jointe nouvelle version

5extraction5.xlsm (47.41 Ko)

Super et encore merci.

Rechercher des sujets similaires à "extraire informations onglet"