OVH Cloud OVH Cloud

Encadrement de la ligne active : problème VBA

24 réponses
Avatar
géjoun.
Bonjour,

En faisant une recherche dans les archives, j'ai trouvé la possibilité
d'encadrer horizontalement la ligne active (ce qui permet de facilement
repérer les valeurs qui sont sur cette ligne); seulement la macro "encadre"
la ligne ET aussi toutes les séparations verticales de celle-ci, hors
j'aimerai que cette fonction ne m'encadre simplement que le haut et le bas
de la ligne, et pas toutes les "séparations verticales"; (je sais pas si je
suis trés clair, je voudrais que ça m'affiche seulement comme si on
sélectionne une ligne sur toute la longueur, et qu'on active seulement une
bordure haute et une basse); alors, est ce possible?

D'autre part, j'ai aussi remarqué en utilisant cette macro, qu'à l'ouverture
suivante, la dernière ligne sur laquelle se trouvait la cellule sélectionnée
se retrouve encadrée telle que le permet la macro, et ça, c'est pas terrible
lorsqu'on a déja des bordures de prédéfinies, alors est ce qu'il est pas
possible d'avoir cette fonction sans cette inconvénient?

Voici le code de la macro:


Private lngAvant As Long
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If lngAvant <> 0 Then
If Target.Row <> lngAvant Then
Range("a" & lngAvant).EntireRow.Style = "normal"
End If
End If
lngAvant = Target.Row
Target.EntireRow.Borders.Color = vbRed
End Sub


Merci à tous!

--

Géjoun.
dam-mailBLOCAGE@ifrance.com
····························································
Enlevez le BLOCAGE pour répondre...

10 réponses

1 2 3
Avatar
géjoun.
Gejoun a insinué :
c'est le fait que c'est un forum 'microsoft' qui provoque
cet effet "poyon"?


tout doux Gejoun !!!!
l'aide complete je te l'ai fournie gratuitement et cela
sans en enlever un once de paternité à gaëtan qui est un
habitué de ce forum .
il fallait cliquer là :
http://www.polykromy.com/nl/nl6/nl6.html#as4


La générosité de gaêtan de mettre son code à disposition
des utilisateurs avancés est accompagnée par la mise à
disposition de ce même code (et beaucoup d'autres) sous
forme de produit utilisable directement par
l'utilisateur "lambda hermétique aux finesses de la
programation individuelle", il est normal que ce travail
mérite rétribution.
il n'y avait ni dans ce message, ni dans le précédent, ni
dans la façon de procéder d'incitation "ostentatoire" à
un quelconque bizness à "poyon".
** d'ailleurs, comme le fait remarquer Patrick, j'ose
croire que tu respecteras toi-même, la dernière ligne ???
;-))))

==============================================
Vi vi vi! Je vais la respecter la dernière ligne, pas de problème (voir mon
post plus bas)...

Et le fait que j'ai parlé de 'poyon' vient du fait que je suis allé voir les
2 liens que tu m'as gratieusement indiqué ;-) mais en fait, son code, il en
fait trop pour ce que je cherche; et du coup, je me vois pas acheter quelque
chose qui me va pas; et je préfère voir avec quelqu'un du forum qui
m'indiquera quoi modifier dans le code qu'on m'a donné pour réaliser ma
fonction. C'était juste pour ça...

Bon, je vais me re-répéter en bas pour être sur que quelqu'un passe pas à
côté de mon message!
Et merci de ton aide!

--

Géjoun.

····························································
Enlevez le BLOCAGE pour répondre...

Avatar
géjoun.
Il n'est pas interdit de remercier Gaëtan MOURMANT
;-)))


Ca c'est sur, parce qu'elle est vraiment bien cette fonction, alors MERCI
Gaëtan...Sauf que... (et oui, ya toujours un sauf :o) :

C'est pas exactement ce que je cherche comme fonction, mais doit pas y avoir
beaucoup à modifier pour que ça m'aille.
Le tableau pour lequel je recherche cette fonction ne se lit qu'en
horizontal, donc, c'est pas que le repére vertical me gêne, mais si il y
était pas, ce serait aussi bien.
De plus, les repères s'arrêtent sur la cellule active, et je voudrais qu'ils
filent sur la longueur de la ligne, c'est à dire que la cellule active ne
soit pas "l'angle" des 2 repères, mais "l'intersection" des repères.

Pour résumer: son code me correspond, sauf que je voudrais que ca me fasse
ça seulement sur ma ligne, et sur toute la ligne, en horizontal, et que les
2 traits hauts et bas qui encadrent la ligne sur laquelle se trouve la
cellule active ne s'arrête pas à la cellule active justement, mais que ces
traits continuent jusqu'au bout. Comme ça:

_____________________________________________________________
_________________________|cellule active|__________________________

Ca doit bien être envisageable ça? non?

Merci encore!

--

Géjoun.

····························································
Enlevez le BLOCAGE pour répondre...

Avatar
Patrick Bastard
Ca doit bien être envisageable ça? non?

Donc, voila.


'D'après la macro créée par Gaëtan Mourmant
'Contact :
'et laborieusement adaptée par P. Bastard
'pour entourer d'un rectangle horizontal toute la ligne d'une sélection.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

'*** Définition des variables ***
'Hauteur de la cellule active
h = ActiveCell.Height
'Hauteur entre la cellule active et la première ligne
t = ActiveCell.Top

'*** Suppression du rectangle précédent ***
'On utilise ici On Error Resume Next, qui permet de tester
' l'erreur de création d'un rectangle en double portant le même nom.
On Error Resume Next
ActiveSheet.Shapes("RectangleH").Delete

'*** Dessin du rectangle ***
' Ajoute le rectangle en fonction des coordonnées précédemment calculées.
' Le rectangle est transparent, de grosseur 2 et de couleur rouge (2)
' On ne peut pas l'imprimer.
ActiveSheet.Shapes.AddShape(msoShapeRectangle, 0, t, 100000, h).Name "RectangleH"
With ActiveSheet.Shapes("RectangleH")
.Fill.Visible = msoFalse
.Fill.Transparency = 0#
.Line.Weight = 2#
.Line.ForeColor.SchemeColor = 2
.PrintObject = False
End With
End Sub

Pour la petite histoire,
Merci à Géjoun qui m'a permis de comprendre, et d'adapter ce code, car je
n'en connais pas beaucoup plus que lui en VBA.

--
==================================== P. Bastard.
Pour me contacter, remplacez "Chez" par @ dans l'adresse

Une foule de conseils utiles sur le site de Misange :
http://www.excelabo.net
Avatar
AV
Et si tu mettais ça dans le module de la feuille :

Private Sub Worksheet_SelectionChange(ByVal zz As Range)
zz.EntireRow.Select
zz.Activate
End Sub

AV
Avatar
géjoun.
"AV" a écrit dans le message de
news:
Private Sub Worksheet_SelectionChange(ByVal zz As Range)
zz.EntireRow.Select
zz.Activate
End Sub

AV



Ben pour le coup, j'ai eu 2 réponses qui me vont pour le prix d'une!!!!
Alors un GRAAAAAAAND merci à Patrick Bastard, à AV, ainsi qu'à tous les
autres!
A+!

Avatar
géjoun.
Ben pour le coup, j'ai eu 2 réponses qui me vont pour le prix d'une!!!!
Alors un GRAAAAAAAND merci à Patrick Bastard, à AV, ainsi qu'à tous les
autres!
A+!


Raaaaaaaaaaaaaah! :-(
J'ai parlé trop vite!!!
La solution d'AV marche impeccable, rien à dire, mais comme je suis assez
chiant par nature, je préfère celle de Patrick Bastard qui "m'encadre" la
ligne active "et là, c'est le drame!"
En effet, le code me donne bien le résultat que je recherchais, mais lorsque
j'imprime ma feuille, le cadre de la ligne active (obtenu par le code)
s'imprime aussi!!! :-(((
C'est pas possible de lui dire "imprimer=NON" dans le code? de façon à ce
que l'imprimante ne le prenne pas en compte?

Encore merci (pour la dernière fois j'espère).

--

Géjoun.

····························································
Enlevez le BLOCAGE pour répondre...

Avatar
AV
C'est pas possible de lui dire "imprimer=NON" dans le code? de façon à ce
que l'imprimante ne le prenne pas en compte?


Dans le module de ThisWorkbook :
Private Sub Workbook_BeforePrint(Cancel As Boolean)
On Error Resume Next
ActiveSheet.Shapes("RectangleH").Delete
End Sub

Avis perso :
Ces "trucs" alourdissent les traitements sans apporter un plus significatif !
On va dire que c'est juste pour faire joli ;-)

AV

Avatar
sabatier
en toute logique, plutôt pour l'avant-dernière, géjoun, non?
jps

géjoun. a écrit:


Encore merci (pour la dernière fois j'espère).



Avatar
géjoun.
"AV" a écrit dans le message de
news:%2397v$
C'est pas possible de lui dire "imprimer=NON" dans le code? de façon à
ce


que l'imprimante ne le prenne pas en compte?


Dans le module de ThisWorkbook :
Private Sub Workbook_BeforePrint(Cancel As Boolean)
On Error Resume Next
ActiveSheet.Shapes("RectangleH").Delete
End Sub

Avis perso :
Ces "trucs" alourdissent les traitements sans apporter un plus
significatif !

On va dire que c'est juste pour faire joli ;-)


================================================
"Dans le module ThisWorkbook"....Il est où ce module?
Parce que j'essaie bien de comprendre comment ça marche, et avec les
explications que j'ai eu, j'arrive bien à piger le fonctionnement de
quelques trucs, mais là, je trouve pas où placer ce bout de code...

Et par rapport à ton avis perso, tu parles de quoi exactement quand tu dis
que ça alourdis les traitements:
- de ce code pour encadrer la ligne par rapport à celui que tu m'as donné?
- du code pour pas que le cadre s'imprime?
- ou de ces genres de codes tout simplement?

Et est ce que le tien est plus "léger" que celui là?
Autrement, pour l'alléger, est ce que ça ne serait pas mieux une macro qui
tracerait juste un seul trait sous la celllule active (sans l'encadrer)? Ca
changerait quelque chose?

Et pour moi, je trouve ça plus pratique que joli quand on à des longs
tableaux avec des petites lignes...(je comprends pas qu'il n'y ai pas une
option dans ce style déja intégrée à excel...).

Je sais, ça fait beaucoup de questions, mais j'essaie de comprendre un peu
le truc.

--

Géjoun.

····························································
Enlevez le BLOCAGE pour répondre...


Avatar
sabatier
je m'immisce, AV est parti boire l'apéro...
pour trouver le module ThisWorkbook, géjoun, tu ouvres ton classeur puis
tu fais Alt + F11 et dans l'arborescence à gauche du VBE qui vient de
s'afficher, tu répères ton classeur, tu vois qu'il y a après le détail
des feuilles d'icelui une ligne ThisWorkbook : tu double-cliques
là-dessus et dans la fenêtre/module qui apparaît à droite tu écris la
proc que t'a donnée AV ; tu refermes VBE, enregistre ton classeur et
quand tu l'ouvriras à nouveau et voudra l'imprimer, tu verras que la
ligne encadrée ne sera pas sur le document imprimé...
alles unter Kontroll, nun???
jps

géjoun. a écrit:
"AV" a écrit dans le message de
news:%2397v$

C'est pas possible de lui dire "imprimer=NON" dans le code? de façon à


ce


que l'imprimante ne le prenne pas en compte?


Dans le module de ThisWorkbook :
Private Sub Workbook_BeforePrint(Cancel As Boolean)
On Error Resume Next
ActiveSheet.Shapes("RectangleH").Delete
End Sub

Avis perso :
Ces "trucs" alourdissent les traitements sans apporter un plus


significatif !

On va dire que c'est juste pour faire joli ;-)



================================================ >
"Dans le module ThisWorkbook"....Il est où ce module?
Parce que j'essaie bien de comprendre comment ça marche, et avec les
explications que j'ai eu, j'arrive bien à piger le fonctionnement de
quelques trucs, mais là, je trouve pas où placer ce bout de code...

Et par rapport à ton avis perso, tu parles de quoi exactement quand tu dis
que ça alourdis les traitements:
- de ce code pour encadrer la ligne par rapport à celui que tu m'as donné?
- du code pour pas que le cadre s'imprime?
- ou de ces genres de codes tout simplement?

Et est ce que le tien est plus "léger" que celui là?
Autrement, pour l'alléger, est ce que ça ne serait pas mieux une macro qui
tracerait juste un seul trait sous la celllule active (sans l'encadrer)? Ca
changerait quelque chose?

Et pour moi, je trouve ça plus pratique que joli quand on à des longs
tableaux avec des petites lignes...(je comprends pas qu'il n'y ai pas une
option dans ce style déja intégrée à excel...).

Je sais, ça fait beaucoup de questions, mais j'essaie de comprendre un peu
le truc.





1 2 3