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 :

Automatisation d'un multipage [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Mars 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 23
    Par défaut Automatisation d'un multipage
    Bonjour à tous et à toutes,
    Je cherche désespérement à automatiser un multipage afin qu'un utilisateur puisse le modifier à sa convenance.
    Je m'explique

    EX : Je souhaite créer un multipage pour rentrer plusieurs personnes dans un formulaire.
    Par exemple pour un groupe de 3 personnes, je souhaiterais que l'utilisateur puisse avoir ainsi 3 onglet dans son multipage, nommés Personne1, Personne2, Personne3.
    Le premier problème intervient ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    'bouton +1 personne
    Private Sub CommandButton3_Click()
    Dim k As Integer
    UserForm1.MultiPage1.Pages.Add
    k = UserForm1.MultiPage1.Pages.Count
    MultiPage1.Pages.Item(k).Caption = "Personne" & k
    End Sub
    Avec ce code-ci, je souhaite que lorsque l'utilisateur clique sur le bouton "ajouter une personne", l'onglet se créer avec comme nom "Personne2" si c'est la deuxième personne et "Personne3" si c'est la 3ème etc,
    Sauf qu'ici Item(k) n'est pas accepté et si jamais il l'était, la valeur changerais a chaque fois qu'on ajoute une autre personne...

    Pour résumer, j'aimerais que chaque création de page prenne un titre automatique avec "Personne k" avec k le numero de la page.


    De plus, après recherche je ne trouve pas le moyen d'automatiser le contenu de cette page.
    Imaginons, que dans le formulaire de base, dans l'onglet 1 pour la personne 1, il y a 2 TextBox pour son nom et son prénom.
    Est-il possible lorsque l'utilisateur ajoute une page au multipage, celle-ci soit une copie-modele de la premiere page ?
    C'est à dire, en ajoutant "Personne2", dans cette nouvelle page Personne2, il y ait le champ pour Nom et prénom ?

    Merci d'avance pour la lecture de ce message et pour d'éventuelles réponses !

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub CommandButton1_Click()
     
    With Me.MultiPage1
        .Pages.Add
        .Pages(0).Controls.Copy
        .Pages(.Pages.Count - 1).Paste
        .Pages(.Pages.Count - 1).Caption = "Personne" & .Pages.Count
    End With
    End Sub

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Mars 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 23
    Par défaut
    Whouah !!!
    Merci infiniment mercatog, c'est exactement ce qu'il me fallait... MERCIIII !

    Pour finir aurais-tu une idée de comment récupérer les données de ces textbox créées par l'utilisateur ? Elle ne sont pas définies de base dans le code, du coup même en essayant textbox(n+1) avec n le dernier numero de mon document, cela ne fonctionne pas...

    Merci d'avance

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Une usine à gaz est entrain de se concoter

    Une proposition: utilise les tags de tes contrôles de la 1ère page. Ensuite on va boucler sur les contrôles de la page créés, si les noms changent, les tag restent figés

    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
    16
    17
    18
    19
    Private Sub CommandButton1_Click()
    With Me.MultiPage1
        .Pages.Add
        .Pages(0).Controls.Copy
        .Pages(.Pages.Count - 1).Paste
        .Pages(.Pages.Count - 1).Caption = "Personne" & .Pages.Count
        .Value = .Pages.Count - 1
    End With
    End Sub
     
    Private Sub CommandButton2_Click()
    Dim Ctr As Control
     
    With Me.MultiPage1
        For Each Ctr In .Pages(.Value).Controls
            MsgBox Ctr.Name & "-> Tag: " & Ctr.Tag
        Next Ctr
    End With
    End Sub
    Multipage1.page(multipage1.value) est la page active

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Mars 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 23
    Par défaut
    Re-bonjour mercatog !
    Après de nombreux essais j'ai enfin réussi a obtenir ce que je souhaitais !
    Je te remercie encore de ton aide, précise rapide et concise !

    Bonne journée à toi !

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Après de nombreux essais j'ai enfin réussi a obtenir ce que je souhaitais !
    Pour les futurs forumistes, il est souhaitable de proposer ton code final qui pourrait aider un jour quelqu'un ou quelqu'un un jour

  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Mars 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 23
    Par défaut
    Voila ma solution,
    Ayant un groupe maximal de personne défini, j'ai contourner le problème de récupérations d'informations en affichant des pages cachés plutôt qu'en les copiants
    A adapter :
    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
    Private Sub Personne(number As Byte)
     Dim n As Byte
     For n = 1 To Me.MultiPage1.Pages.Count - 1
      Me.MultiPage1.Pages(n).Visible = n <= number
     Next
    End Sub
    
    Private Sub Bouton_1personne_Click()
     Personne 0
    End Sub
    
    etc...
    
    Private Sub Bouton_npersonne_Click()
     Personne (n-1)
    End Sub
    Mes labels étant du coup tous dans le fichier de départ, simplement caché ou non, je récupère ainsi les champs uniquement remplis
    Merci !

  8. #8
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Solution non évolutive et surdimensionnée.

    Si on ajoute d'autres personnes, on sera obligé de modifier la structure de l'userform.

    Peur être avec une seule combobox (regroupant les personnes et reste évolutive) en plus de tes autres contrôles uniques et sans multipage. (genre formulaire/sous-formulaire d'access)

    Mais bon, là c'est une logique de conception et selon ton contexte.

  9. #9
    Membre averti
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Mars 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 23
    Par défaut
    Le problème étant que même en récupérant les tags, lors de la création dynamique, le Code source VBA m'indique libellé inconnu quand je demande de renvoyer la textBox2, correspondant à la 2ème personne par exemple.
    Alors qu'en utilisant les tags, je vois pertinemment que c'est le bon label/tag.

  10. #10
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    1. Partant de ta conception initiale:
    Supposons que ta première page de ton multipage contient 2 textbox TextBox1 et TextBox2. On y inscrit respectivement dans leur tag "TextBox1" et "TextBox2" ou n'importe quel nom T1 et T2

    Avec cette fonction, on récupère a valeur inscrite dans le contrôle de la page active dont le tag est "TextBox1" (on ne se soucie guère de son nom)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function Valeur(ByVal Tg As String) As String
    Dim Ctr As Control
     
    With Me.MultiPage1
        For Each Ctr In .Pages(.Value).Controls
                If Ctr.Tag = Tg Then
                    Valeur = Ctr.Value
                    Exit For
            End If
        Next Ctr
    End With
    End Function
    Procédure d'appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub CommandButton2_Click()
     
    MsgBox Valeur("TextBox1")
    End Sub
    C'est de la gym.
    _________________________________________________________________________________________________________

    2. Maintenant une autre proposition de conception ( Dans le cas où le formulaire permet de saisir des données semblables à des personnes différentes); au lieu d'utiliser un multipage avec autant de pages que de personnes (qu'elles soient créées dynamiquement ou manuellement) pourquoi ne pas se débarrasser du multipage et utiliser une combobox alimentée par la liste des personnes et tes 2 Textbox. L'utilisateur choisira la personne à partir de la combobox et ensuite saisit les informations la concernant dans les textbox.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. automatiser un package
    Par farnoune dans le forum Oracle
    Réponses: 4
    Dernier message: 09/08/2004, 16h45
  2. Réponses: 2
    Dernier message: 01/06/2004, 17h12
  3. Automatisation et/ou installer pour une bd sql
    Par ZePitou dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 22/02/2004, 13h54
  4. [MAPI][info] automatisation des taches de messagerie
    Par peppena dans le forum Windows
    Réponses: 6
    Dernier message: 22/01/2004, 17h06
  5. Automatiser la mise à jour de la bD SQL SERVER from Access
    Par Nadaa dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/11/2003, 16h23

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