Copier/Coller un bloc de ligne avec exception

JF -  
 JF -
Bonjour,

En fait, je suis présentement assez embêté. J'essaie de faire une macro qui sélection un bloc de ligne en fonction d'une colonne. Il y a 3 blocs de données que je dois ainsi coller ailleurs.

Au départ, je fais un tri sur les données de mon fichier source.

''Sub Préparation_fichier()
Workbooks.Open Filename:="V:\SST\BRI.xls"
Range("A2").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Sort Key1:=Range("Q2"), Order1:=xlDescending, Key2:=Range("E2") _
, Order2:=xlDescending, Header:=xlNo, OrderCustom:=1, MatchCase:=False _
, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:= _
xlSortNormal

End Sub''

Ceci me permet de trier les quelques 13000 lignes en 3 blocs de données. J'obtiens quelque chose qui ressemble à l'exemple

Exemple :
Colonne Q
Ligne 1 CCS
Ligne 2 CCS
Ligne 3 CCS
Ligne 4 IB U
Ligne 5 IB U
Ligne 6 IB U
Ligne 7 IB U
Ligne 8 IB C
Ligne 9 IB C
Ligne 10 IB C

Je veux en venir à sélectionner le bloc de lignes(Colonne A à U) contenant la données CCS à la colonne Q pour ensuite aller la coller dans un autre fichier.

Je n'ai pas de problème avec le code pour le copier coller dans le fichier... Mon problème se situe au niveau de la sélection à copier en fonction d'une valeur.

Quelqu-Un pense être en mesure de m'aider

MERCI énormément!

JF
A voir également:

5 réponses

eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
Bonsoir,

une boucle pour avoir ligne de début et ligne de fin :
Sub test()
    Dim c As Range, ligdeb As Long, ligfin As Long, flag As Boolean
    For Each c In Range([Q2], [Q65536].End(xlUp))
        If c = "CCS" And Not flag Then
                ligdeb = c.Row
                flag = True
        End If
        If c <> "CCS" And flag Then
                ligfin = c.Row - 1
                Exit For
        End If
    Next c
End Sub

eric
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
Re,

une autre façon sans doute plus rapide :
Sub test()
    Dim ligdeb As Long, ligfin As Long
    On Error GoTo fin
    ligfin = Application.WorksheetFunction.Match("CCS", [Q1:Q100])
    ligdeb = ligfin - Application.WorksheetFunction.CountIf([Q:Q], "CCS") + 1
fin:
End Sub

Bien sûr dans les 2 cas il faut traiter l'erreur si CCS est absent
eric
0
JF
 
Merci la loop fonctionne a merveille. Par contre, j'ai un peu de difficulté à la faire «fiter» dans la sélection. Est-ce que je dois y aller par une fonction du genre :

Range("ligdeb:ligfin").Select (ce qui me donne une erreur de range évidemment)

ou il y a une façon plus simple de faire la sélection une fois que les lignes ont été définies
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
Si c'est pour les coller ailleurs pas besoin de .select, ça ralenti pour rien...
Ex:
Range("A" & ligdeb, "U" & ligfin).Copy (Workbooks("Classeur3").Worksheets("Feuil1").[A2])
si tu veux coller dans une position fixe
ou
Range("A" & ligdeb, "U" & ligfin).Copy (Workbooks("Classeur3").Worksheets("Feuil1").[A65536].end(xlup))
si tu veux coller dans la 1ère cellule vide de A
eric
0

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

Posez votre question
JF
 
Merci beaucoup Éric

Ca fonctionne à merveille!
0