Commande de démarrage d'une macro

fax32 Messages postés 27 Statut Membre -  
OlivrT Messages postés 323 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Très gentiment, Michel m'a créer une macro qui permet de rechercher et d'effacer sur une autre feuille, la ligne commençant par la valeur sélectionnée en feuille active.

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

'détruit dans la feuille la ligne correspondant à la valeur sélectionnée en feuille active
With Sheets("stocks")
.Rows(.Columns(1).Find(Target.Value, .Range("A65536"), xlValues).Row).Delete
End With

La commande en première ligne de la macro permet en cliquant sur une cellule de déclencher la macro. Or, il faudrait que je puisse déclencher la macro par un "Ctrl+V" par exemple,et non pas dés que je clique sur la cellule.
Quelqu'un pourrait-il me dire comment faire ? Je n'ose plus importuner Michel.
Par avance un grand Merci.
Configuration: Windows XP
Firefox 3.5.5

2 réponses

  1. OlivrT Messages postés 323 Date d'inscription   Statut Membre Dernière intervention   36
     
    Bonjour,
    il a en effet pu faire cela car il utilise l'évènement (VBA) associé. Pour pouvoir faire ce que tu désires il faudrait disposer d'un évènement "KeyDown" qui n'existe pas pour une Sheet Excel :-(
    Mais pourquoi donc tu veux associé cette combinaison de touche, déjà utilisé par Excel et Windows, à ta macro ?
    Ce que tu peux faire c'est par exemple Ctrl + Shift + V ... en sélectionnant ta macro dans le menu, tu choisis les options et tu associes cette combinaison de touches.
    0
    1. Fax32
       
      Bonjour
      Tout d'abord merci d'avoir répondu à mon message.

      Tu me dis : "Il a en effet pu faire cela car il utilise l'évènement (VBA) associé. Pour pouvoir faire ce que tu désires il faudrait disposer d'un évènement "KeyDown" qui n'existe pas pour une Sheet Excel :-( "

      Je dois t'avouer que j'ai déjà décroché ! Je suis comme une poule devant un écrou de 12.
      En revanche je pense avoir compris la suite. Je ne veux pas spécialement utiliser cette combinaison de touches, mais je n'arrive pas à sélectionner ma macro dans le menu car dès que je la nomme, elle ne fontionne plus.

      Voici la totalité de la macro :


      Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

      'si on sélectionne hors A1:10000 ou si la feuille active est "ventes" ou "stok" :sortie de la macro
      If Intersect(Target, Range("A1:A10000")) Is Nothing _
      Or ActiveSheet.Name = "ventes" Or ActiveSheet.Name = "stock" Then Exit Sub

      'détruit dans la feuille la ligne correspondant à la valeur sélectionnée en feuille active
      With Sheets("stock")
      On Error GoTo erreur:
      .Rows(.Columns(1).Find(Target.Value, .Range("A65536"), xlValues).Row).Delete
      End With

      'report dans la 1° ligne vide de "ventes" des valeurs de la ligne sélectionnée dans feuille active
      With Sheets("ventes")
      .Rows(.Range("A65536").End(xlUp).Row + 1) = Rows(Target.Row).Value
      End With

      'ligne de la sélection feuille active
      lig = Target.Row
      'tableau des num de colonnes à effacer
      cellule = Array(3, 4, 6, 7, 9, 10, 12, 13, 15, 16, 18, 19, 21)

      'boucle sur le tableau en effacant le contenu
      For cptr = 0 To UBound(cellule)
      Cells(lig, cellule(cptr)).ClearContents
      Next

      'colorie la ligne en gris
      Rows(lig).Interior.ColorIndex = 48
      Exit Sub

      erreur:
      MsgBox Target & " inconnu dans le stock"
      End Sub

      Si je nomme cette macro pour l'avoir dans le menu, par exemple si en tête je rajoute

      Sub Objets_vendus()
      ' Objets_vendus Macro
      ' Macro enregistrée le 15/10/2009 par

      Elle ne fonctionne pas et me dis "End sub attendu" avant la première ligne de la macro.
      J'espère ne pas avoir été trop confus.
      Amicalement
      0
  2. OlivrT Messages postés 323 Date d'inscription   Statut Membre Dernière intervention   36
     
    Bonjour,
    désolé de répondre si tard, je donnais une formation à Paris.
    Ne t'inquiète pas sur tu ne connais pas l'event Keydown :=) c'est du jargon de développeur.
    Pour revenir à ta macro, ben elle marchera si :

    Tu ajoutes en effet un "End Sub" :

    Sub MaMcro
    'bla bla bl
    End Sub

    qui est manquant dans ton code.
    Quelques petites erreurs aussi :
    il manque en dessous de :
    "Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) "

    On error goto erreur

    avant le "Exit Sub" tu dois écrire :
    "Sortie:"

    remplace : "MsgBox Target & " inconnu dans le stock"
    par
    Msgbox Err.Description
    Err.Clear
    Resume Sortie

    Le plus surprenant c'est que dans ton code tu écris que si le nom de ta sheet (heu ... ta feuille excel hun ;=)
    vaut "ventes" tu sors de la procédure alors que plus loin tu formates ta page qui porte le même nom ????
    .... ActiveSheet.Name = "ventes" Or ActiveSheet.Name = "stock" Then Exit Sub

    ...With Sheets("ventes")
    .Rows(.Range("A65536").End(xlUp).Row + 1) = Rows(Target.Row).Value
    End With

    Si tu fais ça tu ne rentreras jamais dans ta macro !

    Le plus simple avec les macros :
    1) Tu choisis dans le menu "Outils", "Macro", "Nouvelle macro"
    2) Quand tu as finis ta sélection tu cliques sur le bouton "Stop" qui est affiché à l'écran dans une barre d'outil flotante.
    3) Pour trouver le code générée par ta macro : "Outils", "Macro", "Visual Basic Editor", il devrait y avoir sur la gauche de l'écran un ...Project dans lequel se trouve un fichier intitulée Module1, dans lequel tu trouveras ta macro (Macro1 si tu as choisit le nom proposé par Excel)
    0