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
Configuration: Windows XP Internet Explorer 6.0

5 réponses

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
  2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
  3. 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
  4. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. JF
     
    Merci beaucoup Éric

    Ca fonctionne à merveille!
    0