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 :

declencher une macro suite a une modification d une feuille Excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 39
    Par défaut declencher une macro suite a une modification d une feuille Excel
    Bonjour tout le monde,

    Voila mon probleme :
    j exporte d access vers excel une liste et je voudrais ecrire sur mon fichier excel (celui qui recoit l exportation) une macro qui transfere une partie de cette liste sur une autre feuille du meme fichier excel. (car je voudrais eviter d avoir a l ouvrir pour effectuer le transfert d une page a l autre)

    ex Ma base s appelle BD
    mon fichier excel EX

    je travaille sur BD (seul fichier ouvert)
    je declenche l exportation de ma requete vers EX
    (celle ci se placant toujours au meme endroit (en feuille 5))
    et juste apres que ma liste soit arrivé en feuille 5 de EX, c'est la que devrait se declenché ma macro pour transferer une partie de ma liste en feuille 2 (toujours de EX).

    Mon but est de ne pas avoir a ouvrir le classeur EX.

    Comment faire ?

  2. #2
    Membre émérite
    Avatar de Theocourant
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 618
    Par défaut
    Bonjour,

    Quand tu utilises l'exportation de Acces vers Excel, cela doit bien ouvrir Excel non ?

    Si c'est le cas, tu peux utiliser l'événement qui suit (dans la feuille d'arrivée):
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    End Sub

    sinon carrément au niveau du classeur avec l'événement :
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
     
    End Sub

    +

    Théo

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 39
    Par défaut
    ben ca marche pas !

    l exportation de access vers Excel se passe bien mais la macro ne se declenche pas

    j ai du me planter ou oublir de spécifier qqchose

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Makro1()
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
     
        Dim n As Integer
        n = Sheets(4).Range("a1").End(xlToRight).Column
        Sheets(4).Activate
        Range("a1").Select
        Range(Selection, Cells(1, n - 1)).Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.Copy Sheets(2).Range("a1")
     
    End Sub
    qu est ce que tu en penses??

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    bonjour

    il y a un soucis car tu as 2 Sub imbriqués dans ta procédure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Makro1()
    Private Sub Workbook_SheetChange
    ....

    Ta procédure evenementielle doit être placée dans le module objet de ta feuille:

    http://silkyroad.developpez.com/VBA/EvenementsFeuille/


    de plus Workbook_SheetChange et Worksheet_Change, ce n'est pas la meme chose:

    http://silkyroad.developpez.com/VBA/EvenementsClasseur/


    bonne soirée
    michel

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 39
    Par défaut
    pardon pour le sub en trop j ai copié mon code un peu vite ...

    mais meme en placant mon code dans le module de ma feuille toujours rien

    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)
     
        Dim n As Integer
        n = Range("a1").End(xlToRight).Column
        Range("a1").Select
        Range(Selection, Cells(1, n - 1)).Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.Copy Sheets(2).Range("a1")
     
    End Sub
    lorsque j ouvre le classeur et que je modifie n importequelle cellule de ma feuille (ou g ecrit le code). la, pas de probleme, la macro se declenche automatiquement.

    Mais qd j exporte, de ma base de donnée, ma liste vers le fichier excel (celui ci etant biensur fermé) il n y pas de declenchement de la macro a l interieur de celui ci.
    pourtant quand je l ouvre, je constate que l importation a bien eu lieu.
    l importation a bien sur modifié plein de cellules au niveau de la feuille, elle aurait du declencher la macro ! ??
    Suis je obligé d ouvrir ce fichu classeur pour executer ma macro ?

  6. #6
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    bonjour

    Mais qd j exporte, de ma base de donnée, ma liste vers le fichier excel (celui ci etant biensur fermé) il n y pas de declenchement de la macro a l interieur de celui ci.
    Je n'avais pas compris que le classeur était fermé: Dans ce cas c'est normal qu'il ne se passe rien. A ma connaissance, il n'est pas possible de déclencher une macro dans un classeur fermé.


    michel

  7. #7
    Membre émérite
    Avatar de Theocourant
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 618
    Par défaut
    Bonjour,

    Dans ce cas, je pense qu'il faut faire une vérification de la modification du workbook à l'ouverture du fichier et effectuer à ce moment là le traitement que tu souhaites.

    L'événement se passant à l'ouverture du fichier est "Workbook_Open()"

    Bonne continuation

    Théo

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 39
    Par défaut
    L exportation d access vers excel ne pouvant pas se faire tant que mon classeur est ouvert (en plus il contient des feuilles liées a certaines tables de ma bases...),
    et si je codais dans ma macro access, apres l exportation de ma requete:
    - l ouverture du fameux classeur excel,
    - une modification quelconque sur ma feuille genre en A66000, celle ci devrait alors declencher ma macro puisque cette fois ci mon classeur est ouvert...
    - la fermeture du classeur excel

    1- est ce jouable ?
    2- si oui, connaissez vous ce genre de code en SQL ?

  9. #9
    Expert confirmé
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Par défaut
    Hello,

    Pourquoi ne pas mettre ton code de copie de colonne directement dans ton exportation Access ?
    Sinon pour lancer une macro depuis Access c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <objApplicationExcel>.Run "Nom Macro"
    Citation Envoyé par chamus
    pardon pour le sub en trop j ai copié mon code un peu vite ...

    mais meme en placant mon code dans le module de ma feuille toujours rien

    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)
     
        Dim n As Integer
        n = Range("a1").End(xlToRight).Column
        Range("a1").Select
        Range(Selection, Cells(1, n - 1)).Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.Copy Sheets(2).Range("a1")
     
    End Sub
    lorsque j ouvre le classeur et que je modifie n importequelle cellule de ma feuille (ou g ecrit le code). la, pas de probleme, la macro se declenche automatiquement.

    Mais qd j exporte, de ma base de donnée, ma liste vers le fichier excel (celui ci etant biensur fermé) il n y pas de declenchement de la macro a l interieur de celui ci.
    pourtant quand je l ouvre, je constate que l importation a bien eu lieu.
    l importation a bien sur modifié plein de cellules au niveau de la feuille, elle aurait du declencher la macro ! ??
    Suis je obligé d ouvrir ce fichu classeur pour executer ma macro ?

  10. #10
    Membre émérite
    Avatar de Theocourant
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 618
    Par défaut
    Citation Envoyé par cafeine
    Hello,

    Pourquoi ne pas mettre ton code de copie de colonne directement dans ton exportation Access ?
    Sinon pour lancer une macro depuis Access c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <objApplicationExcel>.Run "Nom Macro"
    Bonjour,

    Cela fonctionne en effet à condition que la macro appelée soit déclarée comme publique.

    +

    Théo

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Citation Envoyé par Chamus
    - l ouverture du fameux classeur excel,
    Théo te donne une indication pour que la macro soit lancée à l'ouverture du fichier Excel, pas besoin d'aller chercher une cellule A66000 pour la déclencher.
    Tu places ta macro Workbook_Open() dans un module standard de ton fichier Excel et quand tu ouvres ton fichier, elle s'exécute.
    A toutes fins utiles

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 39
    Par défaut
    Voila in fine mon bricolage:
    j utilise un macro Workbook_open() dans mon classeur excel

    Et dans mon fichier access, j ai le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Function OuvertureClasseur(ByVal nom As String)
    Dim chemin As String
    Dim MonApp As Object
    Set MonApp = CreateObject("Excel.Application")
    chemin = "C:\Documents and Settings\Administrateur\Bureau\" & nom & ".xls"
    MonApp.workbooks.Open chemin
    MonApp.workbooks("nom" & ".xls").Close
     
    End Function
    comme ca mon fichier excel s ouvre et ca declenche la macro

    juste 2 questions finales :
    -mon dernier code bug sur la derniere ligne, apparemment c est pas la bonne syntaxe pour coder la fermeture du fichier excel
    -mon fichier excel a beau etre ouvert, il n est pas affiché.
    je pensait qu il ne s ouvrait pas au depart, mais des que j ouvre un autre fichier excel, il apparait aussitot (y a t il une explication ou s agit il d un caprice de mon micro vieillissant ?)

  13. #13
    Expert confirmé
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonApp.workbooks("nom" & ".xls").Close
    ce ne serait pas mieux avec ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonApp.workbooks(nom & ".xls").Close

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 39
    Par défaut
    Ouais c est beaucoup mieux ....


    Le code DAO que tu m a proposé sur le forum access aurait été plus pratique, mais bon en attendant, celui la fonctionne.
    Merci beaucoup.

    bonne soirée a tous

  15. #15
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par chamus
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
    MonApp.workbooks.Open chemin
    MonApp.workbooks("nom" & ".xls").Close
     
    End Function
    ...
    -mon fichier excel a beau etre ouvert, il n est pas affiché.
    je pensait qu il ne s ouvrait pas au depart, mais des que j ouvre un autre fichier excel, il apparait aussitot (y a t il une explication ou s agit il d un caprice de mon micro vieillissant ?)
    Personnellement, j'utiliserais un objet WorkBook
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    dim wk as Excel.Workbook
     
    set wk = MonApp.workbooks.Open(chemin)
    wk.windows(1).visible=true
    wk.Close
    set wk = nothing
    ...
    Ainsi, tu ne te tracasses plus du nom, et c'est plus simple pour rendre l'objet visible.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 39
    Par défaut
    ok, merci Pierre.

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

Discussions similaires

  1. Déclenchement d'une macro lors de la modification d'une cellule
    Par bohemian dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/06/2012, 12h01
  2. Déclenchement d'une macro lors de la modification d'une cellule
    Par mirmae dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/06/2012, 16h28
  3. Lancement d'une macro lors de la modification d'une cellule
    Par Gerardd dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/06/2010, 12h04
  4. [XL-2003] Exécution d'une macro lors de la modification d'une plage de cellules
    Par martinmacfly dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 08/01/2010, 11h51
  5. Lancer une macro lors de la modif d'une case excel
    Par frevale dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 16/08/2006, 13h19

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