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 :

[VBA-E] Lancement automatique d'une macro (débutante)


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 4
    Points : 5
    Points
    5
    Par défaut [VBA-E] Lancement automatique d'une macro (débutante)
    Bonjour à toutes et à tous,

    Je cherche à créer la macro suivante :
    j'ai une case integer "nombre de mois" = 1,2,3,4 , etc...
    j'ai une case string "à la date du " = 31/10; 30/11;31/12,etc...

    et je veux que à chaque fois que la valeur de la case "nombre de mois" est modifiée, la valeur de "à la date du" évolue. Pour ça, pas de souci, je sais faire.

    Ce que je ne sais pas faire par contre, c'est que la macro se lance automatiquement, à chaque fois que l'on modifie la valeur de la case "nombre de mois".
    En fait, je cherche une instruction du style BeforeClose, mais qui soit active dès l'ouverture du fichier.

    Quelqu'un peut il m'aider ?

    En vous remerciant,
    Perrine.

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 618
    Points : 739
    Points
    739
    Par défaut
    Salut,

    Il n'y a pas d'événement attaché à chaque cellule ...

    Par contre, il existe un événement de modification d'une feuille qui s'appelle "Worksheet_Change".

    Donc, si ta macro s'appelle "ChangeDate"
    Il faut que tu mettes le code suivant dans la feuille ou se trouve les cases qui sont modifiées.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Change(ByVal Target As Range)
     
       Call ChangeDate
     
    End Sub
    Tout simplement.

    L'inconvénient (par ce qu'il y en a un), c'est que ta macro sera exécutée à chaque modification de la feuille : càd lors de l'écriture dans d'autres cellules et cela peut "alourdir" l'utilisation du fichier Excel...

    Bonne continuation

    Théo
    Forums VB : lire la notice
    La touche existe pour être utilisée
    Pensez au tag
    Pour ceux n'ayant pas l'aide installée :
    - Aide MSDN pour VB6
    - Aide MSDN pour VBA
    Je ne réponds pas aux questions techniques par MP. Merci d'utiliser le forum fait pour çà.

  3. #3
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Il me semble qu'il existe deux macros qui sont excutés à partir des modules c'est Auto_Open() et Auto_Close().

    La première s'exécute dès l'ouverture du classeur et la seconde avant la fermeture du classeur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    'Sub Auto_Open()
    ...'là tu met ton code
    End Sub
     
    'Sub Auto_close()
    ...'là tu met ton code
    End Sub
    C'est macros sont à créer dans la partie module

    Dis moi si cela marche

    Igloobel
    Ils ne savaient pas que c'était impossible ... du coup ils l'ont fait (Mark Twain)

    n'oubliez pas de si les messages vous aide ou sont pertinents et de mettre quand cela est !

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    tu peu t'inspirer de la macro à theocourant , à mettre dans le code de la feuille concernée...
    et tester la cellule modifier pour provoquer l'exécution de ta mise à jour :
    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.Address = "$D$5" Then
       MsgBox "La valeur de la cellule D5 à changé "
     
     End If
    End Sub

  5. #5
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut Re: Lancement automatique d'une macro (débutante)
    Citation Envoyé par pom_poir
    Bonjour à toutes et à tous,

    et je veux que à chaque fois que la valeur de la case "nombre de mois" est modifiée, la valeur de "à la date du" évolue. Pour ça, pas de souci, je sais faire.
    Perrine.
    on peu savoir comment tu fais la modification de la date du ??

    on peu surement créer une fonction à mettre dans case "date du"

    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
    Function DetermineDateJour(iNumMois As Integer) As String
    ' Rajoute ici le calul de 'date du en fonction du numéro de mois..
    ' par exemple
    Dim stRet As String
     
    'Pour calculer le retour , en manque d'informations (ou d'inspiration)
    ' j'ai utilisé un Select case , à toit d'adapter suivant correspondance
    ' entre numéro de mois et date du..
      Select Case iNumMois
       Case 1
         stRet = "31/10"
       Case 2
         stRet = "30/11"
       Case 3
         stRet = "31/12"
       Case 4
         stRet = "31/01"
       Case Else
         stRet = "#N/A#"
      End Select
    DetermineDateJour = stRet
    End Function
    en considérant que G17 contient le numéro de mois place la formule suivante dans date du

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =DetermineDateJour(G17)
    la fonction faisant référence à la cellule num de mois (G17) , elle se met à jour toute seule sur changement du numéro de mois ...
    sans macros événementielle supplémentaires...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 290
    Points : 374
    Points
    374
    Par défaut
    Bonjour,
    Pour que ta macro soit active à l'ouverture du fichier, tu la mets dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub Workbook_Open()
    Call MaMacro
    End Sub
    jpleroisse

  7. #7
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Salut

    Tu as eu toutes sortes de réponses et j'ai pensé mettre ça au clair...

    Dans ton cas particulier, c'est bien l'événement Worksheet_Change qu'il te faut. Pour arriver à programmer quelque chose dans cet événement en particulier, tu dois accéder à l'éditeur VBA (Alt + F11) et double cliquer sur l'icône de la feuille (dans la partie de gauche) sur laquelle tu fais tes changments.

    Ensuite déroule la première liste en haut de la partie de droite de l'éditeur, celle ou il est écrit (Général) et choisis Worksheet.

    Par défaut, une procédure SelectionChange est créée. Comme ce n'est pas celle-ci qui nous intéresse déroule la seconde liste et choisis Change.

    Tu peux maintenant ajouter le code pour lancer ta macro. Comme le faisait remarquer Theocourant, il y a un inconvénient à appeler tout bêtement ta macro sans faire un petit test préalable. Le paramètre Target de la procédure événementielle désigne la cellule qui est modifiée. Un test sur sa localisation devrait suffire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target = Range("B5") Then
    Call maMacro
    End If
    End Sub
    C'est un peu différent si tu dois vérifier si la cellule modifiée est à l'intérieur d'une plage déterminée mais le principe reste le même.

  8. #8
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par zazaraignée
    Salut

    Tu as eu toutes sortes de réponses et j'ai pensé mettre ça au clair...

    Dans ton cas particulier, c'est bien l'événement Worksheet_Change qu'il te faut. Pour arriver à programmer quelque chose dans cet événement en particulier, tu dois accéder à l'éditeur VBA (Alt + F11) et double cliquer sur l'icône de la feuille (dans la partie de gauche) sur laquelle tu fais tes changments.

    Ensuite déroule la première liste en haut de la partie de droite de l'éditeur, celle ou il est écrit (Général) et choisis Worksheet.

    Par défaut, une procédure SelectionChange est créée. Comme ce n'est pas celle-ci qui nous intéresse déroule la seconde liste et choisis Change.

    Tu peux maintenant ajouter le code pour lancer ta macro. Comme le faisait remarquer Theocourant, il y a un inconvénient à appeler tout bêtement ta macro sans faire un petit test préalable. Le paramètre Target de la procédure événementielle désigne la cellule qui est modifiée. Un test sur sa localisation devrait suffire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target = Range("B5") Then
    Call maMacro
    End If
    End Sub
    C'est un peu différent si tu dois vérifier si la cellule modifiée est à l'intérieur d'une plage déterminée mais le principe reste le même.
    ça marche ça ?...? ...

    regarde un peu plus haut j'ai donné une méthode similaire (avec test de l'adresse et pas la valeur, il peu y avoir la même valeur dans 2 cellules différentes...) ... qui doit être plus efficace...

  9. #9
    Futur Membre du Club
    Inscrit en
    Août 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 4
    Points : 5
    Points
    5
    Par défaut MERCI à toutes et à tous !
    Merci beaucoup !

    J'ai pas encore eu trop le temps de tester vos idées, mais je vais m'y mettre.

    Merci beaucoup à tout le monde et bonne semaine !

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

Discussions similaires

  1. lancement automatique d'une macro
    Par moimemessssssssss dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/02/2011, 22h31
  2. lancement automatique d'une macro
    Par deubelte dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 18/07/2008, 10h58
  3. lancement automatique d'une macro à partir d'une extraction de BDD
    Par SCHOLLERF dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 09/10/2007, 07h45
  4. Réponses: 9
    Dernier message: 10/05/2007, 10h56
  5. Réponses: 1
    Dernier message: 04/05/2007, 11h59

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