Bonjour à tous je vous expose mon problème,
J'ai créé un programme qui trace un rectangle à l'aide des bordures des cellules en fonction de la longueur et de la largeur que l'opérateur lui donne.
Voici à quoi il ressemble : (en passant si quelqu'un trouve le moyen de le raccourcir je suis preneur mais c'est pas vraiment important)
Jusqu'ici tout va bien, mais je veux que ce rectangle soit centré verticalement et horizontalement.
Vu que j'utilise les bordures de case, je vais le centré à une case près.
Donc j'ai pas vraiment trouvé d'autres solutions que de tester chaque case de la "zone de travail" de droite à gauche (et de haut en bas plus tard pour center verticalement) pour trouver une case ou la bordure gauche est active (lorsque que je veux savoir où les la partie droite du rectangle, on fera donc l'inverse lorsque qu'il s'agira de la partie gauche).
ça ressemble à :
Le soucis ici c'est que je ne sais pas comment faire pour détecter que le code a testé toutes les cellules d'une ligne pour passer à la ligne suivante. Et je cherche un moyen aussi un moyen que lorsque q'une bordure à été détectée de savoir le nombre de cases entre la case détectée et le bordure de la zone de travail.
Du coup je compte faire le même type de teste a droite, et de comparer les deux écarts. Je j'utiliserais "Range" pour déplacer d'une case le rectangle en fonction du test précédent et créé une boucle avec le teste qui compte l'écart de distance.
Je ne sais pas du tout si c'est clair, ou si ma manière de faire est bonne. Je suis ouvert a tout changement d'approche. Je joins un fichier Excel pour que ce soit un peu plus clair.
PS : la zone de travail dans l'Excel c'est de la cellule A1 à CM48
Merci d'avance pour votre aide.
J'ai créé un programme qui trace un rectangle à l'aide des bordures des cellules en fonction de la longueur et de la largeur que l'opérateur lui donne.
Voici à quoi il ressemble : (en passant si quelqu'un trouve le moyen de le raccourcir je suis preneur mais c'est pas vraiment important)
Code:
Sub TailleRect()
Dim Longueur As Integer
Dim Largeur As Integer
Cells.Select
Selection.ColumnWidth = 0.83
Selection.RowHeight = 7.5
Range("A1").Select
Longueur = InputBox("Longueur?", "donner la longueur en mm")
Largeur = InputBox("Longueur?", "donner la largeur en mm")
If Longueur And Largeurt > 0 Then
Range(Cells(5, 5), Cells((LargeurToit + 5), LongueurToit + 5)).Select
With Selection.BorderAround
Selection.Borders.Weight = 3
Selection.Borders.Color = RGB(225, 0, 0)
End With
Range(Cells(5, 5), Cells((Largeur + 5), Longueur + 5)).Select
With Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
End With
With Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Selection.Borders(xlInsideVertical).LineStyle = xlNone
End With
Else
MsgBox "Valeur en mm strictement positive!"
End If
End Sub
Jusqu'ici tout va bien, mais je veux que ce rectangle soit centré verticalement et horizontalement.
Vu que j'utilise les bordures de case, je vais le centré à une case près.
Donc j'ai pas vraiment trouvé d'autres solutions que de tester chaque case de la "zone de travail" de droite à gauche (et de haut en bas plus tard pour center verticalement) pour trouver une case ou la bordure gauche est active (lorsque que je veux savoir où les la partie droite du rectangle, on fera donc l'inverse lorsque qu'il s'agira de la partie gauche).
ça ressemble à :
VB:
While
Activecell.Borders.(xlEdgetLeft)LineStyle <= xLinstyleNone
ActiveCell.Offset (0;1).Select
Le soucis ici c'est que je ne sais pas comment faire pour détecter que le code a testé toutes les cellules d'une ligne pour passer à la ligne suivante. Et je cherche un moyen aussi un moyen que lorsque q'une bordure à été détectée de savoir le nombre de cases entre la case détectée et le bordure de la zone de travail.
Du coup je compte faire le même type de teste a droite, et de comparer les deux écarts. Je j'utiliserais "Range" pour déplacer d'une case le rectangle en fonction du test précédent et créé une boucle avec le teste qui compte l'écart de distance.
Je ne sais pas du tout si c'est clair, ou si ma manière de faire est bonne. Je suis ouvert a tout changement d'approche. Je joins un fichier Excel pour que ce soit un peu plus clair.
PS : la zone de travail dans l'Excel c'est de la cellule A1 à CM48
Merci d'avance pour votre aide.
Pièces jointes
Dernière édition: