sélectionner plage de cellule avec offset

  • Initiateur de la discussion Initiateur de la discussion meldja
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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)
 
Re : sélectionner plage de cellule avec offset

bonjour meldja

en supposant que j'aie bien compris

Code:
Set isect = Application.Intersect(Target, Range("A1:A100"))
If Not isect Is Nothing Then
 If Target.Value < 5 Then
  Range(Target, Cells(Target.Row, 4)).Interior.ColorIndex = 6
 End If
End If
 
Re : sélectionner plage de cellule avec offset

Bonjour Meldja, PierreJean 🙂,
Oui, PierreJean, je pense que c'est ça.
Quelques remarques complémentaires :
Worksheet_SelectionChange renvoie dans Target la dernière sélection, qui n'est pas forcément en A quand on vient de valider une cellule en A. De plus, la MFC balaie à chaque fois les 100 cellules. J'utiliserais plutôt Worksheet_Change qui renvoie la valeur de la cellule qui vient de changer (sauf si A est le résultat de calculs, bien sûr).
C'est bien un Select Case qu'il faut utiliser puisque le but est une MFC > 3.
Bonne journée 😎
 
Re : sélectionner plage de cellule avec offset

bonjour,
Et merci pour ta réponse.
Je ne vois pas comment intégrer ta proposition dans mon code.
J'ai plein de conditions. Si tu veux je peux te poster le code en entier, ça sera peut être plus clair.
Encore merci
 
Re : sélectionner plage de cellule avec offset

Hello,

Pour autant que j'aille bien compris aussi 😀

Ne peut-on pas aussi utiliser le Rezise pour ce genre de chose ?

Comme ceci :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)

    On Error Resume Next

    Dim C As Variant
    Dim plg As Range
    Dim i As Integer
    
    Set plg = Range("A1:A" & Range("A65536").End(xlUp).Row)
    
    For i = 1 To plg
            For Each C In plg
                If C.Value < 5 Then C.Cells.Offset(0, 0).Resize(1, 4).Interior.ColorIndex = 6
                If C.Value = "" Then C.Cells.Offset(0, 0).Resize(1, 4).Interior.ColorIndex = xlNone
            Next C
    Next i
    
End Sub
Cdt, Hulk.


P. S. Ca traite la première demande, pas la deuxième.
 
Re : sélectionner plage de cellule avec offset

Salut,

autre solution peut-être avec l'utilisation du "Offset" :
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Target.Count > 1 Or Intersect(Target, Range("A1:A100")) Is Nothing Then Exit Sub
  If Target < 5 Then Range(Target, Target.Offset(, 3)).Interior.ColorIndex = 6
End Sub
 
Re : sélectionner plage de cellule avec offset

Bonjour meldja, pierrejean, JNP, Hulk et Fo_rum, bonjour à toutes et à tous 🙂

meldja à dit:
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 vois pas bien ce que tu veux faire avec ce code. En fait, tu recherches l'adresse de Target et, malgré tout, tu scannes l'intégralité de Plg, c'est-à-dire A1:A100.

Les codes proposés ou les remarques formulées te proposent de ne t'occuper que de Target. Plus besoin de chercher l'adresse après cela.

Si tu souhaites scanner l'ensemble de tes lignes en colonne A, tu as le code de Hulk.

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.

Je suppose que tu fais cette remarque à cause du If Target.Address = ... , car on ne définit pas l'adresse de Target, on la cherche et on la trouve 😉 . Comme je te le disais plus haut, tu n'as plus besoin, avec certains codes proposés de chercher l'adresse de Target.

J'aime assez la concision du code de Fo_rum sans vouloir vexer pierrejean dont le code est parfait également. JNP t'a indiqué que l'évènement que tu as choisi n'était pas approprié et Hulk fait découvrir Resize à ceux qui ne le connaissent pas encore 😉

Bravo à tous 🙂

@+
 
Re : sélectionner plage de cellule avec offset

Merci pour vos réponses,
j'essaie de joindre mon fichier test depuis 1/2 heures mais je galère ; entre les déconnexions, la lenteur du réseau et j'en passe, c'est une vraie galère.
En espérant que cette fois-ci soit la bonne.

Ben pas possible. J'essaierai de très bonne heure un de ces matins quand le débit sera meilleur parce que moins de personnes connectées.
A plus
 
Re : sélectionner plage de cellule avec offset

Re et bonjour à tous,
Je viens de tester le code de Fo_Rum et ça ne marche pas.
A chaque fois que je valide (Entrée) les cellules se colorient, même quand la cellule est vide.
Ce que je cherche à faire, c'est une mise en forme conditionnelle en fonction du contenu de la cellule en colonne A.
Je retente de joindre mon fichier test.
 
Re : sélectionner plage de cellule avec offset

Re et bonjour à tous,
Je viens de tester le code de Fo_Rum et ça ne marche pas.
A chaque fois que je valide (Entrée) les cellules se colorient, même quand la cellule est vide.
Ce que je cherche à faire, c'est une mise en forme conditionnelle en fonction du contenu de la cellule en colonne A.
Mon code marche très bien, mais je le trouve trop long. Je voulais juste savoir s'il y avait moyen de faire plus court.
Merci
Je retente de joindre mon fichier test.
Bonne journée
 

Pièces jointes

Re : sélectionner plage de cellule avec offset

Salut Hulk,
Ici, on est loin de l'ADSL. On a le choix entre une connexion analogique (46 kbts/s) ou le numéris qui revient cher (56 kbts/s).
Pour ma part je suis en analogique avec une bande passante réelle qui oscille autour de 15 kbts/s.
On a des délestage toutes les 4 heures pour désaturer le réseau qui se traduisent bien sûr par des déconnexions.
C'est pour ça que je suis toujours en retard sur les discussions. Au moment où je réponds à quelqu'un, il y a de nouveaux messages que je vois pas encore.
Normalement, on peut espérer un haut débit relatif d'ici 2 ans.
Bonne journée
 
Re : sélectionner plage de cellule avec offset

Hello,

Je plaisantais 😀

Essaye ça
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim C As Variant
    Dim plg As Range
    Dim i As Integer
    
    Set plg = Range("A1:A" & Range("A65536").End(xlUp).Row)
    
    For Each C In plg
        Select Case C
        Case 0
        C.Cells.Offset(0, 0).Resize(1, 4).Interior.ColorIndex = xlNone
        Case Is < 5
        C.Cells.Offset(0, 0).Resize(1, 4).Interior.ColorIndex = 6
        Case Is < 10
        C.Cells.Offset(0, 0).Resize(1, 4).Interior.ColorIndex = 3
        Case Is < 15
        C.Cells.Offset(0, 0).Resize(1, 4).Interior.ColorIndex = 4
        Case Is < 20
        C.Cells.Offset(0, 0).Resize(1, 4).Interior.ColorIndex = 7
        Case Is < 25
        C.Cells.Offset(0, 0).Resize(1, 4).Interior.ColorIndex = 8
        Case Is < 30
        C.Cells.Offset(0, 0).Resize(1, 4).Interior.ColorIndex = 9
        End Select
    Next C

End Sub
Cdt, Hulk.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour