Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Contribuez
Contribuez Placez ici vos codes, sources, trucs et astuces que vous souhaitez partager avec les membres du club.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/07/2011, 08h43   #1
Invité régulier
 
Homme
Programmeur
Inscription : mai 2006
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Programmeur
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2006
Messages : 5
Points : 5
Points : 5
Par défaut [Méthode]-Comment éviter le déclenchement des trigger d'objets (ComboBox) lors du "Sauvegarder Sous"

Bonjour,

J'ai placé des ComboBox directement dans une feuille Excel.
Dans le VBA de cette feuille on exploite le "ComboBox_Change".
Lors de l'opération "Sauvegarder Sous" tous les événements "Change" se déclenchent.


Voici une méthode pour éviter que ces trigger ne se déclenchent :

Dans un classeur contenant 2 feuilles (Feuil1 et Feuil2),
Feuil1 ne contient pas d'objet "Commandes" comme un ComboBox ou un Button.
Feuil2 en contient.

Arbitrairement on détermine une cellule qui va sauvegarder le nom du document en cours, ici Feuil1 cellule A1

Dans toutes les feuilles, coté VBA, il faut ajouter un ordre qui va mémoriser dans Feuil1.A1 le nom complet du classeur à l'ouverture de la feuille :
Code :
1
2
3
Private Sub Worksheet_Activate()
    Worksheets("Feuil1 ").Range("A1") = ActiveWorkbook.Path & Application.PathSeparator & ActiveWorkbook.name
End Sub
Dans Feuil2 il faut :

- créer une fonction qui va contrôler si le nom du classeur a changé
Code :
1
2
3
4
5
6
Function JustSaved() As Boolean
    JustSaved = False
    If (Worksheets("Feuil1 ").Range("A1") <> ActiveWorkbook.Path & Application.PathSeparator & ActiveWorkbook.name) Then 
        JustSaved = True
    End If
End Function
- ajuster l'événement sur l'objet (ici une ComboBox qui s'appelle combo1) :
Code :
1
2
3
4
Private Sub Combo1_Change()
    If JustSaved Then Exit Sub
    ' votre action ici ------
End Sub
Pour que l'objet fonctionne après le renommage du classeur (c'est ce que fait "Sauvegarder Sous") il faut que la mise à jour soit effectuée sur Feuil1.A1, ainsi avant chaque sauvegarde on va quitter Feuil2 et revenir sur Feuil1.

Dans "ThisWorkbook" coté VBA il faut ajouter :
Code :
1
2
3
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Worksheets("Feuil1").Select
End Sub
Ainsi, lors du "Sauvegarder Sous" on pointe sur Feuil1.
Quand on va sur Feuil2 pour utiliser l'objet la procédure "Activate" (vu tout en haut) remet à jour le nom du classeur et permet d'utiliser l'objet.

Contributairement,
HA
federb.do est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/07/2011, 15h17   #2
Invité régulier
 
Homme
Programmeur
Inscription : mai 2006
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Programmeur
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2006
Messages : 5
Points : 5
Points : 5
Par défaut titre

Euh...

Sans doute le titre suivant conviendrait-il mieux ?
[Méthode] Comment éviter l'événement "Change" d'une ComboBox lors du "Sauvegarder Sous"

Car pour l'ancien titre je me suis inspiré d'une méthode qui existe sur internet mais qui ne m'a pas convenu (avec des compteurs).

Excusez-moi,
Cordialement,
HA
federb.do est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h23.


 
 
 
 
Partenaires

Hébergement Web