Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Selectionner une ligne jusqu'à dernière colonne

maroon

XLDnaute Junior
Bonjour!

Avec la macro que je fais j'aimerais mettre en couleur certaines lignes: des lignes vides qui séparent certaines parties du tableau. Je connais le numéro des lignes mais comme le nombre de colonnes varient je détermine le numéro de la dernière colonne avec le code:

VB:
ActiveCell.SpecialCells(xlLastCell).Column

Donc si je souhaite sélectionner la ligne vide numéro 15 par exemple jusqu'à la dernière colonne du tableau comment je dois écrire le code? Pour ensuite lui affecter une mise en forme.

Je n'arrive pas à trouver la syntaxe en utilisant le morceau de code que j'ai mis juste au-dessus.

Merci d'avance si quelqu'un peut m'aider!
 
Solution
Bonjour,

A mon avis, si "derlig" est un entier, il n'y a pas de raison que "i" n'en soit pas également un.

Concernant le calcul de ce "derlig", je ne suis pas certain que ce soit bon et que tu trouves réellement la vraie dernière ligne de ton tableau...
J'ai l'impression que ça ne fonctionne que s'il n'y a rien en-dessous du tableau.

La dernière colonne du tableau doit être la même pour toutes les lignes, donc autant la calculer au départ une fois pour toute et la mettre dans une variable.

Tu peux même définir une "plage", d'une ligne de hauteur, allant de la colonne A à la dernière colonne du tableau, que tu peux en suite décaler avec un offset pour colorier les lignes qui doivent l'être.

Tes deux "For" imbriqués font la...

patricktoulon

XLDnaute Barbatruc
re
ben c'est pas grave je distribuais pas

vous confirmez que cela fonctionne

VB:
'************************************************************************************
'              FONCTION FIND(LAST) ROW,COLUMN,CELL ON <<<defined range>>>
'Author:patricktoulon
'version beta test
'date version 29/03/2020
'************************************************************************************
Function UsedrangeOnRangeDef(tableau) As Range
    Dim lig&, col&, cel1 As Range, cel2 As Range
    With tableau
        Set cel1 = .Cells(1)
        col = .Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
        lig = .Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        Set cel2 = Cells(lig, col)
        Set UsedrangeOnRangeDef = .Parent.Range(cel1, cel2)
    End With
End Function
'sub de test
Sub testusedRangedef()
    Dim plage As Range
    Set plage = [E4:I16]
    MsgBox UsedrangeOnRangeDef(plage).Address
End Sub
'
'
'cherche la derniere colonne utilisée  dans une plage
Function LastColumnUsedOnRangeDef(plage, Optional ByVal intra As Boolean = False)
    With plage'.Resize(plage.Rows.Count)
        LastColumnUsedOnRangeDef = .Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column - IIf(intra, plage.Column - 1, 0)
    End With
End Function
'sub de test
Sub testLastCol()
    Dim plage As Range
    Set plage = [E4:I16]
    MsgBox LastColumnUsedOnRangeDef(plage, True)
End Sub
'
'
'cherche la derniere ligne utilisée  dans une plage
Function LastRowUsedOnRangeDef(ByRef plage, Optional ByVal intra As Boolean = False)
    LastRowUsedOnRangeDef = plage.Resize(plage.Rows.Count + 1).Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row - IIf(intra, plage.Row - 1, 0)
End Function
'sub de test
Sub testLastRow()
    Dim plage As Range
    Set plage = [E4:I16]
    MsgBox LastRowUsedOnRangeDef(plage, True)
End Sub
'
'
'cherche la derniere cellule utilisée  dans une plage
Function LastCellUsedOnRangeDef(plage)
    With plage
        Set LastCellUsedOnRangeDef = .Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious)
    End With
End Function
'sub de test
Sub testLastcell()
    Dim plage As Range
    Set plage = [E4:I16]
    MsgBox LastCellUsedOnRangeDef(plage).Address
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

>•patricktoulon
Comme on peut lire sur de nombreux sites dédiés à Excel
Find posera un problème dans certains cas
(Un site au hasard : R. De Bruin)

PS: Cette problématique "Last Row, Last Column" a été abordée jusqu'à plus soif sur le web (depuis qu'il existe)
 

Discussions similaires

Réponses
6
Affichages
378
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…