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 :

Référencement de multipage


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    en Formation
    Inscrit en
    Mars 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : en Formation

    Informations forums :
    Inscription : Mars 2020
    Messages : 10
    Par défaut Référencement de multipage
    Bonjour à tous,

    Nom : userform_generer1.PNG
Affichages : 315
Taille : 6,1 Ko

    Comme vous le voyez, j'ai un control multipage avec 2 pages (nom: "Page1" et "Page2") et des textbox. L'utilisateur doit entrer des valeurs dans les textbox puis cliquer sur "valider" pour afficher ces valeurs dans le tableau sur la feuille Excel. Après plusieurs essais et visionnage de tuto sur les multipage, je bloque toujours sur le référencement des pages du multipage.
    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
    Private Sub CommandButton1_Click()
        Dim nb_textbox_name As Integer, nb_textbox_categorie As Integer
        Dim ctrl As msforms.Control
     
        nb_textbox_name = 0
        nb_textbox_categorie = 0
        'Calcul du nombre de textbox NOM et CATEGORIE
        For Each ctrl In UserForm_generer1.MultiPage1.Pages(UserForm_generer1.MultiPage1.Value).Controls
            If TypeOf ctrl Is msforms.TextBox Then
                nb_textbox_name = nb_textbox_name + 1
            End If
        Next
        
        For Each ctrl In UserForm_generer1.MultiPage1.Pages(1).Controls
            If TypeOf ctrl Is msforms.TextBox Then
                nb_textbox_categorie = nb_textbox_categorie + 1
            End If
        Next
        
        For i = 1 To nb_textbox_name + 1
                With Sheets("Repart").Cells(i, j).Borders
                .LineStyle = x1dashdotdot
                .Weight = 2
                End With
                Sheets("Repart").Cells(i, 1).Value = UserForm_generer1.MultiPage1.Pages(UserForm_generer1.MultiPage1.Value).Controls
        Next
        
    'MsgBox nb_textbox_nom
    'MsgBox nb_textbox_categorie
        Unload Me
    End Sub
    Le problème se situe à la ligne surlignée, je ne fais pas référence aux textbox de la page 1 du multipage (si j'ai bien compris...). J'ai essayé avec le numéro d'index qui est de 0, ca ne donne rien non plus.

    Si vous pouviez m'indiquer la marche à suivre, ce serait vraiment top^^

    Petite question bonus pour moi:
    sur cette ligne de code, je fais référence à la première page de mon multipage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each ctrl In UserForm_generer1.MultiPage1.Pages(UserForm_generer1.MultiPage1.Value).Controls
    Seulement si je remplace (UserForm_generer1.MultiPage1.Value) par la valeur de l'index de la page 1, donc (0), ca ne fonctionne pas alors que ca n'a pas posé de problème pour la 2eme page:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each ctrl In UserForm_generer1.MultiPage1.Pages(1).Controls
    Vous savez pourquoi ?

    Merci pour votre aide

  2. #2
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour Orgvba, bonjour le forum,

    Peut-être ce bout de code pourrait t'aider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim CTRL As Control
    Dim I As Byte
     
    For I = 0 To Me.MultiPage1.Pages.Count - 1
        For Each CTRL In Me.MultiPage1.Pages(I).Controls
            Debug.Print CTRL.Name
        Next CTRL
    Next I

  3. #3
    Membre émérite Avatar de Alex020181
    Homme Profil pro
    Prestataire informatique développeur d'application Excel, Access, VBA
    Inscrit en
    Juin 2012
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Prestataire informatique développeur d'application Excel, Access, VBA

    Informations forums :
    Inscription : Juin 2012
    Messages : 601
    Par défaut
    Bonjour,

    En PJ un fichier avec du code plus simple pour reporter les valeurs des textbox multipage sur une feuille.

    Il suffit de faire appel à leur nom. Pas besoin de boucler sur toutes les pages.

    Cela vous convient ?

    A vous d'adapter.
    Fichiers attachés Fichiers attachés

  4. #4
    Membre averti
    Homme Profil pro
    en Formation
    Inscrit en
    Mars 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : en Formation

    Informations forums :
    Inscription : Mars 2020
    Messages : 10
    Par défaut
    Citation Envoyé par Alex020181 Voir le message
    Bonjour,

    En PJ un fichier avec du code plus simple pour reporter les valeurs des textbox multipage sur une feuille.

    Il suffit de faire appel à leur nom. Pas besoin de boucler sur toutes les pages.

    Cela vous convient ?

    A vous d'adapter.
    Bonjour Alex020181,

    Merci beaucoup, j'avoue m'être compliqué la vie alors que j'aurai pu faire simple comme tu l'as montré^^ J'en suis qu'au début de mon apprentissage de VBA, donc du moment que ca marche, ca me convient pour le moment!
    Une question me vient à l'esprit: ton code fonctionne très bien pour les textbox qui sont crée directement sur l'userform. Sur mon userform, j'ai 3 textbox fixes. Par contre l'utilisateur a le choix d'en créer d'autres (qui vont porter le nom "TextBox_nom4/5/6/..."). En utilisant le code suivant, le contenu des 3 premieres textbox (donc celles qui sont fixes) apparait, mais pas le reste:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sheets("Repart").Range("A1").Value = TextBox_nom1
    Sheets("Repart").Range("A2").Value = TextBox_nom2
    Sheets("Repart").Range("A3").Value = TextBox_nom3
    Sheets("Repart").Range("A4").Value = MultiPage1(TextBox_nom4)
    Sheets("Repart").Range("A5").Value = MultiPage1(TextBox_nom5)
    Sheets("Repart").Range("A6").Value = TextBox_nom6

  5. #5
    Membre émérite Avatar de Alex020181
    Homme Profil pro
    Prestataire informatique développeur d'application Excel, Access, VBA
    Inscrit en
    Juin 2012
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Prestataire informatique développeur d'application Excel, Access, VBA

    Informations forums :
    Inscription : Juin 2012
    Messages : 601
    Par défaut
    Bonjour,

    Par contre l'utilisateur a le choix d'en créer d'autres
    Ça vous ne l'aviez pas dit. Effectivement mon code précédent n'est pas adapté du coup.

    Il faut que le code "scanne" le multipage et ressorte les données de toutes les textbox.

    Je vous ai mis à jour le code en PJ. Vous aurez en A les noms et en B les valeurs.
    Fichiers attachés Fichiers attachés

  6. #6
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour le fil, bonjour le forum,

    Debug.Print nécessite que la fenêtre d'Exécution soit ouverte dans l'éditeur VBE (menu Affichage/Fenêtre d'Exécution ou clique sur [CTRL]+[G] pour le faire...). Ça permet d'afficher directement les renseignements dans cette fenêtre sans passer par un message.
    Sinon, remplace :

    par :

  7. #7
    Membre averti
    Homme Profil pro
    en Formation
    Inscrit en
    Mars 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : en Formation

    Informations forums :
    Inscription : Mars 2020
    Messages : 10
    Par défaut Retour
    Citation Envoyé par Alex020181 Voir le message
    Bonjour,



    Ça vous ne l'aviez pas dit. Effectivement mon code précédent n'est pas adapté du coup.

    Il faut que le code "scanne" le multipage et ressorte les données de toutes les textbox.

    Je vous ai mis à jour le code en PJ. Vous aurez en A les noms et en B les valeurs.

    Bonjour Alex,

    Merci pour votre retour rapide et très informatif! je me suis permis de légèrement modifier votre code pour y ajouter une textbox automatiquement lors du clique sur un label. Vous le trouverez dans le fichier en attaché (si vous voulez bien l'ouvrir). Autrement voici ce que ca donne:

    Nom : Capture_multipag1.PNG
Affichages : 244
Taille : 9,0 Ko

    En cliquant sur "ajouter une textbox":

    Nom : Capture_multipag2.PNG
Affichages : 275
Taille : 7,9 Ko

    Et un des codes que j'ai testé:
    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
    Private Sub CommandButton1_Click()
     
    Dim control_cours As Control
    Dim index_txtbox As Long
    Dim ligne_ecrire As Long
     
    For index_txtbox = 0 To Me.MultiPage1.Pages.Count - 1
     
        For Each control_cours In Me.MultiPage1.Pages(index_txtbox).Controls
     
            If TypeOf control_cours Is msforms.TextBox Then
     
                ligne_ecrire = ligne_ecrire + 1
     
                Sheets("repart").Range("A" & ligne_ecrire) = UserForm1.MultiPage1.Pages(0).control_cours
                Sheets("repart").Cells(1, ligne_ecrire) = UserForm1.MultiPage1.Pages(1).control_cours
     
            End If
     
        Next control_cours
     
    Next index_txtbox
     
    End Sub
     
    Private Sub Label1_Click()
       UserForm1.TextBox_nom3.Visible = True
    End Sub
    J'ai modifié le nom des textbox de la page 1 en "TextBox_nom1/2/3" et ceux de la page 2 en "Textbox_Categorie1/2". Est-il possible d'afficher sur la colonne A uniquement les valeurs des textbox de la page 1, et sur la ligne A les valeurs des textbox de la page 2. Le résultat ressemblerait donc à ca:

    Nom : Capture_multipage3.PNG
Affichages : 290
Taille : 18,4 Ko
    Nom : Capture_multipag4.PNG
Affichages : 289
Taille : 15,5 Ko

    Encore merci pour votre patience et votre aide, j'ai conscience que les réponses à mes questions peuvent paraitre évidentes, et pourtant j'arrive a bloquer ^^'

    report multipage 2 (3).xlsm

  8. #8
    Membre averti
    Homme Profil pro
    en Formation
    Inscrit en
    Mars 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : en Formation

    Informations forums :
    Inscription : Mars 2020
    Messages : 10
    Par défaut
    Citation Envoyé par Thautheme Voir le message
    Bonjour Orgvba, bonjour le forum,

    Peut-être ce bout de code pourrait t'aider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim CTRL As Control
    Dim I As Byte
     
    For I = 0 To Me.MultiPage1.Pages.Count - 1
        For Each CTRL In Me.MultiPage1.Pages(I).Controls
            Debug.Print CTRL.Name
        Next CTRL
    Next I
    Bonjour Thautheme,

    Merci bien pour ta réponse, j'ai pas encore totalement compris comment utiliser debug.print mais ca a l'air très utile, je manquerai pas de me renseigner sur cette fonctionnalité

  9. #9
    Membre émérite Avatar de Alex020181
    Homme Profil pro
    Prestataire informatique développeur d'application Excel, Access, VBA
    Inscrit en
    Juin 2012
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Prestataire informatique développeur d'application Excel, Access, VBA

    Informations forums :
    Inscription : Juin 2012
    Messages : 601
    Par défaut
    Bonjour,

    Alors d'après le code que vous avez écrit l'utilisateur ne peut pas créer des textbox comme vous le disiez précédemment. Il ne peut que rendre visible une textbox que vous vous avez déjà créé. Vous connaissez donc déjà son nom et savez également où sa valeur est à reporter. Du coup retour au code précédent en le complétant et en adaptant les références de cellule cible.

    PS; j'ai forcé la valeur A1 en "Nom" comme ça l'utilisateur n'a même pas à saisir "Nom" dans vos textbox.

    Voir PJ.

    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
     
    Private Sub CommandButton1_Click()
     
    'effacer les données précédentes
    Sheets("repart").Range("A1:C4").ClearContents
     
    'titrer la colonne A
    Sheets("repart").Range("A1") = "Nom"
     
    'insérer les valeurs des textbox
    Sheets("repart").Range("A2") = TextBox_nom1
    Sheets("repart").Range("A3") = TextBox_nom2
    Sheets("repart").Range("A4") = TextBox_nom3
     
    Sheets("repart").Range("B1") = TextBox_categorie1
    Sheets("repart").Range("C1") = TextBox_categorie2
     
    End Sub
    Fichiers attachés Fichiers attachés

  10. #10
    Membre averti
    Homme Profil pro
    en Formation
    Inscrit en
    Mars 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : en Formation

    Informations forums :
    Inscription : Mars 2020
    Messages : 10
    Par défaut
    Encore une fois, un grand merci pour votre aide, tout est plus clair maintenant je peux avancer sur mon projet maintenant En effet j'ai opté pour la solution de simplement rendre visible une textbox déjà existante, plutôt que d'en créer par VBA. Cette dernière option m'intéresse beaucoup, mais elle a l'air plus complexe donc je m'y pencherai plus tard après avoir déjà bien acquis les bases.

    Très bonne soirée à vous

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

Discussions similaires

  1. Référencement...
    Par mohican13 dans le forum Référencement
    Réponses: 4
    Dernier message: 06/01/2005, 17h31
  2. [TList] Double référencement
    Par Pedro dans le forum Langage
    Réponses: 5
    Dernier message: 28/07/2004, 13h14

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