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 :

Fonction si impossible dans userform_initialize()


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2018
    Messages : 8
    Par défaut Fonction si impossible dans userform_initialize()
    Bonsoir,
    Mon objectif : afficher ou pas un bouton de commande sur un formulaire (Accueil). Choix possible via un 2° formulaire (paramétres) avec une case à cocher.
    Mon code de UserForm_initialize()

    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
     
    Private Sub UserForm_Initialize()
    'Initialisation FormAccueil
    'Les fonctions if ne passent pas ici pq?
    'Pourtant les .visible passent
     
     
    'Paramétrages de la taille
        Me.Height = 700
        Me.Width = 900
        ' BtnDevis.Visible = False ok passe bien
     
        If ChBoxDemandeDevis.Value = False Then
            BtnDemandeDevis.Visible = False
        Else
            BtnDemandeDevis.Visible = True
        End If
     
     
    End Sub
    Dans l'état, "Erreur d'exécution '424' avec débogage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Sub ouvrirFormAccueil()
    ' Ouvre le formulaire d'accueil
    ' Prévoir ouverture dés chargement du fichier
    ' lors de l'utilisation
    '
        FormAccueil.Show
     
    End Sub
    sur FormAccueil.Show

    Si je met la fonction If en commentaire, pas d'erreur...mais pas d'objectif non plus.
    Pour info (suis trés trés débutant, mais j'ai bien cherché...)

    Merci pour votre aide.

  2. #2
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2018
    Messages : 12
    Par défaut
    Salut,

    erreurde ma par

  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    1) A ZTeddy : que racontes-tu là ? La propriété value d'une checkbox (relis son message) est bien une booléenne.
    2) A brunolemaire : l'évènement initialize n'est pas le plus adapté. Il intervient avant que tous les objets de l'userform ne soient forcément chargés et disponibles. Utilise plutôt l'évènement Activate.
    NB : tout cela à condition, bien évidemment, qu'il n'y ait aucune erreur dans le nom des objets invoqués.

    PS (et tout-à-fait accessoirement) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If ChBoxDemandeDevis.Value = False Then
            BtnDemandeDevis.Visible = False
        Else
            BtnDemandeDevis.Visible = True
        End If
    peut s'écrire très simplement ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BtnDemandeDevis.Visible = ChBoxDemandeDevis.Value

  4. #4
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2018
    Messages : 12
    Par défaut
    EN effet, autant pour moi j’étais sur un textBox (hors sujet)... Je retire mes bêtises

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2018
    Messages : 8
    Par défaut Test suivant vos conseils
    Bonjour,
    Merci pour vos réponses, mon objectif n'est pas atteind.
    Code pour initialize :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Private Sub UserForm_Initialize()
    'Initialisation FormAccueil
    'Les fonctions if ne passent pas ici pq?
    'Pourtant les .visible passent
     
     
    'Paramétrages de la taille
        Me.Height = 700
        Me.Width = 900
     
     
     
    End Sub
    et donc la fonction activate
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Private Sub UserForm_Activate()
        ' BtnDevis.Visible = False ok passe bien
     
    BtnDemandeDevis.Visible = ChBoxDemandeDevis.Value
    ' BtnDemandeDevis.Visible = False ici cela ne fait pas d erreur...
    End Sub
    Tjrs message d'erreur d'éxécution '424'...
    En direct avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BtnDemandeDevis.Visible = False
    ça fonction
    Certainement une erreur de débutant, mais laquelle... Ailleurs dans le code !! mais que 3 formulaires avec boutons, textes, labels...

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Le code que tu présentes doit fonctionner et même sur Initialize() !
    Supprime tes contrôles et crée les à nouveau pour voir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Sub UserForm_Initialize()
     
        Me.Height = 700
        Me.Width = 900
        BtnDemandeDevis.Visible = ChBoxDemandeDevis.Value
     
    End Sub

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2018
    Messages : 8
    Par défaut Codes neufs sur feuille vierge...
    Messieurs Bon Dimanche,

    Ci-dessous mes codes neufs...
    Ouverture formulaire Accueil bouton associé à une macro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Sub OuvrirFormAccueil()
     
        FormAccueil.Show
     
    End Sub
    Formulaire Accueil avec 3 boutons :
    - BtnDevis;
    - BtnCommande;
    - BtnParametre (ouvre FormParametre)

    Formulaire Parametre avec 2 CheckBox :
    - CBoxDevis avec Value True
    - CBoxCommande avec Value True

    Code de UserForm_initialize() du fomulaire Accueil
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Private Sub UserForm_Initialize()
     
    BtnDevis.Visible = CBoxDevis.Value
    BtnCommande.Visible = CBoxCommande.Value
     
    End Sub
    De suite Erreur d'éxecution '424' sur le code d'ouverture du FormAccueil.show...
    Copie sur UserForm_Activate() et... idem !!!!

    Le pire, en direct ça passe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Sub UserForm_Initialize()
     
    BtnDevis.Visible = False
    'BtnCommande.Visible = CBoxCommande.Value
     
     
    End Sub
    Merci.

    (Version d'EXCEL non piraté...)

  8. #8
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Tu montres ici deux procédures évènementielles.
    J'espère qu'elles ne cohabitent pas et que tu as supprimé (comme il se doit) la procédure Private Sub UserForm_Initialize()
    confirme

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2018
    Messages : 8
    Par défaut Confirmation
    Bjr UNPARIA,

    Oui, je te confirme qu'il y a qu'une procédure événementielle à la fois. Originellement avec initialize(), puis suivant conseil avec activate() (en supprimant initialize())...
    Et test (suivant conseil) sur un nouvelle espace de travail, prog EXCEL perso, (autre CT boulot), feuille...

    Truc anormal ?
    Initialement dans le prog, mes 2 valeurs ChechBox.visible = TRUE
    J'ouvre formulaire Accueil, navigue vers formulaire paramètre, les cases à cocher sont bien cocher (TRUE)...
    Tout est ok, je décoche la case (ChBOXDevis), quitte mon formulaire... Bouton DEVIS toujours là...pas normal, et en revenant vers le formulaire paramètre, mes 2 CheckBox toujours VRAI (pourtant décoché juste avant !!!)
    N'y a-t-il pas un problème mémoire ?

    De même (je suis débutant) faut-il systématiquement FERMER un formulaire quand on OUVRE un autre ? (perte des valeurs?)
    Car, j'ai ouvert l'ACCUEIL, puis ouvert PARAMETRE, change valeur, ferme PARAMETRE et suis de nouveau sur ACCUEIL... Y-a-t-il une erreur de 'forme' ?
    Je cherche...

  10. #10
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Postes t'on fichier de façon à ce que nous puissions tester sinon, on va passer du temps inutile à trouver de quoi ça vient !

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2018
    Messages : 8
    Par défaut Fichier
    Ci-joint fichier.
    Merci
    Fichiers attachés Fichiers attachés

  12. #12
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    1) je n'ouvrirai jamais un classeur tiers et n'ai pas ouvert le tien
    2) il est plus que probable que tu invoques un objet qui ne fait pas partie des objets du userform concerné
    3) un userform déchargé revient bien évidemment (ainsi que tous les objets qu'il contient et toutes les variables qu'il gère) par construction à son état initial
    4) il n'y a aucune obligation de fermer un userform pour en ouvrir un autre. Mais cela implique la mise à False de leur propriété Showmodal (à True, cette propriété impose que l'on reste où l'on est).

  13. #13
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    De même (je suis débutant) faut-il systématiquement FERMER un formulaire quand on OUVRE un autre ? (perte des valeurs?)
    Il y a un bel exemple dans l'aide en ligne.
    Cela vaut la peine de temps en temps de cliquer sur la touche F1

    Show, méthode, exemple
    Nous supposons dans l'exemple suivant qu'un programme comporte deux objets UserForm. Dans l'événement Initialize de l'objet UserForm1, l'objet UserForm2 est chargé et affiché. Lorsque l'utilisateur clique sur l'objet UserForm2, celui-ci est masqué et l'objet UserForm1 apparaît. Lorsque l'utilisateur clique sur l'objet UserForm1, l'objet UserForm2 est réaffiché.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ' Procédure d'événement Initialize pour UserForm1
    Private Sub UserForm_Initialize()
        Load UserForm2
        UserForm2.Show
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ' Événement Click pour UserForm2
    Private Sub UserForm_Click()
        UserForm2.Hide
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ' Événement Click pour UserForm1
    Private Sub UserForm_Click()
        UserForm2.Show
    End Sub
    Philippe Tulliez
    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
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2018
    Messages : 8
    Par défaut Post de mon code en ligne
    Messieurs,
    J'apprends avec vos réponses, et post le code plutôt que le fichier...

    Code de la macro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Sub OuvrirFormAccueil()
     
     
        FormAccueil.Show
     
    End Sub
    Formulaire Accueil avec 3 boutons : BtnDevis, BtnCommande et BtnParametre
    Code FormAccueil
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Private Sub BtnParametre_Click()
     
        FormParametre.Show
     
    End Sub
     
     
    Private Sub UserForm_Initialize()
        BtnDevis.Visible = CBoxDevis.Value
        BtnCommande.Visible = CBoxCommande.Value
    End Sub
    Code du Formulaire PARAMETRE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub BtnFermer_Click()
        FormAccueil.Show
    End Sub
    Avec 2 CheckBox ! CBoxDevis.value = TRUE et CBoxCommande.value = True dans les propriétées.

    Message d'erreur : Erreur d'exécution '424': Objet requis
    Ligne jaune sur FormAccueil.Show

  15. #15
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    C'est bel et bien ce que je devinais :
    2) il est plus que probable que tu invoques un objet qui ne fait pas partie des objets du userform concerné
    on perd là beaucoup de temps à tourner autour du pot.
    Moi, je m'en vais de ce pas.

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2018
    Messages : 8
    Par défaut Désolés de faire perdre du temps !
    Tout le monde ne peut pas avoir votre niveau!!!

    J'ai bien envie d'en écrire plus, mais je m'arrête là, ce n'est pas le rôle d'un forum.

    Concernant mon erreur, je remarque un début d'explication et continue à chercher une solution.
    Dans mon userform_initialize() du FormAccueil, j'appel bien un objet (ChBoxDevis) de l'autre formulaire FormParametre, qui semble-t-il est interdit...
    Je découvre les faces cachées de la POO...
    Dorénavant je vais essayer avec une variable entre les deux formulaires.
    Est-ce la meilleure solution, je ne sais pas, mais je cherche...

    Merci.

  17. #17
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    j'appel bien un objet (ChBoxDevis) de l'autre formulaire FormParametre, qui semble-t-il est interdit...
    "interdit" ? --->> non !
    On dit tout simplement à Monsieur VBA, qui n'est pas un devin, où est cet objet --->>>>>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FormParametre.ChBoxDevis
    De la même manière qu'on préciserait la ville dans laquelle se situe une rue dont on donne le nom.
    Je crois vraiment que tu devrais calmement commencer par le commencement (les notions de base), comme chacun (dont moi).
    Bonne chance.

  18. #18
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    J'ai lu en diagonale mais quand je vois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    BtnDevis.Visible = CBoxDevis.Value
    sachant que "BtnDevis" est un objet du formulaire "FormAccueil" et que "CBoxDevis" est un objet du formulaire "FormParametre" en l'état, ce n'est pas près de fonctionner sachant que les objets de l'un sont invisibles de l'autre !

  19. #19
    Membre expérimenté
    Homme Profil pro
    chef de projet transverse MOE
    Inscrit en
    Janvier 2015
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : chef de projet transverse MOE
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2015
    Messages : 121
    Par défaut
    Citation Envoyé par Theze Voir le message
    Bonjour,

    J'ai lu en diagonale mais quand je vois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    BtnDevis.Visible = CBoxDevis.Value
    sachant que "BtnDevis" est un objet du formulaire "FormAccueil" et que "CBoxDevis" est un objet du formulaire "FormParametre" en l'état, ce n'est pas près de fonctionner sachant que les objets de l'un sont invisibles de l'autre !
    Est ce qu'un préfixage du "CBoxDevis.Value" par un "FormParametre." fonctionnerait? Et ne serait il donc pas juste question de dire exactement ou se trouve la variable?
    Il me semble que oui (mais je dis peut etre des conneries).

  20. #20
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Est ce qu'un préfixage du "CBoxDevis.Value" par un "FormParametre." fonctionnerait?
    Bien évidemment, qu'il fonctionnerait.

    Rappel : la seule évocation d'un userform le charge en mémoire et en rend accessible son contenu.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 5
    Dernier message: 06/04/2011, 10h02
  2. fonction équivalente à la fonction MOD (oracle) dans ms-sql
    Par rodrigue50 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 14/07/2005, 16h14
  3. Réponses: 5
    Dernier message: 06/05/2005, 19h10
  4. [C#] balise <a> en fonction d'infos dans l
    Par Pierrre dans le forum ASP.NET
    Réponses: 2
    Dernier message: 04/08/2004, 12h40
  5. Réponses: 12
    Dernier message: 14/06/2004, 13h06

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