Selection plage variable jusqu'à dernière cellule non vide

Jeremy992

XLDnaute Occasionnel
Bonjour à tous,

Décidément je ne peux plus me passer de vous, j'en apprend tout les jours !

Je vous expose ce que je souhaite faire:

Je voudrais pouvoir sélectionner une plage de cellule variable, c-à-d:

Sélection de la cellule B1 à la dernière cellule remplie du tableau.
Pour l'instant cela va de B1 à N20
Mais demain cela pourra aller de B1 à R50 par exemple, d'où mon intérêt à sélectionner la plage de B1 à la dernière cellule non vide.

Tout ça dans le but de faire un encadré automatique via la code suivant:

Code:
nbbas = 2 - 1
nbdroit = 13 - 1
Nlig = Selection.Rows.Count - nbbas
NCol = Selection.Columns.Count - nbdroit
'MsgBox Range("zone").Address
'Application.Goto Reference:="Zone"
nCDeb = ActiveCell.Column
nldeb = ActiveCell.Row
For i = nldeb To nldeb + Nlig '- 1
        For j = nCDeb To (nCDeb + NCol) ' - 1)
            Range(Cells(i, j), Cells(i + nbbas, j + nbdroit)).Select
            j = j + nbdroit
           Encadre_Simple 'Macro pour encadrement fin de la zone
            Selection.BorderAround Weight:=xlMedium
        Next
i = i + nbbas
Next
Cells(nldeb, nCDeb).Select

Pour le moment je dois à chaque fois remettre à jour la ligne qui défini la zone:

Code:
Sub choisi_zone()
Range("B1:N30").Select
End Sub


Voila, j'espère être assez clair dans mes explications, si besoin je vous joindrais un fichier test !
Merci à vous, au plaisir de vous lire !
 

Jeremy992

XLDnaute Occasionnel
Re : Selection plage variable jusqu'à dernière cellule non vide

Bonjour phlaurent55,

Merci de ton aide, cela à bien l'air de fonctionner, cela parait si simple, encore faut-il le savoir ;)

Mais maintenant j'ai un nouveau problème...

Le code qui vient mettre en forme la zone (encadré toutes les 2 lignes etc...) cité plus haut, ne correspond plus vraiment.
Je m'explique:

La ligne "nbdroit = 13 - 1", qui détermine la longeur d'encadrement ne suit pas...

Il faudrait quelque chose comme: nbdroit = (De B1 jusqu'à la dernière colonne qui contient une cellule non vide) - 1

Mais je ne sais pas comment l'écrire :/
 

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Selection plage variable jusqu'à dernière cellule non vide

Re,

Selection.Columns.Count -----> pour le nb de colonnes sélectionnées
Selection.Rows.Count -----> pour le nb de lignes sélectionnées

à+
Philippe
 

Jeremy992

XLDnaute Occasionnel
Re : Selection plage variable jusqu'à dernière cellule non vide

Oui ça j'ai déjà avec

Code:
Nlig = Selection.Rows.Count - nbbas
NCol = Selection.Columns.Count - nbdroit

C'est l'encadrement qui bloque que j'ai avec

Code:
nbbas = 2 - 1
nbdroit = 13 - 1

Le code (ici en entier):

Code:
'Choix de la zone
choisi_zone
'Efface_Zone
'Encadrement nbbas+1 et nbdroit+1

nbbas = 2 - 1
nbdroit = 13 - 1
Nlig = Selection.Rows.Count - nbbas
NCol = Selection.Columns.Count - nbdroit
'MsgBox Range("zone").Address
'Application.Goto Reference:="Zone"
nCDeb = ActiveCell.Column
nldeb = ActiveCell.Row
For i = nldeb To nldeb + Nlig '- 1
        For j = nCDeb To (nCDeb + NCol) ' - 1)
            Range(Cells(i, j), Cells(i + nbbas, j + nbdroit)).Select
            j = j + nbdroit
           Encadre_Simple 'Macro pour encadrement fin de la zone
            Selection.BorderAround Weight:=xlMedium
        Next
i = i + nbbas
Next
Cells(nldeb, nCDeb).Select

Apelle un autre code appellé "Encadre_simple"

Code:
Sub Encadre_Simple()
'Choisir entre
p = xlHairline
'p = xlThin
'p = xlMedium
'p = xlThick
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .Weight = p
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = p
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = p
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = p
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .Weight = p
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .Weight = p
        .ColorIndex = xlAutomatic
    End With
End Sub

Seulement c'est avec "nbbas = 2 - 1" et "nbdroit = 13 - 1", que je définie comment ce fait l'encadré, ici bordure toutes les deux ligne, sur 13 colonne, or je voudrais ne pas avoir a choisir "sur 13 colonne".

Je sais pas si c'est plus clair... je vais te joindre un fichier test dans quelques minutes (le temps que je le fasse ^^)
 

Jeremy992

XLDnaute Occasionnel
Re : Selection plage variable jusqu'à dernière cellule non vide

Voici un petit fichier "Test" pour mieux comprendre ce qui est fait !

Le problème est que si je rajoute des données dans la colonne F par exemple, cela n'est pas pris en compte dans mon encadrement...

En espérant que cela aide dans la résolution de mon problème.
 

Pièces jointes

  • Test.xlsm
    21 KB · Affichages: 71
  • Test.xlsm
    21 KB · Affichages: 47
  • Test.xlsm
    21 KB · Affichages: 60
Dernière édition:

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Selection plage variable jusqu'à dernière cellule non vide

Re,
J'espère ne pas avoir fait fuir tout le monde avec toutes ces lignes VBA ^^
ce n'est pas mon habitude de fuir mais j'ai énormément de travail en ce moment

voici un exemple de tableau en pièce jointe

à+
Philippe
 

Pièces jointes

  • 111.xlsx
    12.8 KB · Affichages: 72
  • 111.xlsx
    12.8 KB · Affichages: 73
  • 111.xlsx
    12.8 KB · Affichages: 90

Discussions similaires

Statistiques des forums

Discussions
312 345
Messages
2 087 471
Membres
103 553
dernier inscrit
jhnm