IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Comment exécuter une macro sur une ligne spécifique (jamais la même, bien sûr)


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mai 2020
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2020
    Messages : 150
    Par défaut Comment exécuter une macro sur une ligne spécifique (jamais la même, bien sûr)
    Bonsoir, Grands Manitous de tous poils et de toutes horizons :

    Je dispose d'une grande base de données standard : des montagnes de lignes, et énormément de colonnes.
    Le rêve serait de pouvoir, arbitrairement, au gré de mes scrolls de la base, sélectionner telle ou telle ligne (une seule à la fois), et d'exécuter une macro d'export de certaines des cellules la composant vers un autre classeur.
    La macro d'export bien sûr n'est rien, c'est le fait de pouvoir l'exécuter sur une ligne précise ou une autre, à la volée, qui serait génial.
    Faut-il un bouton par ligne ? Ou : je sélectionne la ligne puis j'exécute ? Ce serait un sacré outil qui me ferait gagner un temps de ouf.
    On ne remerciera jamais assez ceux qui donnent de leur temps, de leur science et de leur patience : donc merci pour vos éventuelles lumières !
    Cheers,

    Marc.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par MarcJinger Voir le message
    Bonjour,

    Vous pourriez utiliser l'événement Worksheet_BeforeRightClick dans le module de votre onglet pour lancer votre macro, comme dans l'exemple dans ce fichier. Un clic droit à l'intérieur du tableau lance une macro.

  3. #3
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mai 2020
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2020
    Messages : 150
    Par défaut Puissant ! Mais je ne sais pas (encore) comment l'intégrer à ma macro
    Citation Envoyé par Eric KERGRESSE Voir le message
    Bonjour,

    Vous pourriez utiliser l'événement Worksheet_BeforeRightClick dans le module de votre onglet pour lancer votre macro, comme dans l'exemple dans ce fichier. Un clic droit à l'intérieur du tableau lance une macro.
    C'est top effectivement mais je ne vois pas trop comment faire la jonction avec ma macro : j'ai poussé le vice à coller mes data dans la ZoneDeSaisie, donc bien sûr pas de problème mais justement : "Macro lancée à partir de la ligne X!" marche très bien, mais comment lancer "ma" macro effectivement ? Macro pourrie censée n'effectuer que des copier/coller aller/retours depuis ladite ligne vers une autre base dans un autre classeur. Pour l'instant je n'avais testé ce début de macro que sur une ligne lambda, donc les cellules "fixes" sont dans le code, comment rende ça dynamique ? De toute façon pour l'instant elle ne se lance pas du tout

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par MarcJinger Voir le message

    Dans le module de l'onglet, remplacer la macro LancementMacro par la vôtre. A voir si votre macro est paramétrique, c'est à dire qu'on doit lui donner le numéro de ligne pour qu'elle fonctionne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    Option Explicit
     
    Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
     
        If Target.Count > 1 Then Exit Sub
     
        If Not Intersect(Target, Range("ZoneDeSaisieDuTableau")) Is Nothing Then
     
     
           LancementMacro Target.Row
     
           Cancel = True
     
        End If
     
    End Sub

  5. #5
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par MarcJinger Voir le message
    mais je ne trouve pas comment intégrer cela à ma macro (très simple) existante
    Si tu ne montres pas cette macro "très simple", il sera difficile de t'expliquer comment l'adapter.

  6. #6
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mai 2020
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2020
    Messages : 150
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Si tu ne montres pas cette macro "très simple", il sera difficile de t'expliquer comment l'adapter.
    Pardon, pas vu le message : oui exact, en voici un extrait (après c'est de la répéte), merci ! :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    Attribute VB_Name = "Module1"
    Sub EssaiExportTableauKG()
    Attribute EssaiExportTableauKG.VB_ProcData.VB_Invoke_Func = " \n14"
    '
    ' EssaiExportTableauKGMacro
    '
        Windows("BeforeRightClic2Essssai.xlsm").Activate
        Range("B17").Select
        Selection.Copy
        Windows("Classeur60.xlsm").Activate
        Range("E6").Select
        ActiveSheet.Paste
        Windows("BeforeRightClic2Essssai.xlsm").Activate
        Range("C17").Select
        Application.CutCopyMode = False
        Selection.Copy
        Windows("Classeur60.xlsm").Activate
        Range("F6").Select
        ActiveSheet.Paste
        Windows("BeforeRightClic2Essssai.xlsm").Activate
        Range("D17").Select
        Application.CutCopyMode = False
        Selection.Copy
        Windows("Classeur60.xlsm").Activate
        Range("G6").Select
        ActiveSheet.Paste
        Windows("BeforeRightClic2Essssai.xlsm").Activate
        Range("E17").Select
        Application.CutCopyMode = False
        Selection.Copy
        Windows("Classeur60.xlsm").Activate
        Range("I6").Select
        ActiveSheet.Paste
        Windows("BeforeRightClic2Essssai.xlsm").Activate
        Range("F17").Select
        Application.CutCopyMode = False
        Selection.Copy
        Windows("Classeur60.xlsm").Activate
        Range("L6").Select
        ActiveSheet.Paste
        Windows("BeforeRightClic2Essssai.xlsm").Activate
     
    End Sub

  7. #7
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mai 2020
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2020
    Messages : 150
    Par défaut
    10.000 merci, Eric : non seulement vos conseils valent de l'or mais en plus vous percutez grave ! Quelle aide, merci je vais bricoler tout ça et ça va le faire !
    Cheers !

    Citation Envoyé par pijaku Voir le message
    Même message qu'à Eric

    10.000 merci, Franck: non seulement vos conseils valent de l'or mais en plus vous percutez grave ! Quelle aide, merci je vais bricoler tout ça et ça va le faire !!!!

    Citation Envoyé par Menhir Voir le message
    Si tu ne montres pas cette macro "très simple", il sera difficile de t'expliquer comment l'adapter.
    Merci beaucoup Menhir, ça va le faire, bonne fin de semaine !

  8. #8
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mai 2020
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2020
    Messages : 150
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    Dans le module de l'onglet, remplacer la macro LancementMacro par la vôtre. A voir si votre macro est paramétrique, c'est à dire qu'on doit lui donner le numéro de ligne pour qu'elle fonctionne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    Option Explicit
     
    Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
     
        If Target.Count > 1 Then Exit Sub
     
        If Not Intersect(Target, Range("ZoneDeSaisieDuTableau")) Is Nothing Then
     
     
           LancementMacro Target.Row
     
           Cancel = True
     
        End If
     
    End Sub
    Hello à nouveau Eric, merci pour votre patience
    Le moins que l'on puisse dire est que la magnificente logique de VBA ne m'habite pas encore suffisamment : le lien ne s'établit avec ma macro, il doit manquer de ma part une instruction évidente "or something"...
    J'ai bien renommé LancementMacro en EssaiExportTableauKGMacro, mais "no call"... Et effectivement il va certainement falloir repérer les cellules concernées sur la ligne sélectionnée peut-être vs. les positions de colonnes ?
    Bref je suis un peu en vrille, mais on va replaquer, j'en suis sûr

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par MarcJinger Voir le message
    ZoneDeSaisieDuTableau est l'aire du tableau, si tu souhaites que la macro se lance de n'importe quelle cellule.
    Comme indiqué par Menhir (), ce serait intéressant que tu mettes ton code en ligne pour voir ce qu'il manque pour que cela fonctionne.

  10. #10
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par MarcJinger Voir le message
    La macro d'export bien sûr n'est rien, c'est le fait de pouvoir l'exécuter sur une ligne précise ou une autre, à la volée, qui serait génial.
    Faut-il un bouton par ligne ? Ou : je sélectionne la ligne puis j'exécute ?
    C'est un procédé que j'utilise dans beaucoup de macros.
    Il suffit d'un seul bouton et, dans la macro, d'utiliser l'objet Selection qui référence la cellule sélectionnée au moment où la macro est lancée.

    Pour plus de sécurité, je commence généralement une telle macro par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim CC As Range
    Set CC = Selection
    Ca permet de ne pas risquer de perdre la sélection choisie au cas où celle-ci change en cours d'exécution.

    Pour avoir le numéro de la ligne, il suffit d'utiliser la propriété Row de cette sélection.

    Par exemple, si tu as une liste sur les colonnes A à D et que tu veux un bouton qui mette en rouge la ligne de la cellule en cours :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub MisEnRouge()
       Cells(Selection.Row, 1).Resize(1, 4).Interior.Color = 255
    End Sub

  11. #11
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mai 2020
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2020
    Messages : 150
    Par défaut
    Citation Envoyé par Menhir Voir le message
    C'est un procédé que j'utilise dans beaucoup de macros.
    Il suffit d'un seul bouton et, dans la macro, d'utiliser l'objet Selection qui référence la cellule sélectionnée au moment où la macro est lancée.
    Merci beaucoup pour ta réponse,
    mais je ne trouve pas comment intégrer cela à ma macro (très simple) existante, réalisée pour le moment sur la base d'une ligne lambda (elle ne fait que copier certaines cellules de ladite ligne et les colle dans une autre base, dans un autre classeur.
    Actuellement par exemple la macro se base sur la ligne 4 donc cellules B4 (aller-retour),puis D4 (aller-retour), Z4 (aller-retour) etc. alors qu'évidemment il faut qu'elle se bas sur la ligne choisie...
    (Je vous avais prévenu, c'est la macro la plus basique du monde, mais tellement utile... :-) )

  12. #12
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Dans ta macro, par exemple, Range("B4") peut être remplacé par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim CC As Range 'reprise du code de Menhir
    Set CC = Selection
    'petite sécurité...
    If Not CC Is Nothing Then
       'ICI, l'équivalant de B4 avec la ligne sélectionnée :
       MsgBox Range("B" & CC.Row).Value
       'ou encore :
       MsgBox Cells(CC.Row, 2).Value '2 = 2ème colonne= B
    End If

  13. #13
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mai 2020
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2020
    Messages : 150
    Par défaut
    Citation Envoyé par pijaku Voir le message
    Bonjour,

    Dans ta macro, par exemple, Range("B4") peut être remplacé par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim CC As Range 'reprise du code de Menhir
    Set CC = Selection
    'petite sécurité...
    If Not CC Is Nothing Then
       'ICI, l'équivalant de B4 avec la ligne sélectionnée :
       MsgBox Range("B" & CC.Row).Value
       'ou encore :
       MsgBox Cells(CC.Row, 2).Value '2 = 2ème colonne= B
    End If
    Merci Pijaku, faut-il repréciser cela à chaque aller-retour de copie/collage de chaque cellule entre les deux bases ? (j'imagine que oui ?)

  14. #14
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par MarcJinger Voir le message
    Merci Pijaku, faut-il repréciser cela à chaque aller-retour de copie/collage de chaque cellule entre les deux bases ? (j'imagine que oui ?)
    Le mieux étant de ne pas faire des allers/retours...

    Exemple de macro à lancer depuis le classeur source :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Dim wSource As Workbook, wDest As Workbook
    Dim fSource As Worksheet, fDest As Worksheet
    Dim CC As Range
     
    Set wSource = Workbooks("BeforeRightClic2Essssai.xlsm")
    Set fSource = wSource.Sheets("Feuil1")
    Set wDest =Workbooks("Classeur60.xlsm")
    Set fDest = wDest.Sheets("Feuil1")
    Set CC = Selection
    'petite sécurité...
    If Not CC Is Nothing Then
       fSource.Range("B" & CC.Row).Copy fDest.Range("E6")
       fSource.Range("C" & CC.Row).Copy fDest.Range("F6")
       fSource.Range("D" & CC.Row).Copy fDest.Range("G6")
      'etc...
    End If
    Set wSource = Nothing
    Set fSource = Nothing
    Set wDest =Nothing
    Set fDest = Nothing
    Set CC = Nothing

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 05/02/2015, 07h36
  2. Comment exécuter une ligne de commande ?
    Par tarekos dans le forum C#
    Réponses: 26
    Dernier message: 27/06/2008, 15h44
  3. Réponses: 1
    Dernier message: 26/07/2006, 11h23
  4. Débutant : Comment ajouter une ligne à un DataGrid sur VB ?
    Par gamool dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 23/11/2005, 23h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo