sélectionner plage de cellule avec offset

meldja

XLDnaute Impliqué
Bonjour,
je suis en train de faire une mise en forme conditionnelle avec plus de 3 conditions. La condition est testée dans la colonne A de la ligne 1 à 100. Quand la condition est vraie, je souhaiterais que ce soit la ligne (de la colonne A à D ; soit 4 cellules). Pour l'instant j'ai trouvé ça :

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim C As Range
Dim plg As Range
Set plg = Range("A1:A100")

Dim i As Integer
For i = 1 To 100
If Target.Address = "$A$" & i Then
    For Each C In plg
        Select Case C
        Case Is < 5
        C.Interior.ColorIndex = 6
        C.Offset(0, 1).Interior.ColorIndex = 6
        C.Offset(0, 2).Interior.ColorIndex = 6
        C.Offset(0, 3).Interior.ColorIndex = 6

Je voulais savoir s'il n'existe pas un moyen de définir une plage pour ne pas répéter le "Offset" autant de fois qu'il y a de cellule.
Pour reformuler ma demande, je voulais savoir s'il n'existe pas un moyen de lui dire : de la cellule C jusqu'à la cellule C.Offset(0, 3).

Je ne sais pas s'il faut ouvrir un autre post pour cette autre question. J'essaie quand même :
je n'ai pas réussi à définir le Target.Address autrement qu'avec une boucle. Au début, j'avais essayé :
Code:
Target.Address = "$A$1:$A$100"
Mais ça ne marchait pas.

Si vous avez des réponses ou des liens, merci d'avance.
Je précise que je ne suis pas pressé, je n'en ai pas besoin pour mon boulot, c'est perso, j'essaye d'apprendre VBA.
Bon week end (le notre est prolongé ; lundi fête de l'abolition de l'esclavage)
 

nolich

XLDnaute Occasionnel
Re : sélectionner plage de cellule avec offset

Re le fil, bonjour à toutes et à tous :)

Un autre fichier puisque j'ai un peu donné de mon temps ;)

Dans le module que j'ai nommé VariablesGlobales :

Code:
[COLOR="Blue"]Option Explicit[/COLOR]

[COLOR="blue"]Public[/COLOR] Tablo(0 [COLOR="blue"]To[/COLOR] 6)

Dans ThisWorkbook :

Code:
[COLOR="blue"]Option Explicit[/COLOR]

[COLOR="blue"]Private Sub[/COLOR] Workbook_Open()
  Tablo(0) = xlColorIndexNone
  Tablo(1) = 6
  Tablo(2) = 3
  Tablo(3) = 4
  Tablo(4) = 7
  Tablo(5) = 8
  Tablo(6) = 9
[COLOR="blue"]End Sub[/COLOR]

D'ailleurs, si quelqu'un pouvait me dire comment initialiser un tableau à une dimension en constante, cela m'arrangerait :)

Puis, dans le code de ta feuille :

Code:
[COLOR="blue"]Option Explicit[/COLOR]
 
[COLOR="blue"]Private Sub[/COLOR] Worksheet_Change([COLOR="blue"]ByVal[/COLOR] Target [COLOR="blue"]As[/COLOR] Range)

  [COLOR="blue"]With[/COLOR] Target
    [COLOR="blue"]If[/COLOR] .Count > 1 [COLOR="blue"]Then Exit Sub[/COLOR]
    [COLOR="blue"]If[/COLOR] .Column = 1 [COLOR="blue"]Then[/COLOR] .Resize(1, 4).Interior.ColorIndex = Tablo((.Value - 1) \ 5)
  End With
End Sub

Ceci fonctionne à condition que tes nombres soient des entiers. A voir donc...

@+
 

Pièces jointes

  • MFC.xls
    26.5 KB · Affichages: 58
  • MFC.xls
    26.5 KB · Affichages: 81
  • MFC.xls
    26.5 KB · Affichages: 60

tototiti2008

XLDnaute Barbatruc
Re : sélectionner plage de cellule avec offset

Bonjour à tous,

D'ailleurs, si quelqu'un pouvait me dire comment initialiser un tableau à une dimension en constante, cela m'arrangerait

En effet, voilà quelque chose que je n'ai jamais réussi à faire non plus, alors j'en ai déduit que c'était impossible mais peut-être que je me trompe...
 

nolich

XLDnaute Occasionnel
Re : sélectionner plage de cellule avec offset

Re, bonjour à toutes et à tous :)

En effet, voilà quelque chose que je n'ai jamais réussi à faire non plus, alors j'en ai déduit que c'était impossible mais peut-être que je me trompe...

Je l'ai déjà fait, enfin je crois, il y a plusieurs années et donc je pense que c'est possible mais, malheureusement, je suis incapable de me souvenir des caractères de séparation (je parle d'un tableau à une dimension).

Merci pour ta réponse et si je (re)trouve, je te tiens au courant, c'est promis ;)

@+
 

Fo_rum

XLDnaute Accro
Re : sélectionner plage de cellule avec offset

Re,

une adaptation de ma première proposition avec un minimum de variables, sans Select (comme me l'a soufflé Nolich;))
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim Tablo(), N As Byte
  If Target.Count > 1 Or Intersect(Target, Range("A1:A1000")) Is Nothing Then Exit Sub
  If Not IsNumeric(Target) Or Target = 0 Then
    Range(Target, Target.Offset(, 3)).Interior.ColorIndex = xlNone
  Else
    Tablo = Array(6, 3, 4, 7, 8, 9)
    N = Int(Target / 5)
    If Target.Value \ 5 = N And Target < 30 Then Range(Target, Target.Offset(, 3)).Interior.ColorIndex = Tablo(N)
  End If
End Sub
 

Pièces jointes

  • MFCoulVBA.zip
    5.1 KB · Affichages: 34

Discussions similaires

Statistiques des forums

Discussions
312 668
Messages
2 090 739
Membres
104 643
dernier inscrit
adriano22