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 :

Déclencher une Macro par copie de données dans une feuille


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    physico-chimiste
    Inscrit en
    Avril 2016
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : physico-chimiste

    Informations forums :
    Inscription : Avril 2016
    Messages : 49
    Points : 37
    Points
    37
    Par défaut Déclencher une Macro par copie de données dans une feuille
    Bonjour,

    j'aimerais que ma macro (ici "compressibilité")se déclenche quand l'utilisateur aura copié une plage de données (dans mon cas "A1:K600") sur une feuille. Est-ce que c'est possible ?
    J'ai voulu essayer ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    If Target("K600").Value <> "" Then
    Module2.Compressibilité
    End If
     
    End Sub
    Mais ça bloque au niveau de la deuxième ligne. "Erreur 5 argument ou appel de procédure incomplet". Je débute...


    David

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Points : 1 562
    Points
    1 562
    Par défaut
    Bonjour,

    Quelques points:

    1. Il faut que votre code évènementiel soit associé à la feuille destination. Pour le vérifier, vous pouvez mettre un point d'arrêt dans votre code et vérifier que l'éxécution s'arrête
    2. Sous réserve du point 1, vous pouvez tester cela:

    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
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
    Dim RefRng As Range
     
        Set RefRng = Range("A1:K600") 'A adapter
        Debug.Print RefRng.AddressLocal
     
        Msgbox  RefRng.AddressLocal 'Pour bien vérifier que l'on passe par le code, à virer ensuite
     
        If Intersect(Target, RefRng) Is Nothing Then 
            Exit Sub   'On sort tout de suite si ce n'est pas une des cellules qui nous intéresse
        Else: Call  Compressibilité
     
        End If
     
    End Sub
    "Idéalement nous sommes ce que nous pensons. Dans la réalité, nous sommes ce que nous accomplissons." A.Senna
    et n'oubliez-pas de développer des .... sourires ^_^

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    physico-chimiste
    Inscrit en
    Avril 2016
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : physico-chimiste

    Informations forums :
    Inscription : Avril 2016
    Messages : 49
    Points : 37
    Points
    37
    Par défaut
    Merci pour votre réponse.

    Si pour le point 1 vous sous entendez qu'il faut que le code de "compressibilité" n'agisse que sur la feuille sur laquelle l’événement se passe, et bien ce n'est pas le cas.
    En effet la seule chose que fait "compressibilité" sur la feuille (disons "feuille 1") où les données sont copiées (et donc sur la feuille sur laquelle je cherche à créer l'évènement), c'est insérer en haut de cette feuille 1 une ligne contenant le titre de chaque colonne de cette plage données.
    Ensuite sur une feuille 2, le code copie une partie des données de la feuille 1 avec leur titres de colonnes, effectue des calculs sur ces données puis trace un graphe toujours sur cette feuille 2...

    En fait la seule chose qu'est capable de déclencher l'évènement c'est d'insérer la ligne sur la feuille 1 (mais sans le texte) et ensuite ça bloque.

    En j'ai essayé ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    If Target("L3").Value = "2" Then
    Module2.Compressibilité
    End If
     
    End Sub
    Or si je comprends bien ce que j'écris, normalement si la valeur de L3 est égale à 2, alors compressibilité devrait se lancer. Mais même si je cherche à entrer une valeur ailleurs (sur une cellule au hasard) que sur L3, le code de l’événement semble vouloir être lu, car à chaque fois j'ai un message d'erreur.

  4. #4
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    En partant, cette ligne-là est erronée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Target("L3").Value = "2" Then
    Le paramètre Target est la cellule cliquée avec sa propre adresse. C'est un objet Range qui a les mêmes propriétés qu'une cellule.

    Si je comprends bien, tu veux que la valeur de L3 soit 2 pour que la macro procède.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Worksheet_Change(ByVal Target As Range)
    'ajouté pour fin de démonstration.
     
         msgbox(Target.address)
     
         If Range("L3").Value = "2" Then
              Module2.Compressibilité
         End If
     
    End Sub
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/05/2014, 08h41
  2. Réponses: 7
    Dernier message: 03/01/2012, 11h14
  3. Réponses: 2
    Dernier message: 19/05/2010, 16h20
  4. Réponses: 3
    Dernier message: 01/06/2009, 18h21
  5. [OpenOffice][Base de données] [macro] connection a une base de données dans une macro
    Par Eruil dans le forum OpenOffice & LibreOffice
    Réponses: 2
    Dernier message: 23/04/2007, 16h19

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