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

Résolu/Fermé
Arnaud - 24 oct. 2013 à 17:09
 Arnaud - 30 oct. 2013 à 20:46
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


A voir également:

14 réponses

lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 25/10/2013 à 10:18
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
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
29 oct. 2013 à 02:39
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
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
30 oct. 2013 à 01:46
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
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
25 oct. 2013 à 00:59
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
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
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
28 oct. 2013 à 13:13
Quel est l'erreur que tu a ?
Donne plus de détails sur le non-fonctionnement.
0
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
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
28 oct. 2013 à 17:34
Comment tu fais pour lancer la macro ?
0
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
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
28 oct. 2013 à 18:06
Poste un exemple de ton classeur (sans donnée confidentielle) sur Cjoint.com
Avec la macro comme tu l'a modifié.
0
Voici:

http://cjoint.com/?CJCsXrpjFUu

Mes commentaires dans le code...
0
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
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
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
30 oct. 2013 à 11:21
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
Je vais faire ça!
Merci encore pour tout!!
0