Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
Je travaille sur un fichier qui me permet, en sélectionnant des cellules par un "cliquer glisser" de les recouvrir d'un rectangle. Je souhaiterais que le nombre de cellules recouvertes soit affiché.
Non...mon rectangle se fait correctement...je veux juste pouvoir afficher en colonne A le nombre de cellules sous chaque rectangle. En gros..pour chaque ligne, combien de cellules sont recouvertes
je ne comprend pas bien ce que tu veux compter; le nombre de cellules selectionnées pour faire ton rectangle?
dans ce cas
1) dans le code de la feuille 1
VB:
PrivateSub Worksheet_SelectionChange(ByVal Target As Range)IfNot Intersect(Target,Me.Range("C:DB"))IsNothingThen
UserForm1.Show
EndIfEndSub
2) dans le code du USF
VB:
PrivateSub UserForm_Initialize()Me.TextBox1.Value = Selection.Cells.Count
EndSubPrivateSub CommandButton1_Click()Dim info AsString
info =Me.TextBox1.Value
' Fermer l'UserFormMe.Hide
' Afficher l'information dans un rectangleDim rng As Range
Set rng = Selection
Dim ws As Worksheet
Set ws = rng.Worksheet
Dim rectLeft AsDoubleDim rectTop AsDoubleDim rectWidth AsDoubleDim rectHeight AsDouble
rectLeft = rng.Left
rectTop = rng.Top
rectWidth = rng.Width
rectHeight = rng.Height
Dim rect As Shape
Set rect = ws.Shapes.AddShape(msoShapeRoundedRectangle, rectLeft, rectTop, rectWidth, rectHeight)With rect
.LockAspectRatio = msoFalse
.TextFrame.Characters.Text = info
.TextFrame.HorizontalAlignment = xlCenter
.TextFrame.VerticalAlignment = xlCenter
.TextFrame.Characters.Font.Size =12.Fill.Transparency =0.3EndWith
Unload MeEndSub
je ne comprend pas bien ce que tu veux compter; le nombre de cellules selectionnées pour faire ton rectangle?
dans ce cas
1) dans le code de la feuille 1
VB:
PrivateSub Worksheet_SelectionChange(ByVal Target As Range)IfNot Intersect(Target,Me.Range("C:DB"))IsNothingThen
UserForm1.Show
EndIfEndSub
2) dans le code du USF
VB:
PrivateSub UserForm_Initialize()Me.TextBox1.Value = Selection.Cells.Count
EndSubPrivateSub CommandButton1_Click()Dim info AsString
info =Me.TextBox1.Value
' Fermer l'UserFormMe.Hide
' Afficher l'information dans un rectangleDim rng As Range
Set rng = Selection
Dim ws As Worksheet
Set ws = rng.Worksheet
Dim rectLeft AsDoubleDim rectTop AsDoubleDim rectWidth AsDoubleDim rectHeight AsDouble
rectLeft = rng.Left
rectTop = rng.Top
rectWidth = rng.Width
rectHeight = rng.Height
Dim rect As Shape
Set rect = ws.Shapes.AddShape(msoShapeRoundedRectangle, rectLeft, rectTop, rectWidth, rectHeight)With rect
.LockAspectRatio = msoFalse
.TextFrame.Characters.Text = info
.TextFrame.HorizontalAlignment = xlCenter
.TextFrame.VerticalAlignment = xlCenter
.TextFrame.Characters.Font.Size =12.Fill.Transparency =0.3EndWith
Unload MeEndSub
Non...mon rectangle se fait correctement...je veux juste pouvoir afficher en colonne A le nombre de cellules sous chaque rectangle. En gros..pour chaque ligne, combien de cellules sont recouvertes
Non...mon rectangle se fait correctement...je veux juste pouvoir afficher en colonne A le nombre de cellules sous chaque rectangle. En gros..pour chaque ligne, combien de cellules sont recouvertes
Double-cliquer sur la cellule A1 en jaune.
Le code dans le module de la feuille "Feuil1" :
VB:
PrivateSub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel AsBoolean)Dim shp, larg&, i
If Target.Address <> Range("a1").Address ThenExitSub
Cancel =True
Columns("a:a").ClearContents
ForEach shp In ActiveSheet.Shapes
If shp.AutoShapeType = msoShapeRoundedRectangle Then
Cells(shp.TopLeftCell.Row,"a")=1+ shp.BottomRightCell.Column - shp.TopLeftCell.Column
EndIfNext shp
EndSub
nota :
Des rectangles sont mal dessiné. Certain débordent "de très peu" dans la cellule à gauche et ce n'est guère visible. Même phénomène à droite. Il s'agit des rectangles à fond rouge. Les résultats sont donc faux pour ces rectangles.
Il y a moyen de corriger avec quelques lignes supplémentaires. Par exemple on calcule la portion de la forme qui est dans la cellule de gauche. Si cette portion est inférieur à 10% du largeur de cette cellule de gauche, on diminue le résultat du code ci-dessus de -1. Idem pour la cellule à droite.
Vous pouvez aussi corriger la macro qui crée les formes afin d'assurer le non débordement des formes à gauche et à droite.
Mais il est temps d'aller au lit, on verra tout cela un autre jour.
Double-cliquer sur la cellule A1 en jaune.
Le code dans le module de la feuille "Feuil1" :
VB:
PrivateSub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel AsBoolean)Dim shp, larg&, i
If Target.Address <> Range("a1").Address ThenExitSub
Cancel =True
Columns("a:a").ClearContents
ForEach shp In ActiveSheet.Shapes
If shp.AutoShapeType = msoShapeRoundedRectangle Then
Cells(shp.TopLeftCell.Row,"a")=1+ shp.BottomRightCell.Column - shp.TopLeftCell.Column
EndIfNext shp
EndSub
nota :
Des rectangles sont mal dessiné. Certain débordent "de très peu" dans la cellule à gauche et ce n'est guère visible. Même phénomène à droite. Il s'agit des rectangles à fond rouge. Les résultats sont donc faux pour ces rectangles.
Il y a moyen de corriger avec quelques lignes supplémentaires. Par exemple on calcule la portion de la forme qui est dans la cellule de gauche. Si cette portion est inférieur à 10% du largeur de cette cellule de gauche, on diminue le résultat du code ci-dessus de -1. Idem pour la cellule à droite.
Vous pouvez aussi corriger la macro qui crée les formes afin d'assurer le non débordement des formes à gauche et à droite.
Mais il est temps d'aller au lit, on verra tout cela un autre jour.
Merci pour cette piste qui me semble très intéressante. Cependant, pour quoi à la ligne "Cells(shp.TopLeftCell.Row, "a") = 1 + shp.BottomRightCell.Column - shp.TopLeftCell.Column" est-il indiqué '1 + shp....' EN supprimant ce '1 +' ça semble correspondre réellement aux cellules recouvertes. Non ?
Du coup, j'ai modifié le fichier avec les indications données plus haut. J'ai essyé de déclenché les calculs avec worsheet_change... rien n.'y fait. Ca éviterait, en effet, d'avoir à double cliquer sur la cellule A1
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD