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 :

Intégrer nom variable dans Userform et CheckBox Name [XL-2016]


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
    Chargé d'affaire
    Inscrit en
    Janvier 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Janvier 2016
    Messages : 34
    Par défaut Intégrer nom variable dans Userform et CheckBox Name
    Bonjour le forum!

    Je bute sur une problématique liée à l'utilisation de CheckBox dans un Userform.
    Je souhaite renommer les CheckBox en fonction du nom des feuilles de mon classeur. Mais je ne trouve pas de solution...

    Voici mon code pour l'instant. Je sais déjà récupérer le nom des différentes feuilles mais la propriété .Name appliquée à Controls n'est pas correcte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub UserForm_Initialize()
     
    Dim sh As String
    Dim n As Integer
     
        n = n + 1
     
        For n = 1 To Sheets.Count
            sh = Sheets(n).Name
            Controls("CheckBox" & n).Name = sh
        Next n
     
    End Sub
    Merci d'avance pour vos commentaires,

    Bonne journée à tous!

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Esculape Voir le message
    Bonjour,

    Ce n'est pas plutôt la propriété Caption que vous essayez de charger ?

    Un exemple possible :

    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()
     
    Dim I As Integer
     
        For I = 1 To Worksheets.Count
     
            If Mid(Me.Controls(I - 1).Name, 1, 8) = "CheckBox" Then
               Me.Controls(I - 1).Caption = Worksheets(I).Name
               MsgBox "Nom : " & Me.Controls(I - 1).Name & Chr(10) & "Libellé " & Me.Controls(I - 1).Caption
           End If
        Next I
     
    End Sub
    Cordialement.

  3. #3
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Janvier 2016
    Messages : 34
    Par défaut
    Alors le code fonctionne à merveille, mais je n'arrive pas à récupérer le nom de toutes les feuilles. Seulement 5 d'entre elles sont prises en compte.

    J'aimerais pouvoir étendre cette possibilité d'ajout à 20 feuilles.

    Si j'ai bien compris,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For I = 1 To Worksheets.Count
    part du dernier élément compté pour revenir à un et c'est pour cela que l'on retrouve I-1 dans ?
    J'ai bien compris aussi l'intérêt de la fonction Mid qui permet d'isoler le n° de CheckBox, mais comment est lié la propriété Caption aux Checkbox?

    La finalité de la manœuvre serait de pouvoir récupérer en variable le nom des feuilles sélectionnées à l'aide des Checkbox pour les utiliser dans la suite de la procédure (en lançant un traitement avec un command_button).
    Est-ce que je me dirige vers la bonne solution?

    D'avance merci.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Esculape Voir le message
    Alors le code fonctionne à merveille, mais je n'arrive pas à récupérer le nom de toutes les feuilles. Seulement 5 d'entre elles sont prises en compte.
    J'aimerais pouvoir étendre cette possibilité d'ajout à 20 feuilles.
    Autant pour moi. Essayez ce 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
     
    Private Sub UserForm_Initialize()
     
    Dim I As Integer
    Dim NumeroControle As Integer
     
        NumeroControle = 0
        For I = 1 To Worksheets.Count
            If Mid(Me.Controls(NumeroControle).Name, 1, 8) = "CheckBox" Then
               Me.Controls(NumeroControle).Caption = Worksheets(I).Name
             '  MsgBox "Nom : " & Me.Controls(NumeroControle).Name & Chr(10) _
             '       & "Libellé " & Me.Controls(NumeroControle).Caption & Chr(10) _
             '       & "Numéro de contrôle : " & NumeroControle
               NumeroControle = NumeroControle + 1
           End If
        Next I
     
    End Sub

    et c'est pour cela que l'on retrouve I-1 dans Me.Controls(I - 1)?
    J'ai bien compris aussi l'intérêt de la fonction Mid qui permet d'isoler le n° de CheckBox, mais comment est lié la propriété Caption aux Checkbox?
    Non, la numérotation des contrôles part de l'indice 0 et Caption est le libellé associé à l'objet CheckBox.

    La finalité de la manœuvre serait de pouvoir récupérer en variable le nom des feuilles sélectionnées à l'aide des Checkbox pour les utiliser dans la suite de la procédure (en lançant un traitement avec un command_button).
    Est-ce que je me dirige vers la bonne solution?
    Pourquoi ne pas charger directement la liste des onglets dans une ListBox ? Ce serait beaucoup plus lisible et plus simple à manier.
    Par exemple, en créant un contrôle ListBox nommé ListBoxOnglets dans votre Userform, testez ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Private Sub UserForm_Initialize()
     
    Dim I As Integer
     
        For I = 1 To Worksheets.Count
            With Me.ListBoxOnglets
                 .AddItem Worksheets(I).Name
            End With
        Next I
     
    End Sub


    Cordialement.

  5. #5
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Janvier 2016
    Messages : 34
    Par défaut
    Merci pour votre réponse!

    Effectivement vous avez raison: j'étais parti sur l'idée d'une combobox à la base, puis checkbox pour plus de simplicité.
    Mais une listbox fonctionne parfaitement!

    La simplicité toujours .

    Pour pousser la chose un peu plus loin, je souhaite retirer ou du moins ne sélectionner que certaines feuilles.

    Je manie de manière un peu hasardeuse un .RemoveItem, mais cela ne me semble pas logique d'intégrer des éléments pour ensuite les supprimer.

    J'ai trouvé quelque chose dans ce style, cela dit la gestion de l'indexation des feuilles ne fonctionne pas comme je le pensais. Même en rappelant le nom de la feuille.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim I As Integer
     
        For I = 1 To Worksheets.Count
            With Me.ListBoxOnglets
                 .AddItem Worksheets(I).Name
            End With
        Next I
     
            With Me.ListBoxOnglets
                .RemoveItem (Sheets("Liste des centres").Index)
                .RemoveItem (Sheets("CA").Index)
            End With
    Avez-vous une piste pour simplifier le tout?

    D'avance merci.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Esculape Voir le message
    Pour pousser la chose un peu plus loin, je souhaite retirer ou du moins ne sélectionner que certaines feuilles.
    Essayez ce 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
     
    Private Sub UserForm_Initialize()
     
    Dim I As Integer
     
        For I = 1 To Worksheets.Count
            Select Case Worksheets(I).Name
                   Case "Liste des centres", "CA"
     
                   Case Else
                        With Me.ListBoxOnglets
                             .AddItem Worksheets(I).Name
                        End With
            End Select
        Next I
     
    End Sub

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

Discussions similaires

  1. [XL-2003] Intégrer des variables dans un nom d'objet
    Par Alahsan dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 02/09/2011, 19h55
  2. Recuperé une variable dans userform
    Par backdraf dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/11/2009, 11h08
  3. Réponses: 2
    Dernier message: 26/03/2008, 14h59
  4. Intégrer une variable dans une définition
    Par Death83 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/03/2006, 14h59
  5. [VBA-E] Intégrer une variable dans la source d'un graphe
    Par girardeau dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 07/11/2005, 11h12

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