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

Résolu
Arnaud -  
 Arnaud -
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. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  2. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  3. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  4. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Arnaud
     
    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
  7. Arnaud
     
    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. lermite222 Messages postés 9042 Statut Contributeur 1 199
       
      Quel est l'erreur que tu a ?
      Donne plus de détails sur le non-fonctionnement.
      0
    2. Arnaud
       
      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
  8. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Comment tu fais pour lancer la macro ?
    0
  9. Arnaud
     
    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
  10. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Poste un exemple de ton classeur (sans donnée confidentielle) sur Cjoint.com
    Avec la macro comme tu l'a modifié.
    0
  11. Arnaud
     
    Voici:

    http://cjoint.com/?CJCsXrpjFUu

    Mes commentaires dans le code...
    0
  12. Arnaud
     
    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
  13. Arnaud
     
    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
  14. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  15. Arnaud
     
    Je vais faire ça!
    Merci encore pour tout!!
    0