Bonjour,
je voudrai savoir s'il est possible de déclencher automatiquement une macro lorsque le contenu d'une cellule est modifiée, sans avoir à cliquer sur un bouton.
merci
Version imprimable
Bonjour,
je voudrai savoir s'il est possible de déclencher automatiquement une macro lorsque le contenu d'une cellule est modifiée, sans avoir à cliquer sur un bouton.
merci
Bonjour,
Oui c'est possible par macro événementielle au sein de la feuille
Code:
1
2
3
4
5
6
7 Private Sub Worksheet_Change(ByVal Target As Range) End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) End Sub
ok je vais chercher une doc la dessus pour comprendre
en fait j'aurai un grand nombre de cellule (toute une colonne) sur lesquelles je voudrai déclencher cette macro lorsque la cellule est modifiée, le nombre élevé ne pose pas de pb ?
Voici un exemple pour étudier la question
Pièce jointe 418799
par la même occasion il existe des macros événement sur le classeur
Bonjour le fil, bonjour le forum,
Le problème avec ce genre de macro événementielle, c'est qu'elle se déclenche tout le temps ! Il est donc souvent utile d'en limité l'action à une plage (cellule/1, plage/2, ligne(s)/3, Colonne(s)/4. On utilise pour cela les codes suivant :
1- Action limitée à la cellule A1 :
2- Action limitée à la plage A1: D20 :Code:
1
2
3
4 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub 'le reste du code End Sub
3- Action limitée aux lignes après la ligne 5 :Code:
1
2
3
4 Private Sub Worksheet_Change(ByVal Target As Range) If Application.Intersect(Target, Range("A1:D20")) Is Nothing Then Exit Sub 'le reste du code End Sub
4- Action limitée à la colonne A :Code:
1
2
3
4 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row < 6 Then Exit Sub 'le reste du code End Sub
[Édition]Code:
1
2
3
4 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column > 1 Then Exit Sub 'le reste du code End Sub
Salut, Igloobel, nos post se sont croisés...
merci, je vais étudier tout ça, je veux affecter à la colonne F mais à partir de la ligne 6, je suppose donc qq chose comme cela :
je mets cette macro où? dans un module? en la créant par la fonction "développeur" ?Code:
1
2
3
4
5
6
7 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column < 5 And _ Target.Column > 7 And _ Target.Row < 5 Then Exit Sub mon code correspondant à l'action voulu End Sub
Salut Thautheme,
Effectivement mon exemple poster parle de la même chose en espérant que cela sied à notre ami retraite83
Que je suis bête, oui merci, j'ai déjà utilisé une fois (dans la feuille --> visualiser le code)
bon je regarde tout ça de près merci, je reviens quand ça marche
Après pas mal d'essais infructueux voilà la solution pour qu'un calcul se fasse automatiquement en colonne L lorsqu'une valeur est modifiée en colonne I ou J de la même ligne et ce à partir de la ligne 6
merci à tous pour vos lumièresCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) ' à mettre dans le code de la feuille Dim i As Integer, derLig As Integer If Target.Column = 9 Or _ ' colonne I Target.Column = 10 And _ ' ou colonne J Target.Row > 5 Then ' à partir de la ligne 5 With Cells(Rows.Count, "C").End(xlUp).MergeArea: derLig = .Cells(.Cells.Count).Row: End With ' recherche de la dernière ligne non vide pour ne pas balayer toutes les lignes vides For i = 6 To derLig Range("L" & i) = Range("I" & i) - Range("J" & i) ' le calcul en cellule L Next i Else End If End Sub
PS : par contre je ne saisi pas la différence entre
etCode:
1
2
3 Private Sub Worksheet_Change(ByVal Target As Range) End Sub
Code:
1
2
3
4
5 Private Sub Worksheet_SelectionChange(ByVal Target As Range) End Sub