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 :

Perte d'un Userform ouvert précédemment


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Juillet 2010
    Messages : 5
    Par défaut Perte d'un Userform ouvert précédemment
    Bonjour,

    Je travaille en ce moment sur un projet professionnel avec imbrication de plusieurs Userform, enregistrement des données saisies par un utlisateur et rapatriement des données saisies pour modifications éventuelles. Le but de la macro est d'une part de gérer un système d'information sur des clients et d'autre part de générer un contrat à terme par publipostage.

    On va dire que Je suis un développeur sur VBA Excel intermédiaire. Je rencontre tout de même un soucis, même après avoir recherché un bon moment sur votre excellent site.

    Je travaille sur 2 classeurs excel, qui restent ouvert en même temps. Un qui sert au lancement de la macro avec certains paramètres, l'autre concerne le classeur du client qui enregistre les données saisies par l'utilisateur.

    Lorsqu'il s'agit d'un client nouveau, le classeur des paramètres créer un classeur client et enregistre une feuille spécifique dans le classeur client par l'intermédiaire d'une userform principale. Cette opération se déroule sans problème. C'est au moment de revenir vers cette userform principale qu'un message est généré.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Option Explicit
    '**************************************************************
    ' BOUTON RETOUR - bouton qui existe dans la feuille Excel CAPER
    '**************************************************************
    Private Sub CommandButton1_Click()
        ActiveWorkbook.Save                             ' enregistre le classeur
        Windows("TEST sur macro 2007.xlsm").Activate    ' active la feuille CONCOURS
        UserForm1.Show                                  ' ouvre la Userform n°1
    End Sub
    Dans la feuille qui vient d'être copie, il y a un bouton "RETOUR". Lorsque je clique dessus, voici le message qui ressort : "valeur non définie", et si j'enlève Option Explicit, c'est le message "Objet requis" qui s'affiche.

    J'ai l'impression qu'il ne reconnaît plus cette Userform1 dès que le deuxième classeur est sélectionnée ??? (A noter que cette Userform1 a été caché précédemment par l'instruction ("Me.Hide").

    Auriez-vous une idée du problème que je rencontre ??

    Merci d'avance pour vos réponses

    Probalian

  2. #2
    Membre éclairé Avatar de Duddy
    Homme Profil pro
    Agent de maitrise
    Inscrit en
    Novembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations professionnelles :
    Activité : Agent de maitrise
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 257
    Par défaut
    Bonjour le forum,

    Si j'ai bien compris, depuis ton second fichier, tu essaies d'afficher le form du 1er fichier.

    A ce compte là, il faut que tu lui dises où il se trouve.
    Exemple: Workbooks("blabla.xls"). + objet

    Ne m'en veux pas sur la syntaxe je l'ai pas testé, mais j'essaierai cette méthode pour voir.

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Juillet 2010
    Messages : 5
    Par défaut
    Bonjour Duddy,

    Merci pour ta réponse. L'idée était là et j'ai essayé, mais Workbooks("..."). + objet, n'admet pas l'objet Userform.

    Petite précision effectivement, lorsqu'il tente de chercher la Userform n°1 qui se trouve dans le classeur n°1, le classeur actif est le classeur n°2. C'est pour ça que dans le code j'active le classeur n°1 pour lancer la Userform1 mais rien n'y fait, j'ai le message d'erreur qui apparaît.

    Je suis toujours en panne. Merci d'avance pour vos réponses !!! Je continue aussi de chercher de mon côté.

    Probalian

  4. #4
    Membre éclairé Avatar de Duddy
    Homme Profil pro
    Agent de maitrise
    Inscrit en
    Novembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations professionnelles :
    Activité : Agent de maitrise
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 257
    Par défaut
    Bonjour le forum,

    Pourquoi ne pas lancer une macro qui se trouverais dans ton fichier 1 depuis ton bouton?

    Ainsi tu pourrais activer ton userform.

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut heu.!!
    bonjour

    une solution serai en début de création de ton nouveau fichier
    initialiser 2 variable workbook

    exemple:
    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
     
    dim classeur1,classeur1 as workbook
    classeur1=activeworkbook.name
     
    'ici ta macro 
     
    'et des que le nouveau classeur est créé
     
    classeur2=thisworkbook.name
     
     
    'et avant le userformX.show
     
    classeur1.activate
    userformX.show
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Attention patricktoulon.
    Tu devrais tester tes codes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dim classeur1,classeur1 as workbook
    Non seulement tes 2 variables ont le même nom mais, en plus, seule la deuxième est déclarée As Workbook, l'autre l'est en Variant.

    La bonne syntaxe est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dim classeur1 As Workbook, classeur2 As Workbook
    Si classeur1 est déclarée As Workbook, cette ligne provoque une erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    classeur1=activeworkbook.name
    La syntaxe correcte est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set classeur1 = ActiveWorkbook
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  7. #7
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Juillet 2010
    Messages : 5
    Par défaut
    Bonjour,

    Merci pour vos réponses.

    Je vais tester tout ça et je reviens vers vous pour vous signaler si ça fonctionne. Si c'est bon, je mettrai l'affaire comme "résolu".

    A trés bientôt

    Probalian

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut
    oui tu a raison alain tech


    j'ai écrit ce bout de code en vitesse
    par contre chez moi le active workbook.name fonctionne chez moi

    enfin il me semble

    puisque je m'en était servi pour mon devis facturier

    lors de la copie de devis ou facture

    le devis facturier est dans les contributions général vba


    enfin pour ce code c'est le principe qui est bon mille excuse pour les faute de code

    oupss!!!!!!!!


    je reprend il y a des chance pour que j'ai utilisé des variables (string) d'où le activeworkbook.name


    mille excuse

    mais le principe est le même
    on déclare deux variable
    la première prend le nom du classeur 1
    et la deuxième prend le nom du classeur 2
    ensuite les activates respectifs au moment voulu


    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  9. #9
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Juillet 2010
    Messages : 5
    Par défaut
    Bonjour à nouveau,

    J'ai testé mais je reste encore en panne. Peux-être que j'ai mal expliqué mon problème (désolé). Pour information, je travaille sous VBA Excel 2007.

    Je reprends l'explication avec différents codes :

    J'ai donc 2 classeurs ouverts (classeur1 et classeur2)

    Ma macro se lance à partir du classeur1. Sur la Userform1, j'ai un bouton qui me permet d'accéder au classeur2 vers la feuille1.

    voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    '********************************************************************************************
    ' CAPER & POINT MORT - bouton qui lance l'affichage de la feuille CAPER après click du bouton
    '********************************************************************************************
    Private Sub CommandButton3_Click()
        Dim racine As String                            ' délcaration de la variable racine
        racine = UserForm2.TextBox1.Value               ' Identification de la variable racine dans la Userform n°2
        Me.Hide                                         ' cache la Userform précédente
        Windows(racine & ".xlsm").Activate              ' Affiche le classeur RACINE
        Sheets(racine + "CAPER").Select                 ' sélectionne la feuille racine + CAPER
        Range("D3:D4").Select                           ' sélectionne la cellule D3:D4 de cette feuille
    End Sub
    Une fois sur le classeur2 feuille1, j'ai un bouton qui me permet de revenir (en théorie) vers le classeur1 et doit revenir sur l'affichage de la Userform1.

    Voici le code retour :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    '**************************************************************
    ' BOUTON RETOUR - bouton qui existe dans la feuille Excel CAPER
    '**************************************************************
    Private Sub CommandButton1_Click()
        ActiveWorkbook.Save                             ' enregistre le classeur actif
        Windows("TEST sur macro 2007.xlsm").Activate    ' active la feuille CONCOURS
        UserForm1.Show                                  ' ouvre la Userform n°1
    End Sub
    Le but étant de pouvoir faire des aller-retour autant de fois que l'on veut entre les 2 classeurs et à chaque fois, il doit réafficher la Userform1 après chaque retour.

    Voici aussi le code quand la Userform1 est activée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    '************************************************************************************************
    ' USERFORM N° 1 : Il s'agit de la userform principale de la demande de concours + la 512 + divers
    '************************************************************************************************
    '
    Private Sub UserForm_Activate()                     ' Action lorsque la Userform n°1 s'active
        Dim racine As String                            ' délcaration de la variable racine
        racine = UserForm2.TextBox1.Value               ' Identification de la variable racine dans la Userform n°2
        TextBox1 = racine                               ' Affichage de la variable racine dans la Textbox1 de la Userform n°2
        Windows("TEST sur macro 2007.xlsm").Activate    ' Affiche le classeur CONCOURS
        Sheets("Feuil1").Select                         ' sélectionne la feuille 1 du classeur actif
    End Sub
    C'est là que le problème se pose avec le message d'erreur "Objet requis" si Option Explicit n'est pas actif. Je ne m'explique pas pourquoi ça bloque.

    J'espère avoir fourni plus d'information si quelqu'un à une solution.

    Merci d'avance

    Probalian

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonjour
    voila ce que tu marque
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     racine = UserForm2.TextBox1.Value               ' Identification de la variable racine dans la Userform n°2
        Me.Hide                                         ' cache la Userform précédente
        Windows(racine & ".xlsm").Activate              ' Affiche le classeur RACINE
        Sheets(racine + "CAPER").Select                 ' sélectionne la feuille racine + CAPER
        Range("D3:D4").Select                           ' sélectionne la cellule D3:D4 de cette feuille
    End Sub
    c'est tout a fait normal que il te dise object requis

    tout simplement sur la ligne" Sheets(racine + "CAPER").Select ' sélectionne la feuille racine

    tu lui demande sheets (nomduclasseur et nom de la feuille) sa ne peut pas marcher

    puisque dans la ligne juste au dessus tu a activé le classeur en question il ne te reste plus qu'a selectionner le sheets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    Sheets( "CAPER").Select
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  11. #11
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Juillet 2010
    Messages : 5
    Par défaut
    Bonjour Patrick,

    Merci pour tes précisions. Par contre, lorsque je suis en débogage "objet requis", c'est sur la Userform1 qu'il pointe.

    L'activation du classeur client ou de la feuille se fait avec la variable "racine" qui est définie au début de ma macro et qui est la variable qui repère le dossier d'un client.

    Tu as donc un classeur avec racine.xlsm et plusieurs feuilles avec racine + "CAPER" ou racine + "JU", etc... ça fonctionne bien cette partie là.

    Merci en tout cas pour ton implication dans mon problème. J'ai pas encore trouvé de solution pour l'objet Userform1 qui plante.

    Probalian

  12. #12
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonjour

    revoilà ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    racine = UserForm2.TextBox1.Value               ' Identification de la variable racine dans la Userform n°2
        Me.Hide                                         ' cache la Userform précédente
        Windows(racine & ".xlsm").Activate              ' Affiche le classeur RACINE
        Sheets(racine + "CAPER").Select                 ' sélectionne la feuille racine + CAPER
        Range("D3:D4").Select                           ' sélectionne la cellule D3:D4 de cette feuille
    End Sub
    alors je vais répéter plus doucement

    au début tu déclare une variable"racine" qui prend la valeur de textbox1

    a supposer que la valeur de textbox1 est "toto"

    racine est = a "toto"

    donc quant tu marque "Windows(racine & ".xlsm").Activate "tu active toto.xlsm

    et quant tu marque "Sheets(racine + "CAPER").Select"tu selection la feuille nommée "totocaper"

    si tu a bien un feuille qui s'apelle comme ca c'est bon si non tu a compris ton erreur

    j'espere avoir été plus clair cette fois ci


    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

Discussions similaires

  1. Comment accéder à un bouton d'un UserForm ouvert en non modal
    Par jayjay08 dans le forum Général VBA
    Réponses: 6
    Dernier message: 22/08/2011, 12h42
  2. pas d'accè à ma feuille de calcul quand userform ouvert
    Par bigmousse69 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/04/2009, 13h53
  3. acces cellule avec userform ouvert
    Par vinystic dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/01/2009, 17h23
  4. Ouvrir un classeur 'par dessus' un userform ouvert
    Par alexsolex dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 28/10/2007, 20h16
  5. Récupérer référence d'une popup ouverte précédemment
    Par Ougha dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 20/09/2007, 16h01

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