Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
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 13/08/2011, 17h41   #1
Nouveau Membre du Club
 
Inscription : août 2010
Messages : 111
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 111
Points : 32
Points : 32
Par défaut Activer macro d'un bouton de controle à l'ouverture d'un fichier sans cliquer dessus

Bonjour, à l'ouverture de mon fichier je souhaiterais activer un bouton sans cliquer dessus et que la macro de celui-ci s'éxécute. Hors je ne trouve pas la solution pour faire cela.

merci de votre aide
XceSs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/08/2011, 17h53   #2
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
Déjà tu commence à déplacer le code de ton bouton dans une procédure d'un module standard :

Code :
1
2
3
Sub MaProcedure
(... ton code ..)
End sub
Tu modifie le code de ton bouton pour qu'il appelle cette procédure :

Code :
1
2
3
Sub CommandButton1_Click 
  MaProcedure 'Appel de 'Ma procedure'
End sub
Et dans ThisWorkBook tu utilise l'événement Open pour l'appel de cette procedure

Code :
1
2
3
Private Sub Workbook_Open()
 MaProcedure 
End Sub
bbil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/08/2011, 17h58   #3
Nouveau Membre du Club
 
Inscription : août 2010
Messages : 111
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 111
Points : 32
Points : 32
Exact j'y avais pas pensé merci

mais ça marche pas ça me met erreur dans module caché thisworkbook

Code :
Dans module standard
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sub AgrandirRéduire()
Application.DisplayFormulaBar = False
If ToggleButton1.Value = True Then
    With Application
        .WindowState = xlNormal
        .Width = 185
        .Height = 185
    End With
    ToggleButton1.Caption = "Agrandir"
    ToggleButton1.Accelerator = "D"
    ActiveWindow.ScrollRow = 1
    ActiveWindow.ScrollColumn = 1
Else
    Application.DisplayFullScreen = True
    ToggleButton1.Caption = "Réduire"
    ToggleButton1.Accelerator = "P"
    ActiveWindow.ScrollRow = 1
    ActiveWindow.ScrollColumn = 1
End If
End Sub
A la feuille concernée :
Code :
1
2
3
Sub ToggleButton1_Click()
 AgrandirRéduire
End Sub
Thisworkbook :
Code :
1
2
3
4
5
6
7
8
Private Sub Workbook_Open()
 Application.DisplayFormulaBar = False
 ActiveWindow.Zoom = 135
 ValidEnr = True
 AgrandirRéduire
 ActiveWindow.ScrollRow = 1
 ActiveWindow.ScrollColumn = 1
End Sub
XceSs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2011, 22h23   #4
Membre éclairé
 
Inscription : juillet 2011
Messages : 141
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 141
Points : 382
Points : 382
Par défaut Basculer en plein écran en VBA dans Excel

Au moment de l'ouverture du classeur dans Workbook_Open(), il est beaucoup trop tôt pour accéder à la valeur de ToggleButton1 qui n'est connu que dans une feuille particulière.

Dans le module standard Module1, il est possible de définir avec Public un Boolean qui représentera (notez le futur) l'état de ToggleButton1 dans sa feuille.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Option Explicit ' commentaire de ce que fait le module
Public isFullScreen As Boolean ' Représente l'état du ToggleButton1 False par défaut
 
Sub AgrandirReduire()
    Application.DisplayFormulaBar = False ' déjà fait dans Workbook_Open() ?
    Application.DisplayFullScreen = isFullScreen
    If Not isFullScreen Then
        With Application
            .WindowState = xlNormal ' Pourrait être fait uniquement dans Workbook_Open()
            .Width = 185: .Height = 185 ' Idem
        End With
    End If
    ActiveWindow.ScrollRow = 1: ActiveWindow.ScrollColumn = 1 ' déjà fait dans Workbook_Open() ?
End Sub
Dans la feuille où est défini le ToggleButton1 :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Option Explicit ' Feuille où il y a le ToggleButton1
 
Sub ToggleButton1_Click()
    isFullScreen = Not isFullScreen
    ToggleButton1.Value = isFullScreen
    If isFullScreen Then
        ToggleButton1.Caption = "Réduire"
        ToggleButton1.Accelerator = "P"
    Else
        ToggleButton1.Caption = "Agrandir"
        ToggleButton1.Accelerator = "D"
    End If
    AgrandirReduire
End Sub
On a enlevé de AgrandirReduire() tout ce qui relève du ToggleButton1 que l'on ne peut utiliser que dans sa feuille.

Workbook_Open() reste inchangé à part l'accent à enlever.
Dans AgrandirRéduire(), enlevez l'accent du nom des procédures et des noms de variables.
On ne devrait utiliser les accents que dans les chaînes littérale comme "Réduire".

Dans le choix du Boolean isFullScreen, il faut tenir compte qu'il sera False à l'ouverture du classeur.

En cherchant à optimiser AgrandirReduire(), on se rend compte que tout pourrait être fait dans Workbook_Open().
AgrandirReduire() ne servirait alors qu'à basculer entre vue normal et plein écran.

La question que l'on se pose c'est à quoi sert d'avoir créé un ToggleButton1 si c'est pour basculer entre plein écran et vue normale ? Si c'est l'objectif, alors on peut placer sur la barre d'outil d'Excel, le bouton "Plein écran" (Full Screen) qui existe déjà dans "Affichage" (View).
___________

Si la discussion est résolue, vous pouvez cliquer sur le bouton

En bas de ce message s'il vous a apporté des éléments de réponse pertinents, pensez également à voter en cliquant sur le bouton vert ci-dessous.
MattChess est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/08/2011, 01h08   #5
Expert Confirmé
 
Philippe Tulliez
Développeur et formateur VBA, Excel et Word.
Inscription : janvier 2010
Messages : 1 310
Détails du profil
Informations personnelles :
Nom : Philippe Tulliez
Localisation : Belgique

Informations professionnelles :
Activité : Développeur et formateur VBA, Excel et Word.

Informations forums :
Inscription : janvier 2010
Messages : 1 310
Points : 2 667
Points : 2 667
Bonsoir,
Je m'incruste dans cette intervention et peut-être que quelque chose m'a échappé mais il me semble qu'il n'est pas indispensable de passer par une variable booléenne dans le cas présent.
ToggleButton.value étant déjà une valeur Booléenne, je propose une simplification du code déjà proposé.
En module1, ajouté un argument IsFullScreen à la procédure AgrandirReduire
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Option Explicit ' commentaire de ce que fait le module
' Public IsFullScreen As Boolean ' Représente l'état du ToggleButton1 False par défaut
Sub AgrandirReduire(IsFullScreen As Boolean)
  Application.DisplayFormulaBar = False ' déjà fait dans Workbook_Open() ?
  Application.DisplayFullScreen = IsFullScreen
  If Not IsFullScreen Then
    With Application
    .WindowState = xlNormal ' Pourrait être fait uniquement dans Workbook_Open()
    .Width = 185: .Height = 185 ' Idem
    End With
  End If
  ActiveWindow.ScrollRow = 1: ActiveWindow.ScrollColumn = 1 ' déjà fait dans Workbook_Open() ?
End Sub
Dans l'objet Feuil1, réduction du code
Code :
1
2
3
4
5
6
7
8
Option Explicit
Sub ToggleButton1_Click()
  With ToggleButton1
  .Caption = IIf(.Value, "Réduire", "Agrandir")
  .Accelerator = IIf(.Value, "P", "D")
  AgrandirReduire .Value
  End With
End Sub
Dans l'objet ThisWorkBook, faire appel à la procédure AgrandirReduire en passant comme argument la propriété Value du ToggleButton1
Code :
1
2
3
4
5
6
7
Private Sub Workbook_Open()
 Application.DisplayFormulaBar = False
 ActiveWindow.Zoom = 135
 Module1.AgrandirReduire Feuil1.ToggleButton1.Value
 ActiveWindow.ScrollRow = 1
 ActiveWindow.ScrollColumn = 1
End Sub
__________________
Philippe Tulliez
http://philippe.tulliez.be
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)

Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
corona est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/08/2011, 09h02   #6
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
Citation:
Envoyé par XceSs Voir le message
Exact j'y avais pas pensé merci

mais ça marche pas ça me met erreur dans module caché thisworkbook
(..)
j'ai raté l'édition du message ....

il faut modifier ta procédure AgrandirRéduire en précisant le nom de la feuille devant ToggleButton1...

Citation:
Envoyé par XceSs Voir le message
Dans module standard
Code :
1
2
3
4
Sub AgrandirRéduire()
Application.DisplayFormulaBar = False
If Feuil1.ToggleButton1.Value = True Then
(...)
tu peu aussi créer passe par une varaible locale "ToggleButton1" :

et donc en rajoutant 2 lignes de codes ton code fonctionne :
Code :
1
2
3
4
5
6
7
Option Explicit 'Permet de détecter  les problèmes de portées de variables
Sub AgrandirRéduire()
 
Dim ToggleButton1 As ToggleButton
Set ToggleButton1 = Feuil1.ToggleButton1
Application.DisplayFormulaBar = False
(..)



bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2011, 16h18   #7
Nouveau Membre du Club
 
Inscription : août 2010
Messages : 111
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 111
Points : 32
Points : 32
Merci de votre aide, ça fonctionne
XceSs est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h48.


 
 
 
 
Partenaires

Hébergement Web