Deplacer une partie d'un sub employant target

Bonjour, j'eprouve de la difficulte a deplacer le code suivant vers un sub normal , car il est dans un sub evenementiel employant l'argument "target" . il faudrait remplacer ce mot par autre chose. Il faudrait que target soit remplacer par "cellule active"

Private Sub Worksheet_SelectionChange(ByVal target As Range)  'lorsqu'il y a une cellule de selectionner
  Dim lig As Long
  Dim qte As Long
  Dim i As Integer
  Dim contenu As String
  Dim variable As Range
  Dim derlig As Integer
  Dim Plage As Range
  'on ajoute toute les occurences trouvées en i:
       Range("I3:I10000").Interior.ColorIndex = xlColorIndexNone
            If target = "" Then exit
               derlig = Range("I10000").End(xlUp).Row
              'on colore toute les occurences trouves en i
               For i = 3 To derlig
               If Left(Cells(i, 9), 1) <> ":" And Right(Cells(i, 9), Len(target)) = target Then
                  Cells(i, 9).Interior.ColorIndex = 6
                  qte = qte + 1
               End If
            Next i
            ActiveCell.Offset(0, -1) = qte

Bonsoir,

vous pouvez faire sur ce type de structure puisque Target est une variable :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Call La_Procédure(Target)
End Sub

Sub La_Procédure(La_Variable As Range)
    MsgBox La_Variable.Address
End Sub

La_Procédure ou un autre nom peut se trouver dans un module.

@ bientôt

LouReeD

je dois te dire que je suis perdu un peu avec ca. Les arguments, je ne comprend pas trop. Faire un call et un messagebox ca va, mais je ne vois pas le lien, desolé.

Dans la macro evenementiel, target contient quoi finalement? la valeur de la cellule active? l'emplacement? ou un peu tout ca? Est-ce que target aurai-pu s'apeler cible ou autre?

A quoi sert exactement le mot Target dans Call La_procedure(Target) ?

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Call La_Procédure(Target)
End Sub

Sub La_Procédure(La_Variable As Range)
    MsgBox La_Variable.Address
End Sub

Bonsoir,

Target est le nom d'une variable "système" dans laquelle se trouve la ou les cellules actives lors de l'événementiel.

Donc dans cette procédure :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Target correspond à la nouvelle cellule sélectionnée puisque l'événement est "lorsque la sélection change"

Ceci dit vous pouvez récupérer l'adresse de cette nouvelle cellule par Target.Address, vous pouvez connaître sa valeur par Target.Value, le nombre de colonne de la sélection Target.Column.Count etc, Target contient les information de la sélection.

Si vous voulez déplacer votre code dans un Sub à part mais que vous voulez garder l'information de Target suite à l'événementiel, alors il faut "envoyer" cette variable au moment de l'appel de la procédure :

Call La_Procédure(Target)

Vous demander à VBA de lancer la Sub "La_Procédure" en envoyant les données récupérées dans la variable Range Target.

La procédure appelée ainsi doit "récupérer" cette variable d'où le :

Sub La_Procédure(La_Variable as Range)

où vous déclarer une variable La_Variable comme un objet Range (vu que Target est un Range c'est mieux...) et qui va recevoir toutes les données de Target de la fonction événementielle, donc La_Variable.Adresse donne la même chose que Target.Adress.

Votre question était de déplacer la procédure, mais si elle doit travailler avec la cellule active détectée par la procédure événementielle SelectionChange, vous devez "envoyer" cette valeur à votre procédure.

Le fait de faire ceci par exemple est que si vous avez plusieurs feuilles dans le classeur où le même code doit s'exécuter suite à un changement de sélection de cellule alors sur chacune des feuilles vous mettez :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Call La_Procédure(Target)
End Sub

et dans un module vous avez votre code écrit une seul fois avec :

Sub La_Procédure(La_Variable As Range)
    Ici votre code qui travaillera avec les données reçus de la feuille active et de la cellule active qui se trouve dans La_Variable
End Sub

Comme ceci en cas de modification de code, un seul est à gérer.

Après de mon coté je n'ai peut-être pas compris le sens de votre question...

@ bientôt

LouReeD

Je crois comprendre tout ca, je vais quand meme relire quelques fois. C'est tres complet comme explication!

qu'est-ce qui arrive si j'ecris ceci: est-ce que target aura suivi?

Sub La_Procédure(target As Range)
    MsgBox La_Variable.Address
End Sub

Si vous faites :

Sub La_Procédure(Target As Range)

ceci veut dire qu'il y a eu un Call avec :

Call La_Procédure(Target)

C'est tout à fait possible, par contre du coup :

MsgBox La_Variable.Address

provoquera une erreur car la variable La_Variable n'est pas définie !!!

Donc dans votre cas il suffirait de mettre :

MsgBox Target.Address

@ bientôt

LouReeD

C'est tout a fait ce que je croyais. Merci pour toutes les info.

Capucin.

Bonne fin de soirée et @ bientôt

LouReeD

Rechercher des sujets similaires à "deplacer partie sub employant target"