Copier/Coller un bloc de ligne avec exception
JF
-
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
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:
- Copier/Coller un bloc de ligne avec exception
- Historique copier coller - Guide
- Partage de photos en ligne - Guide
- Copier coller pdf - Guide
- Style d'écriture a copier coller - Guide
- Historique copier coller windows - Accueil - Informatique
5 réponses
Bonsoir,
une boucle pour avoir ligne de début et ligne de fin :
eric
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
Re,
une autre façon sans doute plus rapide :
Bien sûr dans les 2 cas il faut traiter l'erreur si CCS est absent
eric
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
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
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
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question