Excel : Utilisation de macros avec cellule active

Fermé
The_PEagle Messages postés 4 Date d'inscription samedi 5 mars 2016 Statut Membre Dernière intervention 6 mars 2016 - 5 mars 2016 à 16:38
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 6 mars 2016 à 17:13
Bonjour à tous,
je cherche à développer une macro pour excel, mais je ne suis pas du tout à l'aise avec ces dernières et les tutoriels que j'ai pu voir ne me donnent pas de réponses.

Sur ma fiche excel, il y a une série de calculs, je voudrais qu'en cliquant sur une cellule, le logiciel me face automatiquement un calcul et mette le résultat en B1 (pour l'exemple).

Cependant la formule du calcul nécessite que je connaisse l'adresse (E8 par exemple) de la cellule sélectionnée, et que ce calcul ne se fasse que sur une certaine plage (E8 à Z26 par exemple).

Je vais donner un exemple concret:
En sélectionnant I6, je veux que le logiciel mette dans la cellule B1 le résultat de I2/(J6-I6).
De même si je sélectionne Q23, l'opération sera Q2/(R23-Q23).

Quelqu'un pourrait il me décrire la procédure à utiliser s'il vous plaît?

Merci

(Je suis sur Excel 2010, le mode développeur est activé)
A voir également:

6 réponses

Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 412
Modifié par Vaucluse le 5/03/2016 à 17:23
Bonjour
je suis peu doué e VBA mais peut être en utilisant les positions relatives, dans le code de la feuille (pas dans un module):

Target.cells.offset (ligne, colonne).value= votre calcul

ligne étant le nombre de ligne depuis a cellule "mére" jusqu'à celle résultat, et idem pour colonne

La qualité de la réponse dépend surtout de la clarté de la question, merci!
0
The_PEagle Messages postés 4 Date d'inscription samedi 5 mars 2016 Statut Membre Dernière intervention 6 mars 2016
5 mars 2016 à 17:25
Mon problème est que je ne sais pas comment récupérer les "coordonnées" de la cellule sélectionnée, sinon, le offset (ou même le reste ne devrait pas être un problème).

Le problème à le faire dans la feuille, serait la facilité de lecture puisqu'il m'imposerait un tableau (sur cette feuille ou une autre) et qu'il serait difficile de s'y repérer
0
eriiic Messages postés 24595 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 2 septembre 2024 7 235
5 mars 2016 à 17:40
Bonjour,

je te conseille le double-clic :
Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
plutôt que la simple sélection :
Sub Worksheet_SelectionChange(ByVal Target As Range)
à toi de voir.

L'un comme l'autre te passe le range de la cellule ayant déclenché l'événement, c'est Target.
Après tu peux interroger ses propriétés, par exemple :
Target.value
Target.address
Target.column
Target.row etc

En dehors de ces événements fournissant Target la cellule active est ActiveCell tout simplement, ou bien Selection si tu veux la plage sélectionnée, avec les même propriétés.
eric
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 306
Modifié par michel_m le 5/03/2016 à 17:50
Bonsoir

Option Explicit
'---------------------------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("E8:Z26")) Is Nothing Then
Range("B1") = Cells(2, Target.Column) / (Target - Target.Offset(0, 1))
End If
End Sub


A placer dans le module "feuille" de la feuille active

 Michel
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
The_PEagle Messages postés 4 Date d'inscription samedi 5 mars 2016 Statut Membre Dernière intervention 6 mars 2016
5 mars 2016 à 19:10
Merci à tous, je tenterai ça, j'ai cependant des questions:
dans les variables, je comprends Target, le Range il faut bien le définir (il se peut que je dise des bêtises, merci de me prévenir :) ) par contre, tu mets un cancel Eric, je ne le connais pas, que fait-il?
De même on les mets ByVal, quelle est la différence entre ByVal et ByRef ?

Merci à vous en tout cas
0
eriiic Messages postés 24595 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 2 septembre 2024 7 235
Modifié par eriiic le 5/03/2016 à 23:52
C'est vba qui met tout ça.
Dans un module feuille choisis Worksheet dans la liste de gauche (en haut du code), la liste de droite te fournit les événements feuille. Si tu cliques dessus vba t'écrit le Sub avec les paramètres qu'il passe
Si tu mets Cancel=True dans le code l'événement est annulé. Pour le double-clic le passage en mode édition de la cellule est annulé.
Dans le module ThisWorbook tu trouveras les événements classeur.
Cours VBA
0
The_PEagle Messages postés 4 Date d'inscription samedi 5 mars 2016 Statut Membre Dernière intervention 6 mars 2016
6 mars 2016 à 17:01
oui, j'ai vu que VBA auto remplissait plutôt bien.
C'est juste que j'aime comprendre le fonctionnement et que je me demande quelle sera la différence entre un objet passé en valeur et un objet passé en référence
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 306
6 mars 2016 à 17:13
Tiens, j'ai encore perdu du temps par solidarité

The_eagle en black list
0