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

Résolu
platinium -  
eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   -
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 ?
Configuration: Windows Vista
Internet Explorer 7.0

3 réponses

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
  2. platinium
     
    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
  3. BloodyAngel Messages postés 1487 Date d'inscription   Statut Contributeur Dernière intervention   403
     
    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