Menu

Copier des lignes sur une autre feuille sous conditions [Résolu]

Messages postés
20
Date d'inscription
jeudi 12 juillet 2018
Dernière intervention
20 décembre 2018
- - Dernière réponse : f894009
Messages postés
14066
Date d'inscription
dimanche 25 novembre 2007
Dernière intervention
17 février 2019
- 20 déc. 2018 à 15:09
Bonjour,

Je souhaiterai copier des données sur une autre feuille de mon classeur en incluant les conditions :


S'il trouve dans la colonne A de ma feuille "Source", le chiffre 7, il doit prendre toutes les lignes au dessus (de 1 à 6 inclus) et les copier sur ma feuille "Tranche" en cellule A7. Autre condition :


S'il trouve dans la colonne A de ma feuille "Source", le chiffre 6, il doit prendre toutes les lignes en dessous (de 7 à ....) et les copier sur ma feuille "Tranche" en cellule A23.
Je me mélange les pédales avec les boucles..et conditions..
Merci pour votre aide.
Afficher la suite 

Votre réponse

1 réponse

Messages postés
14066
Date d'inscription
dimanche 25 novembre 2007
Dernière intervention
17 février 2019
1301
0
Merci
Bonjour,

Le chiffre 6 ou 7 n'est qu'une seule fois dans la colonne A??
f894009
Messages postés
14066
Date d'inscription
dimanche 25 novembre 2007
Dernière intervention
17 février 2019
1301 -
Bonjour,

Enfin de compte dans la colonne A, des numeros de 1 a x et toujours les memes ??

Code modifie, sauf subtilite encore ignoree

Sub Tranche()
    Dim Plage As Range

    With Worksheets("Source")
        'recherche valeur 6
        R = 6
        Nb = Application.CountIf(.Columns(1), R)    'Nb fois R
        If Nb > 0 Then
            lig = .Columns(1).Find(R, .Cells(1, 1), , xlWhole).Row  'ligne de R
            dercol = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column 'derniere colonne de la feuille
            If lig < 7 Then LD = 2 Else LD = lig - 6        'si lig<7
            Set Plage = .Range(.Cells(LD, 1), .Cells(lig, dercol))      'mise en memoire de la plage de cellules
            Worksheets("Tranche").Range("A7").Resize(6, dercol) = Plage.Value       'copie plage
        End If
        'recherche valeur 7
        R = 7
        Nb = Application.CountIf(.Columns(1), R)
        If Nb > 0 Then
            lig = .Columns(1).Find(R, .Cells(1, 1), , xlWhole).Row
            derlig = .Range("A" & Rows.Count).End(xlUp).Row     'derniere cellule non vide colonne A
            LF = derlig - lig       'taille plage en "longueur
            dercol = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column
            Set Plage = .Range(.Cells(lig, 1), .Cells(derlig, dercol))
            Worksheets("Tranche").Range("A23").Resize(LF, dercol) = Plage.Value
        End If
    End With
End Sub
anana49
Messages postés
20
Date d'inscription
jeudi 12 juillet 2018
Dernière intervention
20 décembre 2018
-
Merci pour cette modification mais à l'exécution du code, il manque sur la première tranche la ligne où on trouve le "6" et sur la deuxième tranche la dernière ligne où on trouve le "9".
Ci dessous le résultat du code :


Ci-dessous ce que je souhaite obtenir :
f894009
Messages postés
14066
Date d'inscription
dimanche 25 novembre 2007
Dernière intervention
17 février 2019
1301 -
Re,

Ok, pourtant simple a modifier!!

Sub Tranche()
    Dim Plage As Range

    With Worksheets("Source")
        'recherche valeur 6
        R = 6
        Nb = Application.CountIf(.Columns(1), R)    'Nb fois R
        If Nb > 0 Then
            lig = .Columns(1).Find(R, .Cells(1, 1), , xlWhole).Row  'ligne de R
            dercol = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column 'derniere colonne de la feuille
            If lig < 7 Then LD = 2 Else LD = lig - 6        'si lig<7
            Set Plage = .Range(.Cells(LD, 1), .Cells(lig, dercol))      'mise en memoire de la plage de cellules
            Worksheets("Tranche").Range("A7").Resize(7, dercol) = Plage.Value       'copie plage
        End If
        'recherche valeur 7
        R = 7
        Nb = Application.CountIf(.Columns(1), R)
        If Nb > 0 Then
            lig = .Columns(1).Find(R, .Cells(1, 1), , xlWhole).Row
            derlig = .Range("A" & Rows.Count).End(xlUp).Row     'derniere cellule non vide colonne A
            LF = (derlig - lig) + 1     'taille plage en "longueur
            dercol = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column
            Set Plage = .Range(.Cells(lig, 1), .Cells(derlig, dercol))
            Worksheets("Tranche").Range("A23").Resize(LF, dercol) = Plage.Value
        End If
    End With
End Sub
anana49
Messages postés
20
Date d'inscription
jeudi 12 juillet 2018
Dernière intervention
20 décembre 2018
-
Merci beaucoup et je comprends le code maintenant avec tes modifications.. Il était temps !!
Je te souhaite de bonne fêtes de fin d'année.
A très bientôt, ton aide a été très précieuse !
f894009
Messages postés
14066
Date d'inscription
dimanche 25 novembre 2007
Dernière intervention
17 février 2019
1301 -
Bonjour,

Bonnes fetes

Bye….
Commenter la réponse de f894009