Peut-on lancer une macro lorsque je modifie la valeur d'une case ( vénement modif???), je souhaite appliquer cela à un certain nb de cases.
Version imprimable
Peut-on lancer une macro lorsque je modifie la valeur d'une case ( vénement modif???), je souhaite appliquer cela à un certain nb de cases.
Peut-être pourrais-tu tester si les cases à modifier sont sélectionnées puis le cas échéant tu vérifies si le résultats de la case et identique ke précédemment. En gros dés qu'une case est sélectionnée, tu enregistres sont son contenu puis lorsque la case n'est plus sélectionnée tu testes si il y a égalité entre le contenu initial et le nouveau. Si ce n'est pas le cas tu lances la maccro.
Bon je suis débutant alors un membre plus chevronné te donnera ptet une solution plus efficace mais c'est une piste logique.
Bon courage ;)
tiens j'ai eu la même question avant-hier... voir événement Worksheet_change :
[VBA-E] condition dans les cellules
;)
Je suis allé sur le post mentionné, et j'ai trouvé le code suivant
Par contre je souhaite le faire évoluer de la façon suivante, la zone à surveiller est a14:a59, par contre je souhaite récupérer la case modifiée car j'en ai besoin pour générer la modification de la case sur la même ligne mais 2 colonnes aprés en lancant une macro.Code:
1
2
3
4
5
6
7
8
9
10
11
12 Private Sub Worksheet_Change(ByVal Target As Range) 'On surveille cellule C1.. If Not (Intersect(Target, [C1]) Is Nothing) Then If Target.Address = [C1].Address And [C1] = "a" Then Range("C2:C20").Value = "a" End If End If End Sub
Merci de m'aider à modifier ce code car je n'arrive pas à trouver la solution
Regarde le profil de la fonction Worksheet_Change, tu verras qu'il met en oeuvre le paramètre Target...
La cellule que tu viens de modifier a pour range "Target"
Exemple si tu modifies "A1" alors Target vaut : Range("A1")
Si tu veux surveiller une zone ça ne pose aucun souci, il suffit de vérifier que la case que tu changes (Target) n'intersecte pas ta zone de surveillance, c'est à dire range("a14:a59")
Edit:Moi-même grillé par catbull ;)
Target est une cellule.
Il te suffit de t'y référer avec un offset.
Edit --> grillé par le cucurbitacé.
Aves l'aide en ligne j'ai compris le fonctionnement de Intersect mais pon probléme réside plutôt dans la syntaxe, j'ai essayé la suivante mais cela ne passe pas
probléme d'incompatibilté de type pour la zone en rougeCode:
1
2
3
4
5 If Not (Intersect(Target, [a14:a59]) Is Nothing) Then If Target.Address = [a14:a59].Address And [a14:a59] = "VIDE" Then Range(C2).Value = "a" End If End If
merci
Tu cherches bien compliqué:
Code:
1
2
3 If Target.Value = "VIDE" Then Target.Offset(0, 2) = "a" End If
Quand tu écris ça :
Tu auras forcément une incomptabilité, étant donné que target renvoie l'adresse d'une seule cellule. Comme veux tu comparer l'adresse d'unce cellule à l'adresse d'un plage?Code:If Target.Address = [a14:a59].Address
En plus à quoi il sert ce test?Je comprends pas trop son intérêt...
Effectivement j'ai cherché compliqué inutilement le code ci-dessous semble répondre à mon besoin, je fais quelques essais et je mettrai ce poste en résolu
Code:
1
2
3 If Target.Value = "VIDE" Then Target.Offset(0, 2) = "a" End If