Sectionner une plage variable

Matta

XLDnaute Nouveau
Bonjour,

Je cherche à sélection une plage qui est généré par un autre programme qu'un des membres ma fait précédemment.

Dans cette plage je voudrais faire une boucle pour tracer un certain nombre de ligne que l’opérateur choisit ces ligne seront a une certaine distance de la ligne supérieure du rectangle et devra être indiqué au préalable.

C'est le code pour générer le rectangle variable :

VB:
Sub CentrerRectangle()
Const plage = "A1:CM48"
Dim hori&, verti&, cellHori&, cellVerti&, rgRectangle, s$
  Cells.Borders.LineStyle = xlLineStyleNone
  s = "Dimension horizontale en nombre de case?" & _
      vbLf & "max = " & Range(plage).Columns.Count
  hori = InputBox(s)
  If hori > Range(plage).Columns.Count Then Exit Sub
  If hori <= 0 Then Exit Sub
  s = "Dimension verticale en nombre de case?" & _
      vbLf & "max = " & Range(plage).Rows.Count
  verti = InputBox(s)
  If verti > Range(plage).Rows.Count Then Exit Sub
  If verti <= 0 Then Exit Sub
  cellHori = 1 + (Range(plage).Rows.Count - verti) / 2
  cellVerti = 1 + (Range(plage).Columns.Count - hori) / 2
  If cellHori <= 0 Then cellHori = 1
  If cellVerti <= 0 Then cellVerti = 1
  Set rgRectangle = Cells(cellHori, cellVerti).Resize(verti, hori)
  rgRectangle.BorderAround 1, 3, , RGB(225, 0, 0)
End Sub

Et une bride de code pour tracer les lignes:

Code:
Set plage2 = Range(hori, verti)
Dim Ligne&, NbLigne&, s2$

s2 = "Nombres de Ligne?"

NbLigne = InputBox(s2)

For i = 1 To NbPLigne

s2 = "Dimmension verticale de la ligne en nombre de case" & _
vbLf & "max = " & Range(plage2).Columns.Count
horiL = hori
vertiL = InputBox(s)
If cellVerti <= 0 Then cellVerti = 1
Set rgRectangle2 = Cells(cellHori, cellVerti).Resize(verti, hori)
rgRectangle2.BorderInferrior 1, 1, , RGB(0, 0, 225)

Next i

Je voulais sélectionner un rectangle et juste remplir la bordure inférieure mais ça ne marche pas...

Je joins aussi un fichier avec un exemple de résultat final.

Merci pour votre aide.
 

Pièces jointes

  • Test mise en page.xlsm
    28.6 KB · Affichages: 13
Dernière édition:

zebanx

XLDnaute Accro
Bonjour,

Je n'ai pas compris ton besoin en dehors du fait peut être que tu aies besoin d'utiliser des numéros de premières ou dernières lignes
d'un range sélectionné.

Les UDF de pierre-jean notamment, communiqués dans ce fil, donnent des codes précieux pour retrouver ces informations.


Si je suis à côté de la plaque, désolé...

zebanx
 

Matta

XLDnaute Nouveau
Bonjour Zebank,

Merci pour ta réponse, en effet les deux problèmes se ressemble un peu, mais ce que je veux faire est je pense un peu différent.
Je me suis peut être mal exprimé dans le premier post.

Je génère en rectangle avec le 1er code dans une certaine Plage avec ça :
VB:
Set rgRectangle = Cells(cellHori, cellVerti).Resize(verti, hori)

rgRectangle.BorderAround 1, 3, , RGB(225, 0, 0)

Je voudrais sélectionné le rectangle ainsi généré comme une autre plage pour remplir d'autres bordures à l'intérieur de celui-ci.

Mais je cherche encore sur ton lien au cas où je me suis planté. :)

Matta.
 

zebanx

XLDnaute Accro
Re-

De ma compréhension, si tu cherches à sélectionner la plage défini par rgRectangle on pourrait redéfinir une autre plage qui définissent un range à partir des éléments (adresse de la cellule de départ, nombre de lignes et colonnes utilisés pour le resize).

VB:
Set rgRectangle = Cells(cellHori, cellVerti).Resize(verti, hori)
  Set plage2 = Range(Cells(cellHori, cellVerti), Cells(cellHori + verti - 1, cellVerti + hori - 1))
  rgRectangle.BorderAround 1, 3, , RGB(225, 0, 0)
  plage2.Select

Avec ton fichier.
 

Pièces jointes

  • Test mise en page.xlsm
    30 KB · Affichages: 3

Matta

XLDnaute Nouveau
je pense que ça marche mais il y un soucis lorsque que je le rajoute à mon code à la ligne 35 je vois pas ce que c'est :

VB:
Sub CentrerRectangle()
Const plage = "A1:CM48"
Dim hori&, verti&, cellHori&, cellVerti&, rgRectangle, s$
  Cells.Borders.LineStyle = xlLineStyleNone
  s = "Dimension horizontale en nombre de case?" & _
      vbLf & "max = " & Range(plage).Columns.Count
  hori = InputBox(s)
  If hori > Range(plage).Columns.Count Then Exit Sub
  If hori <= 0 Then Exit Sub
  s = "Dimension verticale en nombre de case?" & _
      vbLf & "max = " & Range(plage).Rows.Count
  verti = InputBox(s)
  If verti > Range(plage).Rows.Count Then Exit Sub
  If verti <= 0 Then Exit Sub
  cellHori = 1 + (Range(plage).Rows.Count - verti) / 2
  cellVerti = 1 + (Range(plage).Columns.Count - hori) / 2
  If cellHori <= 0 Then cellHori = 1
  If cellVerti <= 0 Then cellVerti = 1
  Set rgRectangle = Cells(cellHori, cellVerti).Resize(verti, hori)
  rgRectangle.BorderAround 1, 3, , RGB(225, 0, 0)
  
  
 Set plage2 = Range(Cells(cellHori, cellVerti), Cells(cellHori + verti - 1, cellVerti + hori - 1))
  Dim NbLigne&, HoriL$, VertiL$, cellHoriL&, cellVertiL&, rgRectangle2
  
s = "Nombre de Ligne?"

NbLigne = InputBox(s)

If NbLigne < 0 Then Exit Sub

For i = 1 To NbLigne

HoriL = hori

s = "Dimmension verticale de la ligne en nombre de case?" & _
vbLf & "max = " & Range(Plage2).Rows.Count

VertiL = InputBox(s)

If cellVertiL > Range(plage2).Rows.Count Then Exit Sub
    If VertiL <= 0 Then Exit Sub
Set rgRectangle2 = Cells(cellHoriL, cellVertiL).Resize(VertiL, HoriL)
rgRectangle2.BorderInferrior 1, 1, , RGB(0, 0, 225)

Next i
  
End Sub
 
Dernière édition:

zebanx

XLDnaute Accro
Re-

Range(plage2).Rows.Count ???
Ce ne serait pas plutôt (verti - 1) la valeur max de la plage2 ?

Après à la fin les variables suivantes ne sont pas définies dans la partie de code renseignées.
cellHoriL, cellVertiL

Regardez en pas à pas détaillé en tapant F8 depuis le départ de votre code et en pointant votre souris sur ces éléments, ils valent 0 en ligne 43.

Bref, le code à modifer...
 

Pièces jointes

  • mise en page.xlsm
    32.1 KB · Affichages: 1

Discussions similaires

Réponses
4
Affichages
426
Réponses
49
Affichages
1 K

Membres actuellement en ligne

Statistiques des forums

Discussions
314 708
Messages
2 112 097
Membres
111 416
dernier inscrit
philipperoy83