VBA revenir sur la dernière cellule modifiée

JB -  
Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

j'ai une macro excel qui me permet d'ajouter 1, 2 ou 3 à une cellule (parmi 10).
J'aimerais pouvoir créer une seconde macro qui sélectionnerai la dernière cellule modifiée afin de pouvoir annuler en cas de fausse manipulation.

Merci de bien vouloir m'aider sur ce problème.
Je n'ai pas trouvé la solution parmi tous les forums que j'ai visité.

Cordialement.
JB

6 réponses

  1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    Bonjour,

    En utilisant la même macro (avec un argument adéquat) c'est plus simple.
    Il suffit d'utiliser des variables statiques (Static) pour mémoriser l'adresse de la cellule qui vient d'être modifiée et sa valeur et/ou annuler la modification précédente
    0
    1. JB
       
      Merci pour la réponse rapide !
      Ca reviendrait à avoir une confirmation avant la modification ?
      Je ne maitrise que très peu le VBA et je ne connais pas l'utilisation des variables statiques...
      Voici un aperçu de mon code.
      Merci de m'indiquer où placer ces variables ?

      Sub un_coureur()
      '
      ' un_coureur Macro
      ' multiplie la distance par 1
      '
      Select Case ActiveCell.Value

      Case "VERT"
      GoTo couleurvert

      Case "JAUNE"
      GoTo couleurjaune

      Case "BLEU"
      GoTo couleurbleu

      Case "ROUGE"
      GoTo couleurrouge

      Case "VIOLET"
      GoTo couleurviolet

      Case "NOIR"
      GoTo couleurnoir

      Case "BLANC"
      GoTo couleurblanc

      Case "ORANGE"
      GoTo couleurorange

      Case "AUTRE 1"
      GoTo couleurautre1

      Case "AUTRE 2"
      GoTo couleurautre2

      End Select
      Exit Sub

      couleurvert:
      Range("E3").Select
      ActiveCell = ActiveCell + 1
      Range("H2").Select

      Exit Sub

      couleurjaune:
      Range("E4").Select
      ActiveCell = ActiveCell + 1
      Range("H2").Select

      Exit Sub

      couleurbleu:
      Range("E5").Select
      ActiveCell = ActiveCell + 1
      Range("H2").Select

      Exit Sub

      couleurrouge:
      Range("E6").Select
      ActiveCell = ActiveCell + 1
      Range("H2").Select

      Exit Sub

      couleurviolet:
      Range("E7").Select
      ActiveCell = ActiveCell + 1
      Range("H2").Select

      Exit Sub

      couleurnoir:
      Range("E8").Select
      ActiveCell = ActiveCell + 1
      Range("H2").Select

      Exit Sub

      couleurblanc:
      Range("E9").Select
      ActiveCell = ActiveCell + 1
      Range("H2").Select

      Exit Sub

      couleurorange:
      Range("E10").Select
      ActiveCell = ActiveCell + 1
      Range("H2").Select

      Exit Sub

      couleurautre1:
      Range("E11").Select
      ActiveCell = ActiveCell + 1
      Range("H2").Select

      Exit Sub

      couleurautre2:
      Range("E12").Select
      ActiveCell = ActiveCell + 1
      Range("H2").Select

      Exit Sub

      End Sub
      0
  2. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    Bonjour,

    Un exemple de ton fichier aurait été plus utile.
    Ne sachant pas comment est appelée cette procédure, voici une solution avec 2 boutons (un_coureur et annuler).
    Utiliser des boutons ne me semble pas une bonne méthode, mais tu est si avare d'explications...
    Option Explicit  
    
    Private Sub btnAnnuler_Click()  
     Call un_coureur(True)  
    End Sub  
    
    Private Sub btnUn_coureur_Click()  
     Call un_coureur  
    End Sub  
    
    Public Sub un_coureur(Optional Annulation As Boolean = False)  
    '  
    ' un_coureur Macro  
    ' multiplie la distance par 1  
    '  
    Static adr As String  
    
    If Annulation Then  
      If adr <> "" Then  
        Range(adr) = Range(adr) - 1  
        adr = ""  
      End If  
      Exit Sub  
    End If  
    
    Select Case ActiveCell.Value  
        
      Case "VERT"  
      adr = "E3"  
        
      Case "JAUNE"  
      adr = "E4"  
        
      Case "BLEU"  
      adr = "E5"  
        
      Case "ROUGE"  
      adr = "E6"  
        
      Case "VIOLET"  
      adr = "E7"  
        
      Case "NOIR"  
      adr = "E8"  
        
      Case "BLANC"  
      adr = "E9"  
        
      Case "ORANGE"  
      adr = "E10"  
        
      Case "AUTRE 1"  
      adr = "E11"  
        
      Case "AUTRE 2"  
      adr = "E12"  
    
      Case Else  
      adr = ""  
        
    End Select  
    Range(adr).Value = Range(adr).Value + 1  
    Range("H2").Select  
    
    End Sub


    Cordialement
    Patrice
    0
    1. JB
       
      encore une fois merci pour la rapidité de la réponse
      comment puis-je déposer un exemple de mon fichier ?
      l'idée des boutons est essentielle pour moi, puisque ce fichier est destiné à être utilisé par des élèves (donc susceptibles de se tromper)
      j'ai donc 3 boutons (1 coureur, 2 coureurs et 3 coureurs) que l'on doit cliquer mais j'ai créé également 3 boutons de correction d'erreur qui ne me satisfont pas (il faut cliquer d'abord sur la dernière cellule modifiée). merci pour ton aide
      0
    2. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
       
      Au lieu des boutons, on peut peut-être utiliser le clic gauche (ou le double clic) pour incrémenter et le clic droit pour décrémenter.
      C'est souvent plus simple mais il faut voir le fichier ...
      Tu peux déposer ton fichier sur http://cijoint.fr/ ou sur https://www.cjoint.com/ et mettre le lien obtenu dans ton prochain message

      Patrice
      0
    3. JB
       
      Voici le lien où est déposé mon fichier.
      http://www.cijoint.fr/cjlink.php?file=cj201110/cij1eGPeM7.xlsm  
      
      l'idée des clics est à retenir mais ne conviendra sans doute pas pour mon fichier.
      ce qui m'intéresse serait un unique bouton qui permettrait d'annuler la dernière modification en cas d'erreur sans avoir à cliquer sur la colonne "total points" puis le bouton correspondant.

      Encore merci pour le temps consacré à mon fichier.
      Cordialement.
      0
  3. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    Bonjour JB,

    Voici une proposition sans bouton :
    https://www.cjoint.com/?AJDourqr77U

    0
    1. jb
       
      Bonjour Patrice33740
      un grand merci pour le temps consacré à mon projet !
      ca me convient parfaitement et c'est très facile d'utilisation. Je suis emballé !
      J'ambitionne alors d'aller un peu plus loin : j'aimerais pouvoir récapituler sur une seconde feuille tous les résultats (à chaque nouveau clic, les résultats se renseignent au fur et à mesure sur la seconde feuille qu'on ne visionnera qu'à la fin de la séquence).
      Malgré mes efforts je n'arrive pas à incorporer dans ton code ces commandes.
      Peux-tu me proposer un début de réponse ?
      D'avance un immense merci !

      mon fichier (enfin le tien !) avec la seconde feuille :
      http://www.cijoint.fr/cjlink.php?file=cj201111/cij1Stcamw.xlsm
      0
  4. jb
     
    Je viens de consulter mes mails et ouah !
    D'abord un très grand merci pour le temps consacré à mon projet ! C'est tout à fait ce qui convient pour ce type de manipulation.

    Démarrer / Arrêter
    clic pour ajouter les points
    Annulation grâce clic droit !

    C'est simplement au top !

    Je vais maintenant m'atteler à améliorer mon projet.
    J'ai dans l'idée de créer une page de récapitulatif qui se mettrait à jour à chaque clic et qui serait associé au final avec un barème (je devrais m'en sortir avec la formule recherchev). Je me permettrais de continuer ce post si je rencontre des difficultés.

    Encore un immense merci !
    Cordialement.
    JB
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    Bonjour jb,

    Voici fichier avec le récapitulatif :
    https://www.cjoint.com/?AKcaoFLjg3C

    Le fonctionnement est le même, mais le principe est différent :
    - Les macros écrivent uniquement dans le récapitulatif.
    - La feuille live contient des formules en fonction du récapitulatif.
    0
    1. JB
       
      Patrice, c'est tout bonnement extra !!!
      Je te remercie vivement aussi bien pour la qualité de ton travail que pour la rapidité (je me rends pas compte mais pour un expert comme toi, c'est si facile que ça à faire ???!!!)
      Je tenterais de m'inspirer de ce fonctionnement pour mes futurs fichiers.
      Une nouvelle fois merci, je n'ai plus qu'à utiliser ce super outil avec mes élèves.
      0
  7. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    Bonjour,

    « je me rends pas compte ... c'est si facile que ça à faire ???!!! »
    C'est pas très difficile, ça prend un peu de temps à déboguer mais il est toujours intéressant de chercher à simplifier l'interface homme-machine.

    Au plaisir de te relire sur le Forum
    0