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 :

Lancement d'une macro après mise à jour d'une cellule


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Lancement d'une macro après mise à jour d'une cellule
    Bonjour,

    Je suis certains qu'on vous a posé cette question des milliards de fois mais les recherches que j'ai fait ne m'ont pas mené à gros choses.

    Je m'explique. J'ai un tableau qui me permet de suivre l'avancement de certaines demandes qui se passent dans mon service. Je voudrais modifier automatiquement le libellé de l'avancement si une cellule d'une colonne particulière est saisie.

    Pour l'instant mon code ressemble à ça :
    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) 'à chaque édition dans l'onglet
    	'Une cellule dans la colonne "Raison de blocage" a été modifié
    	If Target.Column = 5 Then
    		'Modification de l'avancement
    	End If
    End Sub
    J'aimerai savoir si c'est le seul moyen pour lancer la macro (modification de la feuille), car ça me parait très lourd de lance ce code après chaque modfication. Est-il possible de déclencher ce bout de code uniquement lorsque que c'est une cellule de la colonne "Raison de blocage" qui est modifiée ? Ceci pour raison de sécurité aussi, si je décide de rajouter une colonne dans le futur, il va falloir que je modifie le code en mettant dans mon test le bon numéro de colonne.

    Ci-joint mon fichier simplifié avec la macro.

    Merci d'avance.
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    tu peux nommer une colonne qui n'est qu'une plage, ainsi ton code résistera à l'insertion de colonne ...
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci pour cette réponse rapide.

    Une fois ma colonne nommé, est-ce que je peux lancé une macro par rapport à un évènement qui s'est passé sur cette colonne ?

    Si non, comment puis tester le nom de la colonne par rapport au paramètre Target ??

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Une fois ma colonne nommé, est-ce que je peux lancé une macro par rapport à un évènement qui s'est passé sur cette colonne ?
    De toute façon il faut bien que tu testes si c'est sur cette colonne que tu testes. Donc dans ton worksheetchange tu places une condition:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if targuet.column=5 then
    'blalbla
    else
    'bein i's'passe rien
     
    end if


    Si non, comment puis tester le nom de la colonne par rapport au paramètre Target ??
    Targuet a plusieurs propriétés (columns, adress, value,etc ...): donc tu as le choix.
    Si tu as donner un nom a ta colonne tu peux faire par exemple (yé répete: y'a plein de possibilités...) un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if targuet.row=1 and targuet.value="le bon nom de colonne" then ' le row=1 c'est pour éviter le "texte pas de bol" :-)
    'blalbla
    end if

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Ok merci pour toutes ces infos !

    D'après ce que j'ai compris, même si je nomme ma colonne col_truc, je ne pourrais pas créer une macro qui sera appelé directement sans passé par Worksheet_Change. Qqch du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Sub col_truc_Change (ByVal Target As Range)
       'Traitement pour un changement sur cette colonne
    End Sub
    Je ne sais pas trop comment sont géré les événement en VBA ! Je trouve pas très efficace de lancer une fonction après chaque modif de cellule et vérifié si la cellule modifiée est dans la colonne qui m'intéresse !

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Je vais peut etre dire une annerie mais ta fonction col_truc_change revient au même!

    En fait c'est une vue de l'esprit:
    Pour savoir si il faut appeler col_truc_change, il faut tout de même tester a chaque fois dans quelle colonne on est et donc dans quelle cellule.

    La seule différence d'après moi c'est que dans ta façon de voir ce serait transparent pour toi :-): vba ferait quand meme les tests sans que tu le vois.

    Tandis que la, tu mets toi moi les conditions restrictives dans ta procédure: résultat tu sais ce qui se passe et pour débugger c'est plus sympa (comment ça des bugs?)!

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    C'est sur que au final ça revient au même, c'est juste que je ne verra pas le traitement.

    Ensuite j'ose imaginer qu'un déclencheur uniquement sur une colonne serait bcp efficace en terme de performance plutot que moi qui fait mon petit IF après chaque modif de cellule surtout sur tableaux contenant des milliers de cellule

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

Discussions similaires

  1. mise à jour d'une fenetre apres selection dans une combo
    Par mnssylvain dans le forum WinDev
    Réponses: 51
    Dernier message: 06/03/2008, 11h10
  2. Mise à jour d'une variable après choix dans une combobox
    Par ~Brouette~ dans le forum Langage
    Réponses: 1
    Dernier message: 21/12/2007, 11h09
  3. Réponses: 3
    Dernier message: 06/12/2007, 11h09
  4. Réponses: 8
    Dernier message: 09/01/2007, 16h30
  5. [AJAX] Mise à jour d'une page après réception d'une requête
    Par M.Dlb dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 11/11/2006, 15h48

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