Vba excel sélectionner une plage non définie?

Résolu/Fermé
platinium - 10 oct. 2007 à 00:13
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 - 20 oct. 2007 à 11:01
Bonjour,

Je souhaite insérer une bordure autour de cellules faisant partie d'un tableau, ce que j'arrive à faire..
Ce tableau représente un devis dont les lignes s'ajoutent en fonction de diverses sélections. Le nombre de lignes peux donc varier d'un devis à un autre.
Ce tableau va de la colonne A à I, de la ligne 17 à ?
L'insertion des bordures se fait une fois que le tableau est rempli.
Quel code dois-je utiliser pour selectionner les cellules.

voici ce que j'ai essayé, sans succès :

' tableau = Sheets("devis").Range("i16").End(xlDown).Select
' Range("a17:tableau").Select

cette formule que j'ai trouvé dans le forum fonctionne, mais ne permet pas d'établir une variable à la cellule i25
' Sheets("devis").Range("a17:i25" & i & "").Select

Quelqu'un peut-il m'aider ?
A voir également:

3 réponses

eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
20 oct. 2007 à 11:01
Bonjour,

Tu peux sélectionner ta zone en cours avec .currentregion :
Range("A17").CurrentRegion.Select

La selection s'étend tant que les cellules autour ne sont pas vides.

eric
1
Bonjour BloodyAngel,

Merci pour ta réponse, que je consulte tard car je n'ai pas eu le temps de la consulter plus tôt.
J'ai essayer ta méthode, mais ça n'a pas pas fonctionner, et je n'ai pas réussi à l'adapter. J'ai cependant trouver une autre solution, bien plus lourde que celle que tu m'as proposer mais qui fonctionne.
Voici le principe que j'ai utilisé dans un module :

Sub bordure()
Sheets("devis").Range("a17:i18" & i & "").Select

If Sheets("devis").[a19].Value = "" Then
GoTo fin
Else
Sheets("devis").Range("a17:i19" & i & "").Select

If Sheets("devis").[a20].Value = "" Then
GoTo fin
Else
Sheets("devis").Range("a17:i20" & i & "").Select

If Sheets("devis").[a21].Value = "" Then
GoTo fin
Else
Sheets("devis").Range("a17:i21" & i & "").Select
' ........
End If
End If
End If

fin:

With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With

With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With

With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With

With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With

With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With

With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With

End Sub


Voilà, je sais que la partie & i & "") du code Sheets("devis").Range("a17:i18" & i & "").Select ne doit pas servir à grand chose car i n'est pas défini, mais ça fonctionne pour le moment. je ferai le tri plus tard.

Merci BloodyAngel, et excuse-moi pour la réponse très tardive !
0
BloodyAngel Messages postés 1479 Date d'inscription mardi 21 juin 2005 Statut Contributeur Dernière intervention 21 juin 2018 401
10 oct. 2007 à 00:44
J'ai pas trop compris ton histoire mais je crois avoir fais un truc un peu semblable donc je t'envoie toujours le code que j'ai fais...
Je dis pas que c'est LA méthode mais c'est une méthode...


Explications :
Worksheets(1).Range([A3].End(xlDown), [K3]).Borders(xlEdgeBottom).Weight = xlThick
-> Feuille numéro1, Range à partir de A3 jusqu'à la prochaine cellule vide en verticle et jusque K3 en horizontal,
Bordure du bas en xlThick

Les autres lignes suivent le même principe. Après je fais une boucle pour terminer le boulot...
Pour que cette façon de procéder fonctionne, il faut que dans ton tableau il y ait au moins une colonne où il n'y a pas de cellule vide (colonne A chez moi).

CODE
-------


'''''''''''''''''''''''''''
' Formattage de la grille '
'''''''''''''''''''''''''''

Worksheets(1).Range([A3].End(xlDown), [K3]).Borders(xlEdgeBottom).Weight = xlThick
Worksheets(1).Range([A3].End(xlDown), [K3]).Borders(xlEdgeRight).Weight = xlThick
Worksheets(1).Range([A3].End(xlDown), [K3]).Borders(xlEdgeLeft).Weight = xlThick
Worksheets(1).Range([A3].End(xlDown), [K3]).Borders(xlInsideHorizontal).Weight = xlThin
Worksheets(1).Range([A3].End(xlDown), [K3]).Borders(xlInsideVertical).Weight = xlThin

i = 3 ' i est un Integer
While Cells(i, 2) <> ""
Cells(i, 1).Borders(xlEdgeLeft).Weight = xlThick
Cells(i, 1).Borders(xlEdgeRight).Weight = xlThin
Cells(i, 1).Borders(xlEdgeBottom).Weight = xlThin
i = i + 1
Wend
Cells(i, 1).Borders(xlEdgeTop).Weight = xlThick
-1