Target.value dans une macro

Bonjour à tous,

Je vous écris car je bute sur un problème.

J'ai une ligne de code qui fonctionne en procédure Private Sub Worksheet_Change(ByVal Target As Range) mais cela ne convient pas à mon application.

Je souhaite l’attribuer à une macro afin de pouvoir l’affecter à des bouton ou menu déroulant.

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Value = 1 Then
Target.End(xlUp).Offset(3, 0) = 1

End If
End Sub

Si je change Private Sub Worksheet_Change(ByVal Target As Range) par Sub Macro1()

J'ai une erreur Objet requis

Pourriez vous m'aider ?

Bonjour,

Dans une sub normale, pas de target effectivement.

Il faudra mettre activecell à la place.

Bonjour,

Merci de ton retour.

Le soucis est que dans ma condition la cellule n'est pas sélectionnée mais modifié par un menu déroulant, activecell ne fonctionnera pas...

Si tu rajoutes des infos au compte goutte, ça ne va pas être facile.

J'ai du mal à visualiser ce que tu veux faire de toute façon. Sans fichier exemple, ça va être compliqué.

Désole.

Voici un exemple : A1 est la cellule lié au menu déroulant.

Je souhaite que A3 = 1 si A1 =1.

l'idée de ce code est que j'ai beaucoup de menu déroulant, cela me permet de ne pas avoir a taper chaque ligne en attribuant le sub a chaque déroulant

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Value = 1 Then
Target.End(xlUp).Offset(3, 0) = 1

End If
End Sub
42classeur1.xlsx (11.20 Ko)

Et pourquoi vouloir faire ça par macro ?

En A3 :

=si(A1=1;1;"")

Les macros ne doivent/devraient intervenir que s'il n'existe pas de possibilité simple dans Excel de faire une chose.

Ou alors il faut que tu en dises plus sur ton projet.

Car je dois appliqué ça à un grand nombre de menus déroulement, ca me facilite la tâche et m'ouvre un simplicité si besoin de modifier certaines valeurs.

Salut Rstam,
Salut JoyeuxNoël,

quelles listes de validation (A,B,C,D ??) et appliquées sur quelles (nombreuses) cellules ? Explications !!

Target.End(xlUp).Offset(3, 0) = 1

Le résultat doit donc être copié 3 cellules sous la fin de colonne ?

Pour une macro "extérieure", il te suffit de passer le Target.range comme argument.


A+

Salut curulis57

Dans mon exemple la validation est sur abcd et est appliqué sur A1.

Le résultat doit être copier 3 cellule sous la cellule lié au déroulant.

Je vais envoyé la feuil final avec tout les déroulant ce sera plus parlant je vais aussi mettre sous forme de formule l'application que je souhaite sur le premier déroulant.

Mon approche n'est peut être pas la bonne

C'est pour ça que je te demande de nous fournir plus d'informations depuis le début, parce que là tu ne nous aides pas à t'aider...

Voila la feuil avec tout les déroulant.

La plage d'entrée est $P$2:$P$6

La cellule lié du premier déroulant est $C$15

J'ai écris en formule l'application que je souhaite faire en macro.

la cellule C18 prend une valeur de Q2 à Q6 en fonction du choix dans le déroulant

la cellule C19 prend une valeurde R2 à R6 en fonction du choix dans le déroulant

Ça marche très bien en formule mais il y a trop de déroulant et si j'ai une modification à venir ça deviendra compliqué.

Si je pouvais affecter une macro germinal pour chaque déroulant qui dirais que si la valeur lié =1 alors la 3 cellule du dessous = Q2.

16classeur1.xlsx (59.61 Ko)

Salut Rstam,
Salut JoyeuxNoël,

codes valables pour les cellules sur fond orange.
Les listes de validation sont créées à la demande : tu peux donc changer tout ce que tu veux mais laisse ce tableau en [P2] (pas de protection)..

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'
Dim sMsg
'
Application.EnableEvents = False
'
Cells.Validation.Delete
If Target.Interior.Color = RGB(255, 190, 0) Then
    For x = 2 To Range("P2").End(xlDown).Row
        For y = 16 To 18
            sMsg = sMsg & IIf(y = 16, "", "/") & Cells(x, y)
        Next
        If x < Range("P2").End(xlDown).Row Then sMsg = sMsg & ","
    Next
    Target.Offset(3, 0).Resize(2, 1) = ""
    Target.Validation.Add Type:=xlValidateList, Formula1:=sMsg
End If
'
Application.EnableEvents = True
'
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
'
Application.EnableEvents = False
'
If Target.Interior.Color = RGB(255, 190, 0) Then Target.Offset(3, 0).Resize(2, 1) = ""
If InStr(Target, "/") > 0 Then _
    Target.Offset(3, 0) = Split(Target, "/")(1): _
    Target.Offset(4, 0) = Split(Target, "/")(2): _
    Target = Split(Target, "/")(0)
'
Application.EnableEvents = True
'
End Sub
35rstam.xlsm (59.59 Ko)


A+

C'est génial un grand merci à toi!

Je rencontre un bug en voulant faire le ménage sur le tableau.

En sélectionnant plusieurs cellule et Suppr une erreur excution "13" incompatibilité de type apparait

2022 02 20 16 30 21 microsoft visual basic pour applications rstam xlsm arret feuil7 code

En tout début de macro, rajoute la ligne suivante :

If target.count >1 then exit sub

(hello Curulis ! Quand j'ai vu que tu passais par-là, je t'ai laissé faire, il valait mieux )

Fallait pas, JoyeuxNoël : il y a toujours plus d'idées dans deux têtes !
Prochaine fois, je te laisse 15' d'avance !


A+

Rechercher des sujets similaires à "target value macro"