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 :

exécuter une procédure une seule fois [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 5
    Par défaut exécuter une procédure une seule fois
    bonjour,
    je suis débutant en vba et je suis en train d'écrire une procédure en vba.
    Elle fonctionne comme je le souhaite à un détail près.
    Voici ma procédure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Range("choix").Value = "calculé" Then
        If Range("K39") = "" Then
        Range("essai") = ""
        Else
        Range("essai").Value = Range("K39").Value
        End If
        Copie
    Else
    Range("groupe").Clear
    End If
    End Sub
    Mon problème est que cette procédure s'effectue à chaque sélection de cellule et comme la procédure copie est assez longue, j'aimerais que la procédure copie ne s'effectue qu'une seule et unique fois.
    J'espère avoir été clair.
    merci d'avance pour vos réponse

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 226
    Par défaut
    Hello,

    Je ne sais pas si ça sera suffisant, mais tu mets le même code dans le Worksheet_Change, de cette façon, c'est uniquement lorsqu'il y a changement dans ta cellule "choix".

    Bonne soirée !

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Par défaut
    Bonsoir

    Tu pourrais utiliser une variable global dans un module

    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Global UneSeuleFois As Boolean
    et dans ton 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
    15
    16
    17
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
    If Not UneSeuleFois Then
      If Range("choix").Value = "calculé" Then
          If Range("K39") = "" Then
          Range("essai") = ""
          Else
          Range("essai").Value = Range("K39").Value
          End If
          Copie
      Else
      Range("groupe").Clear
      End If
     
      UneSeuleFois = True
    End If
    End Sub

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 5
    Par défaut
    Merci pour vos propositions
    Pour antoniom, le fait de passer dans Worksheet_Change fait planter excel (boucle infini) et je ne sais pas d'ou cela vient, même en simplifiant ma procédure par exemple en enlevant la procédure copie cela plante toujours.
    Pour zyhack, je suis débutant comment cette nouvelle variable changera la façon dont fonctionne la procédure?

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Par défaut
    re

    tout à l'heure j'ai tapé un peu vite ce n'est pas global mais Public
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public UneSeuleFois As Boolean
    ce type de variable gardera sa valeur tant que le classeur sera ouvert a moins qu'elle ne soit modifié.

    à l'ouverture du fichier cette variable sera à false par défaut.

    cette ligne vérifie que la variable = false
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not UneSeuleFois Then
    une fois que ton code à été utilisé on la passe à true.

    la fois suivante ton code ne sera pas exécute car la variable ne sera plus a false

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 5
    Par défaut
    merci zyhack
    avec tes explications j'ai pu adapté l'utilisation de cette variable pour obtenir le résultat que je souhaitais.
    Merci encore de vos réponse et de vos explications qui étaient simples et clairs

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

Discussions similaires

  1. exécuter une macro 1 seule fois par semaine ?
    Par deby23 dans le forum VBA Access
    Réponses: 9
    Dernier message: 20/12/2012, 11h22
  2. [PHP 5.3] je cherche à faire appel à une fonction 1 seul fois
    Par geforce dans le forum Langage
    Réponses: 1
    Dernier message: 23/05/2010, 14h16
  3. Réponses: 4
    Dernier message: 04/12/2009, 12h18
  4. Réponses: 3
    Dernier message: 14/12/2008, 17h44
  5. [SQL2K] exécution automatique d'une procédure stockée
    Par dolyne.b dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 02/04/2007, 17h50

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