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...

maroon

XLDnaute Junior
Oui dsl j'aurait dû le faire avant.
C'est un exemple avec des valeurs fictives car je travaille avec des données "confidentielles"...
Sur le fichier ce sont les lignes vides en verts que je voudrait mettre en couleur, en sachant que le tableau est généré avec une macro et peu contenir beaucoup de colonnes. Les séparations permettrons de le rendre bcp plus lisible.
 

Pièces jointes

  • TAB_EX_1.xlsm
    31.3 KB · Affichages: 16

TooFatBoy

XLDnaute Barbatruc
En revanche dans mon cas la ligne 15 est toujours vide, ce sont les lignes au-dessus et en dessous qui ont du contenu. Alors je cherchais à prendre en compte la dernière colonne renseignée du tableau (pas de la ligne 15 qui est toujours vide) de façon à ce que la mise en couleur de la ligne 15 aille jusqu'à la fin du tableau (dont le nombre de colonnes varie).
Je n'ai fait que reprendre ce que tu avais écrit au départ et le "corriger".


Toutefois, ce que @jmfmarques veut te montrer dans le message #8, c'est que ça peut ne pas donner le bon résultat.

Exemple :
Imaginons que tu aies un tableau avec une ligne qui comporte plus de colonnes que les autres lignes.
Si tu utilises ce que j'ai écrit en #6, tu vas obtenir un résultat pour la dernière colonne (par exemple : colonne AH).
Si tu supprimes cette ligne, le résultat de #6 restera le même (colonne "AH") bien que la dernière colonne utilisée ne soit plus la même (inférieure à "AH") puisque la ligne supprimée contenait plus de colonnes que les autres lignes.

C'est quelque chose que l'on constate aussi avant/après enregistrement d'un fichier.
 

TooFatBoy

XLDnaute Barbatruc
Dans ton fichier exemple, toutes les colonnes contenant des données ont un en-tête.
Tu peux donc peut-être te baser sur la ligne d'en-tête pour trouver la plage de cellules.
Genre : Range(Cells(15, 1), Cells(15, Range("A1").End(xlToRight).Column))

Dans ton fichier exemple, quand une ligne est vide, il n'y a aucune donnée dans la cellule de la première colonne, et quand il n'y a aucune donnée dans la cellule de la première colonne alors la ligne est vide.
Tu peux donc peut-être te baser sur cela pour utiliser une simple MFC pour colorier tes lignes vides.
 

Staple1600

XLDnaute Barbatruc
Re, Bonjour Marcel32

Ah c'est tout de suite mieux avec un exemple
Ci dessous la version (amusons nous pendant le confinemet)
Macro à lancer plusieurs fois (pour voir avec quoi je m'amuse)
;)
VB:
Sub Colorier_Lignes_Vides()
Dim X
Couleurs = Array(vbRed, vbMagenta, vbGreen, vbBlack, vbYellow, vbCyan, vbOrange)
Randomize 1600
X = Application.RandBetween(0, 6)
[Indicateurs].Resize(, ActiveSheet.UsedRange.Columns.Count).SpecialCells(4).Interior.Color = Couleurs(X)
End Sub
 

jmfmarques

XLDnaute Accro
Re-bonjour

Je ne veux surtout pas jouer le trouble-fête, mais j'insiste sur la nécessité de se méfier de UsedRange
Sa propriété Columns.count ne retournera pas forcément le nombre de colonnes de la colonne A jusqu'à la dernière utilisée.
Faites-en l'expérience : une feuille Excel dont les colonnes A à E sont laissées vides et "toto" écrit quelque part en colonne F. Ragardez maintenant ce que retourne UsedRange.columns.count. :)
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour jmfmarques

•>jmfmarques
Se méfier de Yersinia Pestis, soit.
Une fois notre vigilance chevillée dans nos Cellules, tu pallies comment?

PS: Moi, j'ai ouvert le fichier joint par maroon, le code que je propose fonctionne très bien sur celui-ci.
;)
 

jmfmarques

XLDnaute Accro
Re_bonjour, Staple
Une fois notre vigilance chevillée dans nos Cellules, tu pallies comment?
Je sors ma vieille machine à calculer (un boulier).
Plus sérieusement : --->>
J'ai la "mauvaise" habitude de ne donner aucune chance au UsedRange de me jouer le moindre tour --->> formules ajoutées au fur et à mesure (par VBA) et non à l'avance - kif-kif pour tous les formatages, etc ...
Moyennant quoi, le corona-Usedrange ne risque pas de me jouer des tours.

Ah oui, me diras-tu : mais quid si l'utilisateur s'amuse à formater plus loin puis effacer le formatage ? J'ai là également la parade, mais elle est très longue à expliquer.
Je pense que tu en trouveras un exemple bientôt : un outil en cours d'observation et en voie de validation définitive par un médecin. Je le déposerai ensuite sur XLD car il pourrait servir à des membres pour eux-mêmes ou (et surtout) leur famille.
 

patricktoulon

XLDnaute Barbatruc
re
de tout facon sauf si le demandeur c'est mal exprimer usedrange n'a rien a foutre la je rejoins un peu jmfmarques sur ce point

et surtout je cite le demandeur
Alors je cherchais à prendre en compte la dernière colonne renseignée du tableau (pas de la ligne 15 qui est toujours vide)

alors parle de tableau et non de feuille ce qui veut dire que l’examen doit être fait dans le tableau et non sur la feuille(usedrange)

un exemple sur un tableau bien défini
VB:
Sub test1() 'en arriere
Set montableau = Range("C6:g25")
With montableau
MsgBox .Find("*", after:=.Cells(.Cells.Count), SearchDirection:=xlPrevious, SearchOrder:=xlByColumns).Address
End With
End Sub
 

Discussions similaires

Réponses
6
Affichages
340

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa