Exécution d'une macro à chaque changement dans une cellule

  • Initiateur de la discussion Kizman
  • Date de début
K

Kizman

Guest
Salut,

Je cherche le moyen d'exécuter une macro à chaque fois que l'on fait une modification dans une cellule ou dans une gammes de cellules.


Merci...

Kizman
 
S

STéphane

Guest
bonjour

il faut utiliser une des procédures évènementielles de l'objet Feuille de calcul , c'est à dire une procédure qui s'exécute à l'avènement de certains évènements ;-)))

pour connaître ces évènements, tu peux procéder comme suit :
* positionne-toi sur une feuille de calcul
* clique à droite sur l'onglet pour faire apparaître un menu contextuel
* choisit l'option Visualiser le code
=>
Visual Basic Editor se lance et laisse apparaître une feuille de code correspondant à ta feuille de calcul. Il a déjà écrit deux déclarations, celle de début et de fin de la procédure évènementielle dont tu as besoin, ça tombe bien. Voilà ce que tu dois normalement voir

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)

End Sub

Tu vas pouvoir y inscrire ce que tu veux. Je te donne une ou deux infos.
la variable Target représente une variable objet qui est en fait la cellule qui vient d'être sélectionnée. Tu peux utiliser des instructions du genre suivant :

if target.column=5 then msgbox "vous avez sélectionné une cellule de la colonne 5"

if target.address(0,0)="B10" then msgbox "vous avez sélectionné B10"

If Not Application.Intersect(Target, Range("A1:C10")) Is Nothing Then
MsgBox "vous avez sélectionné une cellule de la plage A1:C10"
End If


je pense que ceci devrait t'éclairer un peu.

encore un ou deux exemples d'instruction à employer dans ce type de procédure évènementielle

If Target.Address = Columns(Target.Column).Address Then MsgBox "vous avez sélectionné une colonne"
If Target.Address = rows(Target.row).Address Then MsgBox "vous avez sélectionné une ligne"

ou peut-être faut-il préférer cela (je ne pense pas)
if target.cells.count=655366 and target.columns.count=1 then msgbox "vous avez sélectionné une colonne"

if target.cells.count=256 and target.rows.count=1 then msgbox "vous avez sélectionné une colonne"


bye
Stéphane
tu peux utiliser
 
K

Kizman

Guest
OK. Merci pour ton aide.

Voyons ensemble un exemple concret...

La macro ci-dessous permet de faire un petit calcul:
à chaque modification dans une cellule de la 1ère colonne, on place juste à droite la valeur de la cellule multipliée par 5.


Private Sub Worksheet_Change(ByVal Target As Range)
a = Target.Address(0, 0)

If Target.Column <> 1 Then
Exit Sub
End If

Range(a).Offset(0, 1).Value = Target * 5

End Sub

Le seul problème est que, si je sélectionne plusieurs cellules de la 1ère colonne, alors le programme plante...

Tu vois un remède?

Merci...


Kizman
 
K

Kizman

Guest
Eh bien, ce n'est pas vraiment ce que je veux faire, en fait.

Disons par exemple que j'ai un ensemble de valeurs que je copie et colle sur cette 1ère colonne, j'aimerais que le calcul souhaité se fasse pour chacune de ces cellules, et que l'on ait le résultat dans la colonne de droite, en regard des cellules contenant des valeurs...
 
C

Chris

Guest
Question idiote : pourquoi la cellule de droite ne se calcule par toute seule avec une formule genre :
=si(a2<>1;a2*5;) dans la cellule b2 ?
Je ne vois pas l'intéret du vba dans ce cas mais tu dois en avoir un.
Chris
 
K

Kizman

Guest
En effet. En fait, là ce n'est qu'un exemple pour que je puisse en comprendre le principe.
Il est clair que si le programme devait se contenter de ça, des formules pourraient suffire (quoiqu'elles alourdiraient quelque peu le fichier...).



Cette explication te permet-elle d'enlever le point d'interrogation qui résidait en toi?





Kizman...
 
S

:-s

Guest
fais a partir d'excel ( enregistrez macro....)

Range("B1").Select
ActiveCell.FormulaR1C1 = "=PRODUCT(RC[-1],5)"
Range("B1").Select
Selection.AutoFill Destination:=Range("B1:B8"), Type:=xlFillDefault
Range("B1:B8").Select

--- prends en entrée les elements de la premiere colonne, les multiplie par 5 et mets les resultats de B1 a B8 ( zone de destination definie manuellement...)

si ca peut aider...
 

Discussions similaires

Réponses
15
Affichages
746
Compte Supprimé 979
C
Réponses
10
Affichages
203

Statistiques des forums

Discussions
312 165
Messages
2 085 884
Membres
103 017
dernier inscrit
pierre noyer