selection cellules discontinues

phil75016

XLDnaute Junior
Bonjour, je souhaiterais selectionner des cellules discontinues sachant que la colonne est variable en fonction de la position de la cellule. Dans mon exemple Range("F3:F4,F6,F8:F13,F15:F19").Select j'ai mis la colonne F mais je voudrais pouvoir l'utiliser sur n'importe quelle colonne.
Je vous remercie
 

mromain

XLDnaute Barbatruc
Re : selection cellules discontinues

Bonjour phil75016,


Ne sachant pas ce que tu souhaites vraiment obtenir, je ne suis pas sûr de répondre correctement à ton problème. Cependant, voici un essai :
VB:
Dim lignes As Range, colonne As Range, intersection As Range, numColonne As Long
    
    numColonne = 2
    
    Set lignes = Range("3:4,6:6,8:13,15:19")
    Set colonne = Cells(1, numColonne).EntireColumn
    Set intersection = Application.Intersect(lignes, colonne)
    
    intersection.Select
a+
 
Dernière édition:

Gorfael

XLDnaute Barbatruc
Re : selection cellules discontinues

Salut phil75016 et le forum
Sélectionner des cellules n'est pas un but, juste une manière d'atteindre un but.
Si on connaissait le but final, on pourrait te proposer, peut-être, des solutions adaptées à ta problèmatique.
A+
 

phil75016

XLDnaute Junior
Re : selection cellules discontinues

Désolé de ne pas avoir été assez précis.
MOn but est de pouvoir tracer des traits verticaux.
La macro enregistrée en auto me donne ceci :
Sub Macro1()

colonne = ActiveCell.Column
Range("F3:F4,F6,F8:F13,F15:F19,F21:F24,F26:F30,F33:F37").Select

With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlHairline
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlMedium
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlMedium
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlHairline
End With
Selection.Borders(xlInsideVertical).LineStyle = xlNone
End Sub

Mais je voudrais utiliser cette macro sur d'autres colonnes que F.
Merci
 

mromain

XLDnaute Barbatruc
Re : selection cellules discontinues

Rebonjour phil, bonjour Gorfael,


Voici un essai :
la macro mets rajoute les bordures sur la colonne de la cellule active :
VB:
Sub Macro1()
Dim lignes As Range, colonne As Range, intersection As Range, numColonne As Long
    
    numColonne = ActiveCell.Column
    
    Set lignes = Range("3:4,6:6,8:13,15:19")
    Set colonne = Cells(1, numColonne).EntireColumn
    Set intersection = Application.Intersect(lignes, colonne)
    
    With intersection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlHairline
    End With
    With intersection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With intersection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With intersection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlHairline
    End With
    intersection.Borders(xlInsideVertical).LineStyle = xlNone
End Sub
a+
 
Dernière édition:

phil75016

XLDnaute Junior
Re : selection cellules discontinues

merci, je pensais que c'était plus simple. Du style range(cells(3,numcolonne),cells(4,numcolonne)).... mais je bloquais pour y ajouter les cellules non contigues. Peut être tout simplement que ce n'est pas possible. En tout cas, ta solution me convient tout à fait.
 

Gorfael

XLDnaute Barbatruc
Re : selection cellules discontinues

Salut phil75016 et le forum
Pense à mettre les balises de codes
Utiliser Activecell/select/selection est rarement indispensable, et toujours ralentisseur de code.
En admettant que tu veuilles affecter ton formatage, sur les mêmes lignes, mais sur une colonne différente, il faut le moyen de déterminer la colonne concernée (la colonne de la cellule active ou une boîte de dialogue, ton code devient :
Code:
Sub Macro1()
Dim Col As Integer, Lig As Long, X As Long, Y As Range

Col = ActiveCell.Column
Lig = Array(3, 4, 6, 6, 8, 13, 15, 19, 21, 24, 26, 30, 33, 37)

For X = 0 To UBound(Lig) - 1 Step 2
    With Range(Cells(Lig(X), Col), Cells(Lig(X + 1), Col))
        With .Borders(xlEdgeLeft)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlHairline
        End With
        With .Borders(xlEdgeTop)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlMedium
        End With
        With .Borders(xlEdgeBottom)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlMedium
        End With
        With .Borders(xlEdgeRight)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlHairline
        End With
        .Borders(xlInsideVertical).LineStyle = xlNone
    End With
Next X
End Sub
Attention, comme je n'ai que V.2003, je n'ai pas testé la validité de ".TintAndShade"

La méthode de création du numéro de colonne est celui que tu a choisi dans le code donné (cellule active)
Une autre méthode pourrait être (en complétant avec le code interne) :
Code:
Sub Macro1()
Dim Col As Integer, Plage As Range

Col = ActiveCell.Column - 1
Set Plage = Range("A3:A4,A6,A8:A13,A15:A19,A21:A24,A26:A30,A33:A37").Offset(0, Col)

With Plage
    With .Borders(xlEdgeLeft)
    '...................
    End With
    .Borders(xlInsideVertical).LineStyle = xlNone
End With
End Sub
Il y a moult méthode, pour faire une sélection multiple
A+
 

Discussions similaires

Statistiques des forums

Discussions
312 304
Messages
2 087 068
Membres
103 453
dernier inscrit
Choupi