Problème avec Target

Bonsoir le forum,

J’ai une nouvelle fois besoin de votre savoir. Dans le fichier ci-joint, lorsque l’on modifie la cellule M7 (l’année), une macro est lancée (code modifié pour le test).

Je désire pouvoir lancer une macro si les cellules de la colonne I sont modifiées, et une autre macro si les cellules des colonnes T à V sont modifiées.

Dois-je inscrire ces deux codes dans la macro existante ou créer des codes différents ?

J’espère que vous arriverez à comprendre ma demande.

Vous remerciant par avance,

Cordialement,

Bernard

29test-target.zip (9.19 Ko)

Bonjour,

il ne peut y avoir qu'une seule macro Worksheet_Change

En conséquence tu es obligé de gérer tous les cas de figure dans la même macro.

En premier tu gères la sélection unique :

If Target.Count = 1 Then

End if

Et à l'intérieur tu gères les plages avec Intersect (voir l'aide et l'exemple de VBA sur ce mot)

Utilise également une variable sur Target.Column pour vérifier les colonnes 20 à 22 et ça devrait le faire.

En cas de problème, tu fais signe...

[Edit] ça va te donner quelque chose comme ça :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then
  If Target.Address = "$M$7" And Not IsEmpty(Target) Then
    Call MacroDate
  Else
    i = Target.Column
    If i > 19 And i < 23 Then Call TonAutreMacro
  End If
End If
End Sub

Nota : Il est assez maladroit de faire des Call dans une macro Worksheet_Change car tu perds la référence à Target (à moins de la passer en param) Bref il faut mieux tout coder dans la macro Worksheet_Change plutot que de faire des Call

[Edit (2)] Bon d'accord, je n'ai pas utilisé intersect... Il n'en demeure pas moins que c'est l'outis à privilégier dans ce genre de situation...

A+

Bonsoir Galopin, le forum,

Je te remercie pour les informations. J'esssai avec tes conseils.

Je ne marquerai pas de t’informer du résultat de mes tests.

Cordialement,

Bernard

Bonsoir Galopin, le forum,

Grâce à ton aide, et aux nombreux exemples de ce forum, j’ai pu résoudre mon problème si les cellules des colonnes T à V sont modifiées.

Maintenant, je souhaite également effacer les cellules des colonnes J à S (de la même ligne), si une cellule de la colonne I comporte un « O » (en majuscule).

De plus, (je crois que je deviens un peu trop exigeant…), je désire que l’on ne puisse plus avoir accès aux cellules de la colonne I après modification, si cela est possible (Je ne sais pas si l’instruction UserInterfaceOnly permet de réaliser mon souhait).

J’espère que mes demandes ne seront pas trop confuses.

Vous remerciant par avance,

Cordialement,

Bernard

21test-target.xlsm (21.99 Ko)

Bonjour,

Essaie ce code à placer dans la feuille

Private Sub Worksheet_Change(ByVal Target As Range)
'Dan
If Not Application.Intersect(Target, Columns("T:V")) Is Nothing Then
    Range("J" & Target.Row & ":S" & Target.Row).ClearContents
End If
If Not Application.Intersect(Target, Range("I13:I" & Range("I" & Rows.Count).End(xlUp).Row)) Is Nothing Then
    If Range("I" & Target.Row) = "O" Then
    Range("J" & Target.Row & ":S" & Target.Row).ClearContents
    ActiveSheet.Unprotect
    Range("I" & Target.Row).Locked = True
    ActiveSheet.Protect
    End If
End If
End Sub

Au préalable, sélectionne les cellules modifiables (exemple de H13 à Vxx), puis protège ta feuille avec un mot de passe à blanc.

Amicalement

Bonsoir Dan, le forum,

Merci pour le code. Je vais tester sur mon fichier et je t’informerai du résultat.

Avec mes remerciements réitérés.

Amicalement,

Bernard

Rechercher des sujets similaires à "probleme target"