Excel : Utilisation de macros avec cellule active

The_PEagle Messages postés 4 Statut Membre -  
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   -
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

  1. Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 453
     
    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
  2. The_PEagle Messages postés 4 Statut Membre
     
    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
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
  4. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. The_PEagle Messages postés 4 Statut Membre
     
    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
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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
    2. The_PEagle Messages postés 4 Statut Membre
       
      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
  7. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Tiens, j'ai encore perdu du temps par solidarité

    The_eagle en black list
    0