[Catégorie modifiée VB6 --> VBA] Pb autoload Combobox activeX ???

Signaler
Messages postés
17
Date d'inscription
lundi 24 novembre 2008
Statut
Membre
Dernière intervention
13 décembre 2010
-
Messages postés
17
Date d'inscription
lundi 24 novembre 2008
Statut
Membre
Dernière intervention
13 décembre 2010
-
Bonjour à tous et merci d'avance pour votre aide

le contexte : je suis sous excel 2003. et j'ai un programme qui à partir d'un tableau de donnée me permet de générer un calendrier individuel.

La structure du fichier : Onglet_1/ une série de Noms. J'ai appelé cette plage List_Pers. Onglet_2/ Tableau de donnée + controle ComboBox - ActiveX qui fait réf. à List_Pers et à une macro

Le PB : dès que je modifie les noms dans onglet_1, (sans toucher à la combobox) la macro associée à ComboBox se lance... et comme elle s'exécute sur l'onglet actif, elle ne trouve évidemment pas les bonnes données et renvoie un mess. d'erreur.

D'où ma question : Pourquoi une modification de List_Pers entraine l'exécution de la macro ?

Pour info, j'ai essayé de recopier avec Liaison List_pers dans l'onglet_2, créant ainsi une List_pers2 locale.
Même pb : un changement de List_pers => exécution de la macro.

Je souhaite que cette macro ne s'exécute que lorsque je change la valeur de la combobox...

J'espère avoir été clair.
Merci d'avance
Eric

2 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Salut
Ce que tu appelles "fichier" est un Classeur
Ce que tu appelles "Onglet" est une Feuille

Je n'ai pas tout compris à ton histoire de Combo, mais il est vrai que les évènements du genre maCombo_Change peuvent se déclencher alors que insères ou modifies le contenu par programme.
Pour éviter cela pendant la préparation des données, il te suffit de faire ceci :
Dans la partie Déclaration d'un module, tu ajoutes une variable :
Public bPrepaEnCours As Boolean
Dans ton code, juste avant de toucher à tes données, tu passes cette variable à True et tu la remettras à False quand tu auras terminé.
Dans les évènements du genre maCombo_Change, tu ajoutes, en tête du code :
If bPrepaEnCours Then Exit Sub

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
17
Date d'inscription
lundi 24 novembre 2008
Statut
Membre
Dernière intervention
13 décembre 2010

Super idée. ca va régler le pb effectivement...
Merci.

ps : juste au cas où, voici le pb en plus simple (j'espère... ) : dès que je change une cellule dans la feuille, quelle qu'elle soit, ca lance la macro ***_change ()

Le pb est le même avec worksheet_change :
[i]Set Rng1 = Application.Intersect(Target, Range("H6:BD43"))
If Not Rng1 Is Nothing Then/i
Le changement de n'importe quelle cellule dans la feuille, lance la macro...

Enfin bref, ta solution va régler le pb !
Merci