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 :

Problème avec un combobox_change [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2010
    Messages : 12
    Par défaut Problème avec un combobox_change
    Bonsoir les experts d'excel !

    J'ai un petit problème de macro et de combobox qui m'embête depuis hier....

    Dans un userform j'ai une première combobox qui va alimenter une 2e selon la valeur entrée dans la 1e combobox (en filtrant une feuille dans le classeur).

    Le problème c'est que le code "redémarre" des que je fais une modification sur le classeur j'ai l'impression, chose que je ne comprends pas du tout et c'est pourquoi j'ai besoin de vos lumières ^^'

    Voici le code qui redémarre une fois la ligne 10 lancée (avec le step by step F8).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub ComboBox1_Click()
     
    Application.ScreenUpdating = False
     
    If userform1.ComboBox1.Value = "" Then
        MsgBox ("......")
        Exit Sub
    End If
     
    Sheets("listes").Range(Sheets("listes").Cells(2, 19), Sheets("listes").Cells(1000, 24)).Value = ""
    Je suis dans le coin s'il faut d'autres précisions. En attendant bon week end du 14 juillet à tous.

  2. #2
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut
    Bonjour,

    je ne sais pas si j'ai été confronté au même problème que vous mais...
    j'ai remarqué qu'il y a des composants "sensibles" aux modifications concernant la feuille où il se trouve.

    Des évènements click sont générés de façon intempestive, lorsque l'on entre une valeur dans une cellule, ou lorsque l'on sélectionne une feuille
    D'après mon expérience, la raison principale serait un calculate.
    Ce qui veut dire que si votre classeur est en calcul automatique, à chaque fois que vous entrez une valeur dans une cellule obligeant EXCEL à recalculer d'autres cellules, un ou plusieurs évènements click sont générés.

    Bref, n'ayant jamais trouvé la raison du phénomène, et donc supprimer la cause, je procède comme suit:
    1: je désactive systématiquement le calcul automatique de mes classeurs ( Cela peut se faire par macro)
    2: A chaque début de fonction de traitement de clic, je passe par un test sur un drapeau qui inhibe éventuellement le traitement qui suit
    3: Avant chaque lancement d'un calcul de feuille, j'active le drapeau d'inhibition
    4: je désactive le drapeau d'inhibition après une phase de calcul.

    Cela donne par exemple dans la classe ThisWorkbook:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Workbook_Activate()
      With Application
        .Calculation = xlCalculationManual
        .CellDragAndDrop = False
        .EnableAutoComplete = False
      End With
     
      ThisWorkbook.verrou_click = False  ' Autorise à nouveau les traitements de Cbx_xxx_Click pour ce classeur
    End Sub
    verrou_click est une variable boléenne générale au classeur, accessible à toutes les autres classes de celui-ci.

    Puis dans les autres feuilles, par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Cbx_Adherent_Click()
      If ThisWorkbook.verrou_click = True Then
        Exit Sub ' Ne fait pas de traitement si le verrou est activé
      End If
    /.../
    Enfin dans d'autres parties, avant un calcul:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     Application.ScreenUpdating = False
      ThisWorkbook.verrou_click = True
     
    /.../
     
      ActiveSheet.Calculate
     
     
      ThisWorkbook.verrou_click = False
      Application.ScreenUpdating = True
    En espérant que je ne sois pas hors sujet...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2010
    Messages : 12
    Par défaut
    Bonjour rtg57,

    Merci de votre réponse, cela à l'air de marcher

    J'avoue ne pas trop comprendre comment fonctionne le verrou_click, mais la désactivation du calcul automatique suffit à régler mon problème.

    Encore merci et à bientôt.

  4. #4
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut
    Bonjour,

    content pour vous

    Le verrou_click est simplement une variable booléenne qui est activée avant de lancer un calculate.
    Car tôt ou tard, il faudra bien effectuer un 'calculate' pour permettre à EXCEL de calculer les résultats des formules.
    Cette opération va déclencher des 'click' intempestifs.
    Cette variable à l'entrée de chaque fonction traitant des évènements 'click', empêche de dérouler le programme contenu dans ces parties.
    Cela joue comme une inhibition des évènements.

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

Discussions similaires

  1. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  2. Problème avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 2
    Dernier message: 17/07/2002, 10h25
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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