Excel : Utilisation de macros avec cellule active

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é)

6 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    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!
    1. 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
      1. Contributeur
        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
        1. Contributeur
          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
          1. 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
            1. Contributeur
              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
            2. 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
          2. Contributeur
            Tiens, j'ai encore perdu du temps par solidarité

            The_eagle en black list