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 :

[E-02] Lancement de form ouverture du fichier


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de batmat86
    Homme Profil pro
    Charge de clientele
    Inscrit en
    Octobre 2003
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Charge de clientele

    Informations forums :
    Inscription : Octobre 2003
    Messages : 239
    Par défaut [E-02] Lancement de form ouverture du fichier
    Bonjour à tous,

    Je pense que ma questions va sembler très bête pour beaucoup mais là je sèche.

    J'ai réussi à faire tout mon programme en VBA, avec ma form et mon code, grâce au faq et aide de vba. Mon programme fnctionne sans souci lorsque je fais exécuter form.

    Ce que je voudrais faire maintenant, c'est lorsque qu'un utilisateur ouvre mon fichier excel, que cela exécute automatique cette form. L'utilisateur lui aura juste à ouvrir pour pouvoir utiliser le programe. Biensur je souhaite pour ma part pouvoir garder la main pour repasser en code afin de faire des mises à jour si besoin

    Pouvez vous m'indiquer comment dois je procéder car là c'est vraiment le seul point que je n'arrive pas à faire.

    Merci par avance de vos réponses.

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Place l'appel à la macro qui ouvre ton userform dans Thisworkbook, macro Workbook_Open -> Deux clics sur l'objet Thisworkbook dans l'éditeur VBA.
    Je pense que tu as la macro qui affiche ton userform dans un module standard, sinon crée la.
    Dans Thisworkbook :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_Open()
    AfficheMonUsf
    End Sub
    et dans le module standard :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub AfficheMonUsf()
    Load MonUsf
    MonUsf.Show
    End sub
    Bonne journée

  3. #3
    Membre confirmé Avatar de batmat86
    Homme Profil pro
    Charge de clientele
    Inscrit en
    Octobre 2003
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Charge de clientele

    Informations forums :
    Inscription : Octobre 2003
    Messages : 239
    Par défaut
    Bonjour merci de la réponse, cela fonctionne comme cela.

    Par contre il me reste certaines choses à régler avant de pouvoir mettre résolu.

    Car là oui cela lance bien mon programme à l'ouverture, mais il me dit toujours que ce fichier contient des macros et je dois cliquer sur activer. Est il possible qu'à l'ouverture de mon fichier excel, il n'y est pas cette demande ?

    Et deuxième point, il m'ouvre toujours ma feuille1 en fond qui est complétement vide. N'est il pas possible qu'il m'ouvre uniquement mon programme ?

    Sinon, non je n'est créé aucun macro à ma connaissance, puisque je ne connais pas les macros.

    Désolé encore pour toutes ces questions, mais c'est mon premier développement en VBA. Là je n'ai pas eu trop de mal à coder, car mon programme je l'avais fais builder C++, donc j'ai juste à retrancrire le code donc c'est pas trop complexe.

    Merci encore.

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Je ne pense pas que tu puisses modifier ça par macro, ce pb dépendant du niveau de sécurité d'Excel (non de VBA) -> Menu Outils dans Excel -> Options -> Onglet Sécurité -> Sécurité des macros. Et là tu prends tes responsabilités en sélectionnant "sécurité faible"
    Si tu es sûr d'avoir un bon anti-virus...
    Bonne soirée

  5. #5
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    bonjour à vous,

    pour masquer Excel, tu peux ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Visible = False
    à l'ouverture du classeur ou de ton fichier.

    N'oublie pas de remettre à False dans le BeforeClose du classeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.Visible = True
    End Sub
    ou du QueryClose de ton USF
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Application.Visible = True
    End Sub
    Cordialement

  6. #6
    Membre confirmé Avatar de batmat86
    Homme Profil pro
    Charge de clientele
    Inscrit en
    Octobre 2003
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Charge de clientele

    Informations forums :
    Inscription : Octobre 2003
    Messages : 239
    Par défaut
    Bonjour et merci beaucoup à vous

    Tout est donc ok et mon programme terminé

  7. #7
    Membre confirmé Avatar de batmat86
    Homme Profil pro
    Charge de clientele
    Inscrit en
    Octobre 2003
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Charge de clientele

    Informations forums :
    Inscription : Octobre 2003
    Messages : 239
    Par défaut
    Rebonjour, je reviens vers vous car au final cela fonctionne correctement dans l'utilisation simple du logiciel.

    Mais me reste un souci, normalement je dois utiliser une feuille excel que j'ouvre pour remplir après manuellement mon programme et j'ai une autre feuille pour remplir toujours manuellement le résultat.

    Hors lors le programme visual basic est lancé, je ne peux ouvrir d'autres feuilles excel même si je ne met pas le code de fred65200.

    Auriez vous une idée de comment contourner cette situation ? Merci encore par avance.

  8. #8
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    bonsoir, je n'ai pas tout relu, mais de ce que j'ai compris, modifie le code d'Ouskel'n'or
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub AfficheMonUsf()
    Load MonUsf
    MonUsf.Show vbmodeless
    End sub
    @+

    après lecture rapide, dans le Userform
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Option Explicit
     
    Private Sub UserForm_Initialize()
    Windows(ThisWorkbook.Name).Visible = False
    End Sub
     
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Windows(ThisWorkbook.Name).Visible = True
    End Sub
    @+

  9. #9
    Membre confirmé Avatar de batmat86
    Homme Profil pro
    Charge de clientele
    Inscrit en
    Octobre 2003
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Charge de clientele

    Informations forums :
    Inscription : Octobre 2003
    Messages : 239
    Par défaut
    Bonjour, et bien quelle rapidité et d'une efficacité remarquable

    Là tout fonctionne à merveille et je peux donc remettre résolu sans souci

    Merci vraiment beaucoup même si je pense que j'aurais de très grosse optimisation de code à faire car voilà par exemple une toute partie de mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    Case "0122  18 KVA ST"
                PrixAbo = Abo18KVA
                PrixHCMoisBleu = PrixHC3
                PrixHPMoisBleu = PrixHP
                PrixHCMoisBlanc = 0
                PrixHPMoisBlanc = 0
                PrixHCMoisRouge = 0
                PrixHPMoisRouge = 0
                'Tout ce qui concerne HC Bleu
                TextBoxDerRelvIntHCBleu.Enabled = False
                CheckBoxRHC1Bleu.Enabled = False
                TextBoxDerRelvReelleHCBleu.Enabled = False
                CheckBoxRHC2Bleu.Enabled = False
                TextBoxAvDerRelvIntHCBleu.Enabled = False
                'Tout ce qui concerne HP Bleu
                TextBoxDerRelvIntHPBleu.Enabled = True
                CheckBoxRHP1Bleu.Enabled = True
                TextBoxDerRelvReelleHPBleu.Enabled = True
                CheckBoxRHP2Bleu.Enabled = True
                TextBoxAvDerRelvIntHPBleu.Enabled = True
                'Tout ce qui concerne HC Blanc
                TextBoxDerRelvIntHCBlanc.Enabled = False
                CheckBoxRHC1Blanc.Enabled = False
                TextBoxDerRelvReelleHCBlanc.Enabled = False
                CheckBoxRHC2Blanc.Enabled = False
                TextBoxAvDerRelvIntHCBlanc.Enabled = False
                'Tout ce qui concerne HP Blanc
                TextBoxDerRelvIntHPBlanc.Enabled = False
                CheckBoxRHP1Blanc.Enabled = False
                TextBoxDerRelvReelleHPBlanc.Enabled = False
                CheckBoxRHP2Blanc.Enabled = False
                TextBoxAvDerRelvIntHPBlanc.Enabled = False
                'Tout ce qui concerne HC Rouge
                TextBoxDerRelvIntHCRouge.Enabled = False
                CheckBoxRHC1Rouge.Enabled = False
                TextBoxDerRelvReelleHCRouge.Enabled = False
                CheckBoxRHC2Rouge.Enabled = False
                TextBoxAvDerRelvIntHCRouge.Enabled = False
                'Tout ce qui concerne HP Rouge
                TextBoxDerRelvIntHPRouge.Enabled = False
                CheckBoxRHP1Rouge.Enabled = False
                TextBoxDerRelvReelleHPRouge.Enabled = False
                CheckBoxRHP2Rouge.Enabled = False
                TextBoxAvDerRelvIntHPRouge.Enabled = False
                'Tout ce qui concerne les histos
                TextBoxHistoHCBleu.Enabled = False
                TextBoxHistoHPBleu.Enabled = True
                TextBoxHistoHCBlanc.Enabled = False
                TextBoxHistoHPBlanc.Enabled = False
                TextBoxHistoHCRouge.Enabled = False
                TextBoxHistoHPRouge.Enabled = False
            Case "0121  15 KVA ST"
                PrixAbo = Abo15KVA
                PrixHCMoisBleu = PrixHC3
                PrixHPMoisBleu = PrixHP
                PrixHCMoisBlanc = 0
                PrixHPMoisBlanc = 0
                PrixHCMoisRouge = 0
                PrixHPMoisRouge = 0
                'Tout ce qui concerne HC Bleu
                TextBoxDerRelvIntHCBleu.Enabled = False
                CheckBoxRHC1Bleu.Enabled = False
                TextBoxDerRelvReelleHCBleu.Enabled = False
                CheckBoxRHC2Bleu.Enabled = False
                TextBoxAvDerRelvIntHCBleu.Enabled = False
                'Tout ce qui concerne HP Bleu
                TextBoxDerRelvIntHPBleu.Enabled = True
                CheckBoxRHP1Bleu.Enabled = True
                TextBoxDerRelvReelleHPBleu.Enabled = True
                CheckBoxRHP2Bleu.Enabled = True
                TextBoxAvDerRelvIntHPBleu.Enabled = True
                'Tout ce qui concerne HC Blanc
                TextBoxDerRelvIntHCBlanc.Enabled = False
                CheckBoxRHC1Blanc.Enabled = False
                TextBoxDerRelvReelleHCBlanc.Enabled = False
                CheckBoxRHC2Blanc.Enabled = False
                TextBoxAvDerRelvIntHCBlanc.Enabled = False
                'Tout ce qui concerne HP Blanc
                TextBoxDerRelvIntHPBlanc.Enabled = False
                CheckBoxRHP1Blanc.Enabled = False
                TextBoxDerRelvReelleHPBlanc.Enabled = False
                CheckBoxRHP2Blanc.Enabled = False
                TextBoxAvDerRelvIntHPBlanc.Enabled = False
                'Tout ce qui concerne HC Rouge
                TextBoxDerRelvIntHCRouge.Enabled = False
                CheckBoxRHC1Rouge.Enabled = False
                TextBoxDerRelvReelleHCRouge.Enabled = False
                CheckBoxRHC2Rouge.Enabled = False
                TextBoxAvDerRelvIntHCRouge.Enabled = False
                'Tout ce qui concerne HP Rouge
                TextBoxDerRelvIntHPRouge.Enabled = False
                CheckBoxRHP1Rouge.Enabled = False
                TextBoxDerRelvReelleHPRouge.Enabled = False
                CheckBoxRHP2Rouge.Enabled = False
                TextBoxAvDerRelvIntHPRouge.Enabled = False
                'Tout ce qui concerne les histos
                TextBoxHistoHCBleu.Enabled = False
                TextBoxHistoHPBleu.Enabled = True
                TextBoxHistoHCBlanc.Enabled = False
                TextBoxHistoHPBlanc.Enabled = False
                TextBoxHistoHCRouge.Enabled = False
                TextBoxHistoHPRouge.Enabled = False
    Donc comme vous pouvez le voir, il y a beaucoup de code qui se répéter selon certain cas et me fais beaucoup de copier coller et donc de code. A mon avis c'est optimisable, quoi que ....

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    En effet, tu peux, optimiser le code sans pour cela l'accélérer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim Ctrl a&s control
          'Tu verrouilles tous les contrôles
          For each Ctrl in Me.controls
               ctrl.Enabled = false
          Next
          'avant de déverrouiller ceux que tu veux
           TextBoxDerRelvIntHPBleu.Enabled = True
           CheckBoxRHP1Bleu.Enabled = True
           TextBoxDerRelvReelleHPBleu.Enabled = True
           CheckBoxRHP2Bleu.Enabled = True
           TextBoxAvDerRelvIntHPBleu.Enabled = True
           TextBoxHistoHPBleu.Enabled = True
    Mais tu peux aussi créer un tableau de tes contrôles à deux dimensions, une pour le nom, une pour le boolean true ou False.
    Ton code sera peut-être plus lisible mais aussi moins rapide.

    Mais tu as une autre solution plus mieux sioux qui serait de placer tous les contrôles dont tu veux interdire l'accès dans un ou plusieurs cadre (frame) selon leurs dispositions, cadre dont la propriété borderStyle serait = fmBorderStyleNone afin qu'on ne le/s voit pas.
    Tu n'aurais plus alors qu'à mettre une seule fois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Frame1.enabled = false 'ou True
    Bonne nuit

Discussions similaires

  1. [VBA-E]Lancement de macro à l'ouverture du fichier
    Par bastien62200 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 25/02/2006, 00h20
  2. Ouverture de fichier en api
    Par Michaël dans le forum Windows
    Réponses: 9
    Dernier message: 10/12/2003, 17h47
  3. Ouverture de fichier
    Par Ricou.13 dans le forum VBA Access
    Réponses: 3
    Dernier message: 07/10/2003, 09h59
  4. Réponses: 2
    Dernier message: 26/02/2003, 16h18
  5. [VBA-E] Evenement ouverture de fichier
    Par gjeff dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 13/12/2002, 10h42

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