Selectionner un range avec des colonnes de differentes longueur

Résolu
annyeong56 Messages postés 25 Date d'inscription jeudi 24 mars 2011 Statut Membre Dernière intervention 6 avril 2011 - 31 mars 2011 à 17:44
annyeong56 Messages postés 25 Date d'inscription jeudi 24 mars 2011 Statut Membre Dernière intervention 6 avril 2011 - 4 avril 2011 à 15:14
bonjour,

j'ai un ensemble de colonnes (disons toutes les colonnes de A à K par exemple).
chaque colonne peut avoir un taille différente en nombre de lignes.
A -> 5 lignes
B-> 8 lignes
etc...
F -> 3 lignes
K -> 5 lignes
(B est la plus longue admettons)

je souhaite sélectionner l'ensemble pour le copier/coller dans un autre classeur.
c'est a dire que je souhaite détecter quelle colonne est la plus longue, pour ensuite copier le gros range constitué de l'ensemble des colonnes de A à K, et des lignes de 3 à la ligne de la colonne la plus longue.

ca veut dire dans cet exemple qu'on sélectionnerait le tout de A3 à K8. (je suppose que les 2 premières lignes sont faites d'identifiants des colonnes)
ensuite je copie/colle ca dans mon autre classeur.

vous avez une idée comment faire ?
j'ai une idée, en scannant chaque colonne pour connaitre sa dernière ligne qui contient des données, mais ca va etre trop lourd...

Merci !

2 réponses

foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
31 mars 2011 à 18:50
Bonjour,

Voici un petit algo qui fait ce travail.

Const maxColonneIndex2003 = 255
Const maxColonneIndex2007 = 16384

Public Function GetMaxRow() As Long

    Dim colIndex As Long
    Dim ligneIndex As Long
    
    'Première cellule d'en-tete du tableau
    colIndex = 1
    ligneIndex = 1
       
    'Tant que l'index de colonne n'est pas la dernière colonne du
    'tableau excel (à adapter en fonction de la version d'Excel ou
    'si le tableau contient d'autre colonnes sur sa droite)
    While colIndex <> maxColonneIndex2007
    
        'Recherche la ligne la plus basse de la colonne en cours et saute une ligne
        ligneIndex = Feuil1.Cells(ligneIndex, colIndex).End(xlDown).Row + 1
        
        'Recherche la première colonne non vide sur la droite
        '(Donc test s'il existe une colonne avec plus de lignes)
        colIndex = Feuil1.Cells(ligneIndex, colIndex).End(xlToRight).Column
        
    Wend
        
    GetMaxRow = ligneIndex - 1

End Function


Par contre c'est un peut freestyle, je ne l'ai pas trop trop testé, donc tenez moi au courant
3
annyeong56 Messages postés 25 Date d'inscription jeudi 24 mars 2011 Statut Membre Dernière intervention 6 avril 2011
4 avril 2011 à 15:14
ca marche nikel ! merci
j'avais pas pensé a cette algo. bien vu ;-)
0
Rejoignez-nous