Copier coller ligne et les X suivantes dans une autre feuille

Résolu/Fermé
donromanodelasierra Messages postés 7 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 11 décembre 2014 - Modifié par jordane45 le 9/12/2014 à 10:45
donromanodelasierra Messages postés 7 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 11 décembre 2014 - 11 déc. 2014 à 13:55
Bonjour,

Je dispose du tableau suivant :



Je souhaiterais sortir dans une autre feuille la liste des passions



J'arrive actuellement à copier dans une autre feuille, mais j'aimerais copier les 3 lignes suivantes


J'ai le code suivant qui me permet de copier la première ligne des passions
Que rajouter pour avoir les lignes et colonnes comprenant toutes les informations liées aux passions ?

Sub Macro2()

Dim mot1    As String
Sheets.Add
ActiveSheet.Name = "sortie"

Dim entree As Worksheet

Dim cellule As Range

Dim ligne  As Range

Dim sortie_custom  As Range

mot1 = "Passions"

Set entree = Worksheets(2)

Set sortie_custom = Worksheets(1).Range("A1")

For Each ligne In entree.UsedRange.Rows

    For Each cellule In ligne.Cells

         If InStr(cellule.Text, mot1) > 0 Then

             '// On a trouvé le mot dans une cellule de la ligne

             ligne.Copy Destination:=sortie_custom

             Set sortie_custom = sortie_custom.Offset(1)

             '// Pas la peine de continuer à chercher dans cette ligne

             Exit For

         End If

     Next

 Next

End Sub


En fait, je souhaite une ligne de code me permettant de copier les X lignes suivant la ligne trouvée


Merci !

donromanodelasierra
A voir également:

9 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 9/12/2014 à 11:38
Bonjour,


Pour 1 ou plusieurs personnes ?

Si plusieurs personnes, combien il y en a t'il (environ) ?

dans l'attente, d'avance merci

Michel
0
donromanodelasierra Messages postés 7 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 11 décembre 2014
9 déc. 2014 à 11:45
Merci de te pencher sur le sujet.

Pour 1 seule personne.

En fait chaque personne possède son propre document Excel.
Je souhaite donc une macro me permettant d'extraire les passions de chaque personne (donc de chaque doc Excel) dans une autre feuille.

Par contre, le nombre de passions est inconnu et la position de la première ligne des passions est également inconnue.

doncromanodelasierra
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
9 déc. 2014 à 14:08
re,

Un principe avec choix du mot clé possible par macro paramétrée

j'ai mis colonne F un peu au hasard soit 5 "cinéma": à toi de voir

peut ^tre aussi nommée la feuille "sortie" du nom du mot clé

Sub demander_motclé()
Dim mot1 As String
mot1 = "Passion" 'prévioir peut ^tre validation de données dans feuille avec les rubriques
Call detailler(mot1)
End Sub
'------
Sub detailler(mot1)
Dim Ligdeb As Byte, Ligfin As Byte
Dim T_mot

Application.ScreenUpdating = False 'fige l'écran
With ActiveSheet
'ligne où se trouve "passion"
Ligdeb = .Columns("A").Find(mot1, .Range("A1"), xlValues).Row
'ligne avant nouveau mot clé
Ligfin = .Columns("A").Find("*", .Range("A" & Ligdeb), xlValues).Row - 1
'mémorise les détails de la "passion"
T_mot = .Range(.Cells(Ligdeb, "A"), .Cells(Ligfin, "F"))
End With

Sheets.Add
With ActiveSheet
.Name = "sortie" '??? mot1 peut-^tre plus parlant si autre rubrique
'restitue les détails
.Range("A1").Resize(UBound(T_mot), 6) = T_mot
End With
End Sub

0
donromanodelasierra Messages postés 7 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 11 décembre 2014
9 déc. 2014 à 17:43
Super, ton code marche bien !
J'ai pu l'adapter à mes besoins !
Complexifions le problème, si tu veux bien.

Maintenant, imaginons que j'ai 3 personnes :



En utilisant le code suivant (avec adaptation de ta fonction)


Sub Macro1()

'Recherche et copie des donnees voulues


Dim mot1 As String
Dim mot2 As String
Dim mot6 As String

Sheets.Add
ActiveSheet.Name = "rapport_customisé"

Dim entree As Worksheet

Dim cellule As Range

Dim ligne As Range

Dim sortie As Range

mot1 = "prenom"
mot2 = "Enfants"
mot6 = "passions"

Set entree = Worksheets(2)

Set sortie = Worksheets(1).Range("A1")

For Each ligne In entree.UsedRange.Rows

For Each cellule In ligne.Cells

If InStr(cellule.Text, mot1) > 0 Then

'// On a trouvé le mot dans une cellule de la ligne

ligne.Copy Destination:=sortie

Set sortie = sortie.Offset(1)

'// Pas la peine de continuer à chercher dans cette ligne

Exit For

End If

Next

Next

For Each ligne In entree.UsedRange.Rows

For Each cellule In ligne.Cells

If InStr(cellule.Text, mot2) > 0 Then

'// On a trouvé le mot dans une cellule de la ligne

ligne.Copy Destination:=sortie

Set sortie = sortie.Offset(1)

'// Pas la peine de continuer à chercher dans cette ligne

Exit For

End If

Next

Next

For Each ligne In entree.UsedRange.Rows

For Each cellule In ligne.Cells

If InStr(cellule.Text, mot6) > 0 Then

'// On a trouvé le mot dans une cellule de la ligne

Call detailler(mot6)

Set sortie = sortie.Offset(1)

'// Pas la peine de continuer à chercher dans cette ligne

Exit For

End If

Next

Next

'Mise en forme

ActiveSheet.Columns("A:B").EntireColumn.AutoFit

End Sub

'------
Sub detailler(mot6)
Dim Ligdeb As Byte, Ligfin As Byte
Dim T_mot

Application.ScreenUpdating = False 'fige l'écran
With Worksheets(2)
'ligne où se trouve "passion"
Ligdeb = .Columns("A").Find(mot6, .Range("A1"), xlValues).Row
'ligne avant nouveau mot clé
Ligfin = .Columns("A").Find("*", .Range("A" & Ligdeb), xlValues).Row - 1
'mémorise les détails de la "passion"
T_mot = .Range(.Cells(Ligdeb, "A"), .Cells(Ligfin, "J"))
End With


Worksheets(1).Range("A10").Resize(UBound(T_mot), 10) = T_mot

End Sub



J'obtiens cela en sortie :



Outre le fait que tout est découpé (tous les prénoms, tous les enfants, etc...), la case "passions" ne sort que pour le premier prénom ...
Je trouve cela étrange, étant donné que j'utilise la même ligne de code pour les prenoms et pour les passions.

Dois-je créer un nombre de fonctions égal au nombre de personne (qui dépasserons rarement 4) en changeant la position d'écriture (A10 ici) dans la ligne :

Worksheets(1).Range("A10").Resize(UBound(T_mot), 10) = T_mot


Merci d'avance.

donromanodelasierra
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 9/12/2014 à 18:31
Tu es bien gentil mais je t'ai demandé au départ si c'était pour une personne ou plusieurs; tu m'as répondu 1 seule: j'ai donc écrit une bidouille pour ta demande

maintenant c'est plusieurs !!!

Tu sais ce que tu veux ?
0

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

Posez votre question
donromanodelasierra Messages postés 7 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 11 décembre 2014
10 déc. 2014 à 08:40
Désolé, mon support de travail a évolué.

Au moment où j'ai posé la question, je n'imaginais pas que ce cas pouvait arriver.

En fait j'utilise un logiciel qui me sors des résultats qui prennent la forme de l'exemple que j'ai utilisé.

Mon objectif est de faire du post traitement de ces résultats (en sélectionnant les données qui m'intéressent).
Quand j'ai commencé à faire mon code VBA, le cas "plusieurs personnes" ne s'était pas présenté.

Je suis désolé, je sais ce que je veux, mais j'ai malheureusement oublié d'anticiper ce problème.
J'essaierai de ne plus commettre cette erreur.

donromanodelasierra.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
10 déc. 2014 à 11:27
Bonjour,

mets moi au moins une maquette de ce que tu as et de ce que tu veux obtenir
Non par images ce qui m'oblige à refaire ton classeur mais en joignant une pièce

Pour joindre une pièce: mettre le classeur sans données confidentielles en pièce jointe sur https://www.cjoint.com/
et coller le lien proposé dans le message de réponse
Dans l'attente

0
donromanodelasierra Messages postés 7 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 11 décembre 2014
10 déc. 2014 à 14:44
Bonjour,

Ce que j'ai est en feuille 1
Ce que je veux en 2

https://www.cjoint.com/?0LkoW6fdTyD

Actuellement, mon code me sort le tableau de mon message d'hier 17h43

Merci,

donromanodelasierra
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
10 déc. 2014 à 16:12
Ok, merci
Je regarderai demain matin à la fraiche
0
donromanodelasierra Messages postés 7 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 11 décembre 2014 > michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023
10 déc. 2014 à 16:47
Merci beaucoup du temps que tu prends pour m'aider !
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
11 déc. 2014 à 10:39
Bonjour,

ci joint proposition à adapter à ton contexte (nom des feuilles, nombre de colonnes)
restitution en feuille "ccm" pour comparer avec "top du top"

https://www.cjoint.com/?3LlkTcsuB0D

OK ?
0
donromanodelasierra Messages postés 7 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 11 décembre 2014
11 déc. 2014 à 13:55
Parfait !!

Merci beaucoup !
0