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...
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)
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...