Copier une plage avec une colonne vide entre

Stien - Modifié par pijaku le 21/08/2015 à 08:36
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
- 20 août 2015 à 11:25
Bonjour,

Ce que je cherche n'est pas très compliqué mais ma formulation doit-être bizarre car je n'ai rien trouvé.

Je souhaite tout simplement copier une plage de longueur (lignes) variable, mon problèmes et que celle-ci possède une colonne de libre. En macro automatique cela me donne :

Sub Macro1()
'
' Macro1 Macro
'

'
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
End Sub



Cependant la triple répétition de "Range(Selection, Selection.End(xlToRight)).Select" ne donne pas le même résultat dès que je lance ma macro, elle ne copie que le premier block.

Une idée simple et ingénieuse ?

3 réponses

ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Modifié par ucfoutu le 19/08/2015 à 18:17
Bonjour,
1) Je déplace cette discussion vers le sous-forum (VBA) adéquat.
Veux-tu bien prendre dorénavant ce soin, s'il te plait ?

2) évite de travailler à coups de Select, Selection, etc ...
Sous VBA, on travaille directement avec les objets Excel.
Tu veux dans ton cas déterminer une plage ===>>
Une plage se définit par l'adresse de sa première cellule et celle de sa dernière cellule (ex Range("B1:D4") pour la plage B1:D4 - ce que l'on peut également exprimer ainsi : range(cells(1,2),cells(4,4)) -)

EDIT :
pour ton information :
- la dernière colonne remplie de la ligne 2 (exemple) est la colonne n° :
Cells(2, Columns.Count).End(xlToLeft).Column

- la dernière ligne remplie de la colonne C (exemple) est la ligne n° :
Range("C" & Rows.count).end(xlup).row

le reste est évident, non ?


________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
Hello,

Yes pardon pour le post au mauvais endroit, je pense que je suis aller un peu trop vite.

Je débute un peu dans la macro du coup je galère un peu pour associer des lignes de codes, le .Select me permet de bien comprendre ce que je fais à chaque fois. Cependant je traite des fichiers avec des centaines de milliers de lignes donc tout les conseils pour alléger ma macro sont les bienvenues.

Du coup je comprends bien tes deux lignes, cependant je n'arrive pas à les mettre ensemble afin de sélectionner/Copier la plage allant de la dernière colonne remplie de la ligne 2 jusqu'à la dernière ligne remplie de la colonne K. (Exemple : sélectionner une plage de A2 à K1637 sachant que 1637 est ma dernière ligne remplie et K ma dernière colonne. Je veux que ma macro sélectionne ma plage suivant cette dernière ligne/colonne remplie).

Donc ma ligne devrait ressemble plus ou moins à ça je pense :

Range("Cells(2, Columns.Count).End(xlToLeft).Column:Range("C" & Rows.Count).End(xlUp).Row")

Mais pour le coup j'ai direct une erreur de compilation " séparateur de liste ou )"
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Modifié par ucfoutu le 20/08/2015 à 15:16
Est-il vraiment si difficile de se concentrer un peu (si peu) ?
Tiens ===>> je vais "décomposer (bien que non nécessaire). Si là, non plus, tu ne "suis" pas, j'abdique ===>>>
Dim sercol As Long, derlig As Long, laplage As Range
dercol = Cells(2, Columns.Count).End(xlToLeft).Column
derlig = Range("C" & Rows.Count).End(xlUp).Row
Set laplage = Range(Cells(2, 3), Cells(derlig, dercol))
MsgBox "la plage à traiter (à copier, donc) est la plage " & laplage.Address


EDIT :
ce qui donne, sans même décomposer : ===>>>
MsgBox "la plage à traiter (à copier, donc) est la plage " & Range(Cells(2, 3), Cells(Range("C" & Rows.Count).End(xlUp).Row, Cells(2, Columns.Count).End(xlToLeft).Column)).Address


EDIT2 : je te parlais par ailleurs de "concentration"...
Regarde le code que tu avais écrit : il contient un nombre ... impair ... de parenthèses !

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0