Excel: Reporter une sélection de lignes dans une feuille

Résolu
Bonjour,

je cherche, sous excel, à obtenir ce résultat:
Je remplis plusieurs feuilles avec les mêmes formats de tableaux. Je cherche à ce que toutes les lignes de ces classeurs dont une colonne précise est renseignée soient reportées dans une feuille (et que ces lignes disparaissent lorsque la cellule de cette colonne redevient vide).
Possible? Pas possible? Et si oui comment?
Merci par avance, cette solution me ferait gagner un temps précieux dans mon utilisation d'excel!

Arnaud

14 réponses

  1. Contributeur
    Bonjour,
    Excel peut faire beaucoup plus compliqué que ça :-)
    Ajouter une feuille que tu nomme Recap
    Dans l'éditeur de code (Alt+F11) Ajouter un module : Module1
    Dans ce module, copier le code suivant
    Option Explicit

    Sub Recapitulatif()
    Dim Lig As Long, DerLig As Long, LigEcrire As Long
    Dim Wks As Worksheet
    Application.ScreenUpdating = False
    For Each Wks In Worksheets
    With Wks
    .Cells.ClearContents
    If .Name <> "Recap" Then
    'supposons la cellule avec les x en colonne F (à adapter)
    For Lig = 1 To .Range("F" & Rows.Count).End(xlUp).Row
    If LCase(.Cells(Lig, "F")) = "x" Then
    LigEcrire = LigEcrire + 1
    .Rows(Lig).Copy Sheets("Recap").Rows(LigEcrire)
    'Mettre le nom de la feuille en colonne A
    Sheets("Recap").Cells(LigEcrire, "A").Insert Shift:=xlToRight
    Sheets("Recap").Cells(LigEcrire, "A") = .Name
    End If
    Next Lig
    End If
    End With
    Next
    Sheets("Recap").Select
    End Sub

    A+
    Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
    Note: Je ne répond pas aux MP pour les questions techniques. Et ma boule de cristal est cassée .
    1
    1. Contributeur
      Ouupps, j'ai fait une modif après mes test, c'était le petit problème.
      Sinon y avait rien à faire si ce n'est les lettres à changer comme tu a fait.
      Sub Recapitulatif()
      Dim Lig As Long, DerLig As Long, LigEcrire As Long
      Dim Wks As Worksheet
      Application.ScreenUpdating = False
      Sheets("Recap").Cells.ClearContents
      LigEcrire = 3 'Commencera à la ligne 4
      For Each Wks In Worksheets
      With Wks
      If .Name <> "Recap" Then
      'supposons la cellule avec les x en colonne F: j'ai laissé Fexdprès pour l'exemple
      For Lig = 1 To .Range("F" & Rows.Count).End(xlUp).Row
      If LCase(.Cells(Lig, "F")) = "x" Then
      LigEcrire = LigEcrire + 1
      .Rows(Lig).Copy Sheets("Recap").Rows(LigEcrire)
      'Mettre le nom de la feuille en colonne A: là je vois pas ce qu'il faut faire
      'Y a rien à faire, le nom de la feuille est écrit en colonne A, si tu ne veux pas le nom
      'tu peu supprimer ces deux lignes de code.
      Sheets("Recap").Cells(LigEcrire, "A").Insert Shift:=xlToRight
      Sheets("Recap").Cells(LigEcrire, "A") = .Name
      End If
      Next Lig
      End If
      End With
      Next
      Sheets("Recap").Select
      End Sub
      Comme ça, ça va fonctionner.
      A+
      1
      1. Contributeur
        Mais oui, quand je te disais que c'était simple.. hiiiii
        Sub Recapitulatif_V3()
        Dim Lig As Long, DerLig As Long, LigEcrire As Long, S As String
        Dim Wks As Worksheet
        Application.ScreenUpdating = False
        Sheets("Recap").Cells.ClearContents
        LigEcrire = 3 'Commencera à la ligne 4
        For Each Wks In Worksheets
        With Wks
        If .Name <> "Recap" Then
        'supposons la cellule avec les x en colonne F: j'ai laissé Fexdprès pour l'exemple
        For Lig = 1 To .Range("F" & Rows.Count).End(xlUp).Row
        S = LCase(.Cells(Lig, "F"))
        'C'est ici la sélection des critères
        If S = "x" Or S = "y" Or S = "z" Then
        LigEcrire = LigEcrire + 1
        .Rows(Lig).Copy Sheets("Recap").Rows(LigEcrire)
        'Mettre le nom de la feuille en colonne A: là je vois pas ce qu'il faut faire
        'Y a rien à faire, le nom de la feuille est écrit en colonne A, si tu ne veux pas le nom
        'tu peu supprimer ces deux lignes de code.
        Sheets("Recap").Cells(LigEcrire, "A").Insert Shift:=xlToRight
        Sheets("Recap").Cells(LigEcrire, "A") = .Name
        End If
        Next Lig
        End If
        End With
        Next
        Sheets("Recap").Select
        End Sub
        A+
        1
        1. Contributeur
          Bonjour,
          Quel est la structure de tes tableaux ? toujours le même nombre de lignes ? toujours la même colonne à reporter ?
          Tu veux mettre la colonne en question sur une seule feuille avec les résultat l'un à la suite de l'autre ?
          Explique plus clairement Stp
          A+
          0
          1. Pardon pour le manque de clarté.
            Je recherche seulement un report, mais par ligne: j'ai une dizaine de feuilles dans le même classeur pour suivre des interventions techniques sur différents sites. Ce que je cherche c'est que les lignes qui auraient par exemple un "x" dans une colonne apparaissent sur une onzième feuille afin de suivre les affaires en cours marquées "x" sur les autres feuilles.
            Le nombre de lignes ne sera donc pas le même d'une feuille à l'autre et ce sont bien les lignes que je souhaite reporter pas les colonnes.
            Je pense que c'est un peu ambitieux pour Excel mais comme je sais qu'il y a ici des as, j'essaie quand même :)
            0
            1. Bonjour,
              voilà ce que j'ai fait (et à un moment j'ai forcément faux puisque je là je n'ai pas réussi à faire fonctionner tout ça):

              - Création d'une feuille Recap
              - Insertion du code dans le Module1
              - Je change les deux "F" du code par "H" puisqu'il s'agit de la colonne qui contient les "x"
              - je pense que c'est là que je me trompe: "'Mettre le nom de la feuille en colonne A": que faut-il faire précisément?

              Aujourd'hui j'ai 3 feuilles avec des x dans les colonnes H, que faut-il faire sur ces feuilles pour que les lignes sélectionnées se reportent?

              Merci beaucoup pour cette première réponse, il semble que tout soit possible sur Excel, je ne désespère pas :)
              0
              1. Contributeur
                Quel est l'erreur que tu a ?
                Donne plus de détails sur le non-fonctionnement.
                0
              2. Le principe est bien de faire apparaitre dans la feuille Recap ce qui se situe dans les autres?
                Quand tu dis "Mettre le nom de la feuille en colonne A" que suis-je sensé faire et où, précisément?
                Désolé cela doit te paraitre limpide et évident mais ça ne l'est pas pour moi :/
                0
            2. Contributeur
              Comment tu fais pour lancer la macro ?
              0
              1. J'ai créé un bouton avec la macro dessus, classique. Au point où j'en suis lorsque je la lance toutes les données de toutes les feuilles de mon classeur sont effacées!
                0
                1. Contributeur
                  Poste un exemple de ton classeur (sans donnée confidentielle) sur Cjoint.com
                  Avec la macro comme tu l'a modifié.
                  0
                  1. Voici:

                    http://cjoint.com/?CJCsXrpjFUu

                    Mes commentaires dans le code...
                    0
                    1. Bonjour,

                      excellent merci infiniment!!

                      Oserais-je corser la chose? Je souhaiterais que la macro sélectionne et reporte dans le recap les x mais aussi des y... voire des z. Possible?
                      0
                      1. Aah c'est si facile que ça!?
                        du coup je continue eheh:

                        Dans chaque feuille j'ai une colonne comportant des dates. je souhaite maintenant que la macro classe automatiquement les lignes reportées dans le recap par chronologie de dates de cette colonne lorsque je la lance.

                        Puisque que c'est si facile je n'hésite pas à continuer :-D
                        0
                        1. Contributeur
                          Bon, y a des limites, nous ne faisons pas des appli "clés sur portes"...
                          A toi de travailler maintenant.
                          Tu peu trier le résultat avec la fonction d'Excel Trier.
                          Si tu veux que ce soit par macro sert-toi de l'éditeur de macro.
                          A+
                          0
                          1. Je vais faire ça!
                            Merci encore pour tout!!
                            0