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 :

executer une macro quand on change la valeur d'une cellule


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Points : 21
    Points
    21
    Par défaut executer une macro quand on change la valeur d'une cellule
    bonsoir à tous,
    j'ai créé un doc dans lequel je souhaite automatiser une action.
    Pour les cellules A15 à A32 j'ai créé des listes de noms. Quand je modifie une de ces cellules, je souhaite que d'autres cellules soient complétées.
    voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Select Case ActiveCell.Value
     
    Case "Christophe"
     
    ActiveCell.Offset(0, 1).Value = "D1 Open"
    ActiveCell.Offset(0, 2).Value = "15/01/1969"
    ActiveCell.Offset(0, 4).Value = "100"
     
    case "Benoit"
    ActiveCell.Offset(0, 1).Value = "SENIOR"
    ActiveCell.Offset(0, 2).Value = "21/02/1973"
    ActiveCell.Offset(0, 4).Value = "130"
    ...
    End Select
    je souhaite que ce code puisse s'exécuter quand je change la valeur l'une des cellules de A15 à A32 (je répète que chacune de ces cellules sont préremplies d'une liste de noms)

    J'ai pu lire dans quelques forums l'utilisation de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    C'est peut etre une solution à mon problème mais je ne sais l'utiliser

    Merci pour votre aide
    Benoit.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 592
    Points : 730
    Points
    730
    Par défaut
    Avec cela tu devrais être dé-coincé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Excel.Range)
     
        MsgBox (Target.Row & " " & Target.Column & "  " & Target.value)
        Variable = Target.Value
        V_ligne = Target.Row
        V_col = Target.Column
     
    End Sub

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut Benwad et le forum
    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
    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Target.Count > 1 Then Exit Sub
    ' si on a modifié plus d'une cellule (par copier/coller), on sort
    If Intersect(Target, Range("A15:A32")) Is Nothing Then Exit Sub
    'si les cellules modifiées ne sont pas dans la plage, sortir
    Select Case Target
        Case "Christophe"
            Target.Offset(0, 1) = "D1 Open"
            Target.Offset(0, 2) = "15/01/1969"
            Target.Offset(0, 4) = "100"
        Case "Benoit"
            Target.Offset(0, 1) = "SENIOR"
            Target.Offset(0, 2) = "21/02/1973"
            Target.Offset(0, 4) = "130"
    '...
    End Select
    End Sub
    Si tu ne sais pas dèjà :
    Clic-droit sur le nom de l'onglet => Menu contextuel>>Visualiser le code
    et tu colles la macro

    J'ai fait une macro simple, qui ne fonctionne que si tu changes une seule cellule dans la plage A15:A32 sur la feuille lié au module.
    A+

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Points : 21
    Points
    21
    Par défaut
    bonsoir à vous,

    j'ai essayé les solutions proposées, mais je n'obtiens pas de résultat.
    Ai-je bien compris ? je saisis le code proposé dans ma macro 1; et ensuite je vais dans l'une des cellules entre A15 et A32 Mais rien ne se passe. En fait ce que je voudrais c'est que dès que sélectionne un nom dans une cellule (par exemple je choisis "Wadoux Benoit" dans A16 je veux que les autres cellules D16 et G16 soit complétées automatiquement.

    Merci pour vos lumières...

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Points : 21
    Points
    21
    Par défaut
    Quand je saisis le code de "gorfael" et ensuite quand je veux retrouver ma macro en faisant "outils", "macro", je ne la vois plus....???????

  6. #6
    Membre confirmé Avatar de drakkar_agfa
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 618
    Points : 638
    Points
    638
    Par défaut
    Bonjour,

    As-tu coller le code dans la feuille correspondante ou dans un module?

    Exécute la macro pas à pas (avec un point d'arrêt) et donne nous en des nouvelles (est-ce qu'il utilise le target? Est-ce que la cellule est dans l'Intersect?)

    Ça va nous aider!

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Points : 21
    Points
    21
    Par défaut
    bonsoir drakkar_agfa,
    en fait j'ai saisi le code suivant
    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
    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Target.Count > 1 Then Exit Sub
    ' si on a modifié plus d'une cellule (par copier/coller), on sort
    If Intersect(Target, Range("A15:A32")) Is Nothing Then Exit Sub
    'si les cellules modifiées ne sont pas dans la plage, sortir
    Select Case Target
        Case "Christophe"
            Target.Offset(0, 1) = "D1 Open"
            Target.Offset(0, 2) = "15/01/1969"
            Target.Offset(0, 4) = "100"
        Case "Benoit"
            Target.Offset(0, 1) = "SENIOR"
            Target.Offset(0, 2) = "21/02/1973"
            Target.Offset(0, 4) = "130"
    '...
    End Select
    End Sub
    dans la feuil1.
    J'ai voulu faire fonctionner ma macro en pas à pas mais je ne la voit plus dans "outils" "macro"
    Je ne comprends pas?????

  8. #8
    Membre confirmé Avatar de drakkar_agfa
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 618
    Points : 638
    Points
    638
    Par défaut
    C'est normal
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Premièrement, Private.
    Deuxièment, la macro s'active en changent le contenue d'une cellule. "Worksheet_Change"

    En changeant une cellule, la macro s'active et vérifie si la cellule fait partie du Range, si oui, alors il entre dans le Select Case.

    Meilleur façon de tester est de changer une cellule de ta plage!

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Points : 21
    Points
    21
    Par défaut
    je ne comprends pas , maintenant ca fonctionne!!!! pourtant je n'ai rien valider????
    Avant de cloturer cet échange peux tu m'aiguiller sur l'idée suivante : quand je supprime la valeur d'une cellule de A15 à A32 (par ex :A20) je veux que les cellules D20 et G20 soient supprimer Merci

  10. #10
    Membre confirmé Avatar de drakkar_agfa
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 618
    Points : 638
    Points
    638
    Par défaut
    Vite vite,

    j'ajouterais un case au select case.
    Le case vide. Alors les cellules seront ... vides!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            Target.Offset(0, 1) = ""
            Target.Offset(0, 2) = ""
            Target.Offset(0, 4) = ""
    Ça a du sens?

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Points : 21
    Points
    21
    Par défaut
    c'est ce que j'avais fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Case ""
            Target.Offset(0, 1) = ""
            Target.Offset(0, 2) = ""
            Target.Offset(0, 4) = ""
    Mais les cellules sont toujours remplies

  12. #12
    Membre confirmé Avatar de drakkar_agfa
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 618
    Points : 638
    Points
    638
    Par défaut
    Essais plutôt avec le "else" du select case.

    Je n'ai pas la syntaxe sous la main mais utilise l'aide.

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Points : 21
    Points
    21
    Par défaut
    j'ai fait le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Case Else
            Target.Offset(0, 1) = ""
            Target.Offset(0, 2) = ""
            Target.Offset(0, 4) = ""
    mais quenini????

  14. #14
    Membre confirmé Avatar de drakkar_agfa
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 618
    Points : 638
    Points
    638
    Par défaut
    Quenini???

    ça ne fonctionne pas?

    En exécutant le code pas à pas, est-ce que la macro entre dans le case else?

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Points : 21
    Points
    21
    Par défaut
    ca rentre dans le case else quand je choisis un nom qui n'est pas dans mon code mais par contre quand je supprime une cellule (par ex A16) il ne se passe rien...

  16. #16
    Membre confirmé Avatar de drakkar_agfa
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 618
    Points : 638
    Points
    638
    Par défaut
    Je ne sais pas quoi répondre, et je n'ai plus le temps pour aujourd'hui.

    Mais vite, en échange, tu pourrais utiliser le selectionchange (au lieu du change).
    Avec cette technique, tu vérifies si la target est dans le Range (comme dans l'autre macro) et, si c'est le cas, si la cellule est vide, alors vide les autres cellules.
    C'est vraiment rabouté mais si c'est nécessairement rapidement...

    bonne chance!

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Points : 21
    Points
    21
    Par défaut
    encore merci drakkar tchao

  18. #18
    Membre confirmé Avatar de drakkar_agfa
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 618
    Points : 638
    Points
    638
    Par défaut
    Bonjour,

    J'ai fait le test avec cette macro :
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
     
        If Target.Column <> 1 Then Exit Sub
     
        Select Case Target.Value
        Case "Mathieu"
            Target.Offset(0, 1) = "Pas vide (mathieu)"
        Case "Micael"
            Target.Offset(0, 1) = "Pas vide (micael)"
        Case ""
            Target.Offset(0, 1) = "Vide"
        Case " "
            Target.Offset(0, 1) = "Espace"
        Case Else
            Target.Offset(0, 1) = "Case else"
        End Select
     
    End Sub
    Ça fonctionne parfaitement. Quand tu utilises le case "", il faut s'assurer que ce n'est pas un " " (espace) mais bien vide.

    Est-ce que ça fonctionne?

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 23/07/2012, 11h13
  2. lancer une macro en fonction de la valeur d'une cellule
    Par arkorrigan dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 11/06/2008, 17h18
  3. [MySQL] Prendre la valeur d'une table et l'associer à la valeur d'une autre
    Par gandolfi dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 02/02/2008, 08h04
  4. [VBA-E] Copier une macro dans un fichier à l'aide d'une macro
    Par Capsule dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 09/01/2007, 20h05
  5. [C#][DataGridView] Action quand on change la valeur d'une CheckBox
    Par TheParadoX dans le forum Windows Forms
    Réponses: 3
    Dernier message: 01/09/2006, 10h08

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