Target.Offset

Bonjour, je ne comprend pas très bien la fonction Target.Offset

Voici un exemple de code :

Option Explicit

Dim tableau
Dim i

Private Sub Worksheet_Change(ByVal Target As Range) 'La macro se lance si une cellule de la feuille est modifiée. Le paramètre target correspond à la cellule modifiée

    If Target.Count > 1 Then Exit Sub 'Si le nb de cellules sélectionnées > 1 ne rien faire
    If Not Intersect(Target, Range("A1:B" & Range("A" & Rows.Count).End(xlUp).Row)) Is Nothing Then 'Si la cellule sélectionnée se trouve dans la plage A1:B et au dessus de la dernière ligne renseignée en A alors
        tableau = Range("A1:B" & Range("A" & Rows.Count).End(xlUp).Row) 'Range dans un tableau les valeurs contenues dans la plage A1:B et au dessus de la dernière ligne renseignée en A

        If Target.Column = 2 Then 'Si la celulle modifiée se trouve en colonne 2 alors
            For i = 1 To UBound(tableau, 1) 'Pour i allant de 1 à taille du tableau
                   If tableau(i, 1) = Target.Offset(0, -1) Then 'Si cellules ligne i et colonne 1 = ?
                    tableau(i, 2) = Target 'Cellule ligne i et 2 prend la valeur de la cellule modifiée
                End If
            Next i
        End If
    End If
    Range("A1").Resize(UBound(tableau, 1), 2) = tableau 'Le tableau est mis à jour

End Sub

Ce que je pense avoir compris : Cellule modifiée se décale de 0 en ligne et de -1 en colonne

Merci pour votre aide

Non, ceci ne m'aide pas à mieux comprendre l'action de cette ligne de code. Je ne comprend pas pourquoi on fait un décalage

Bonjour,

Target.Offset(0, -1)

target correspond à la cellule sur laquelle tu as cliqué

target.offset(0,-1) correspond à la cellule à gauche (une colonne à gauche= -1), sur la même ligne (0) de la cellule sur laquelle tu as cliqué

donc si tu as cliqué sur C5, target.offset(0,-1) fait référence à B5

target.offset(2,3) correspond à la cellule qui se trouve dans la 3ème colonne à droite(3), 2 ligne plus bas (2) que la cellule sur laquelle tu as cliqué.

donc si tu as cliqué sur C5, target.offset(2,3) fait référence à F7

Merci ! Au final j'avais plus ou moins compris.

Cette ligne de code, veut-elle bien dire que le tableau est mis à jour?

Range("A1").Resize(UBound(tableau, 1), 2) = tableau

Merci!

Cette ligne de code, veut-elle bien dire que le tableau est mis à jour ?

Range("A1").Resize(UBound(tableau, 1), 2) = tableau

exact, c'est cette ligne de code qui écrit à partir de la cellule A1 le tableau VBA de nom "tableau".

dhany

Rechercher des sujets similaires à "target offset"