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 :

Compter le nb de TextBox spécifiques d'un USF en VBA [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2013
    Messages : 111
    Par défaut Compter le nb de TextBox spécifiques d'un USF en VBA
    Bonjour,

    J'ai dans un Userform plusieurs TextBox nommés suivant une logique comme celle-ci :
    TextBox1_i
    TextBox2_i
    TextBox3_i
    etc.
    Je souhaiterais par exemple compter le nombre de TextBox1_i indépendamment des autres.

    J'utilise la fonction mais il me renvoie sans surprise le nombre d'objets de mon UserForm.

    Est-il possible de différencier les types de TextBox dans ce type de recherche ?

    Par ailleurs, l'objectif sera in fine de connaître l'identité de l'ensemble de mes TextBox pour ensuite pouvoir y traiter les données.

    L'idée sera par exemple de faire la somme des valeurs reprises dans mes "TextBox1_i".

    Merci d'avance pour votre aide qui me sera précieuse.

    Bàv

  2. #2
    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,
    Pour connaître le nombre de TextBox contenu dans un UserForm, il suffit de parcourir à l'aide d'une boucle l'ensemble des contrôles et la fonction TypeName permet de savoir le type de contrôle et ainsi les énumérer.
    Si tous les TextBox sont préfixés d'une façon explicite, il y a la possibilité de boucler uniquement sur ces contrôles

    A lire le chapitre I-B. Boucler sur les contrôles contenus dans la Forme du tutoriel Utiliser les contrôles dans un UserForm, en VBA Excel
    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

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2013
    Messages : 111
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    Pour connaître le nombre de TextBox contenu dans un UserForm, il suffit de parcourir à l'aide d'une boucle l'ensemble des contrôles et la fonction TypeName permet de savoir le type de contrôle et ainsi les énumérer.
    Si tous les TextBox sont préfixés d'une façon explicite, il y a la possibilité de boucler uniquement sur ces contrôles

    A lire le chapitre I-B. Boucler sur les contrôles contenus dans la Forme du tutoriel Utiliser les contrôles dans un UserForm, en VBA Excel
    Bonsoir Philippe,

    Merci pour ce lien, je l'avais trouvé mais je ne parviens pas à caler la logique dans mon code.
    Pour exemple, voici ce que j'ai mis, qui ne me renvoie pas les noms des TexBox :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub CommandButton1_Click()
    Dim Ctrl As Control
     
    For Each Ctrl In controls
            If TypeName(Ctrl) = "TextBox1_" & i Then MsgBox Ctrl.Object.Name
    Next Ctrl
     
    End Sub
    Merci pour ton aide.

  4. #4
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 576
    Par défaut
    Bonjour,
    Si tu ajoutes des contrôles dynamiquement je peux comprendre si non tu es capable de connaître le nombre sans avoir recours à VBA !

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2013
    Messages : 111
    Par défaut
    Citation Envoyé par Thumb down Voir le message
    Bonjour,
    Si tu ajoutes des contrôles dynamiquement je peux comprendre si non tu es capable de connaître le nombre sans avoir recours à VBA !
    Bsr,

    Oui mes controls sont ajoutés dynamiquement.
    Ci-après, voici comment je les ajoute.
    Le problème est que je ne parviens pas à retrouver leur nom, et donc par la suite, je ne pourrai pas les cibler pour y rechercher leur valeur...


    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    Public Sub AjoutT_Click()
     
    Dim TxBox1 As Control
    Dim TxBox2 As Control
    Dim TxBox3 As Control
     
    Dim Ctrl As Control
     
    Dim i As Byte
     
    i = Me.controls.Count - 7
     
    Set TxBox1 = UserForm1.controls.Add("Forms.Textbox.1", "T" & i, True)
        With TxBox1
            .Name = "TextBox1_" & i
            .Top = (7 * i) + 29
            .Left = 370
            .Width = 30
        End With
     
    'MsgBox "textbox1_" & i
     
    Set TxBox2 = UserForm1.controls.Add("Forms.Textbox.1", "R" & i, True)
        With TxBox2
            .Name = "TextBox2_" & i
            .Top = (7 * i) + 29
            .Left = 404
            .Width = 55
        End With
     
    'MsgBox "textbox2_" & i
     
    Set TxBox3 = UserForm1.controls.Add("Forms.Textbox.1", "P" & i, True)
        With TxBox3
            .Name = "TextBox3_" & i
            .Top = (7 * i) + 29
            .Left = 463
            .Width = 45
            If TxBox3.Top > 305 Then
                UserForm1.Height = TxBox3.Top + TxBox3.Height + 65
            End If
        End With
     
    'MsgBox "textbox3_" & i
     
    UserForm1.FondText.Top = TxBox1.Top + 25
    UserForm1.FondR.Top = TxBox1.Top + 25
    UserForm1.FondP.Top = TxBox1.Top + 25
     
     
    End Sub

  6. #6
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 576
    Par défaut
    voila maintenant tu as un tableau de control et son nombre!
    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
    Dim TxBox1() As Control, TxBox1Nb As Integer
    Dim TxBox2() As Control, TxBox2Nb As Integer
    Dim TxBox3() As Control, TxBox3Nb As Integer
     
    Public Sub AjoutT_Click()
     Dim Ctrl As Control
    Dim i As Byte
     
    i = Me.Controls.Count - 7
    ReDim Preserve TxBox1(TxBox1Nb)
    Set TxBox1(TxBox1Nb) = UserForm1.Controls.Add("Forms.Textbox.1", "T" & i, True)
        With TxBox1(TxBox1Nb)
            .Name = "TextBox1_" & i
            .Top = (7 * i) + 29
            .Left = 370
            .Width = 30
        End With
     
    '
    UserForm1.FondText.Top = TxBox1(TxBox1Nb).Top + 25
    UserForm1.FondR.Top = TxBox1(TxBox1Nb).Top + 25
    UserForm1.FondP.Top = TxBox1(TxBox1Nb).Top + 25
    TxBox1Nb = TxBox1Nb + 1
    End Sub
    Tu as deux options TxBox1Nb ou ubound(TxBox1) pour connaitre le nombre de contrôles !

    Tu pourras même faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for each TxtB in TxBox1
    Next

  7. #7
    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,
    Pour exemple, voici ce que j'ai mis, qui ne me renvoie pas les noms des TexBox
    TypeName est une fonction VBA qui renvoie le type d'une variable et pas son nom donc il faut écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If TypeName(Ctrl) = "TextBox" Then MsgBox Ctrl.Object.Value
    Voici un exemple simple qui j'espère vous éclairera sur ce que renvoie TypeName
    Ce code affiche dans la fenêtre d'exécution (Ctrl+G), le nom et le (TypeName) de tous les contrôles du UserForm nommé mUsf_ImprovedDataValidation

    Code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub ReadControl()
      Dim ctrl As Control
      For Each ctrl In mUsf_ImprovedDataValidation.Controls
         Debug.Print ctrl.Name & " (" & TypeName(ctrl) & ")"
      Next
    End Sub
    Résultat dans la fenêtre d'exécution
    cmdOK (CommandButton)
    cmdCancel (CommandButton)
    lstSelection (ListBox)
    chkDeleteRow (CheckBox)
    lblSelectedRowEmpty (Label)
    frmLookUpArea (Frame)
    cboFindLabel (ComboBox)
    txtFindValue (TextBox)
    Label1 (Label)
    TextBox1 (TextBox)
    Label2 (Label)
    TextBox2 (TextBox)

    Illustration du UserForm
    Nom : 211216 dvp UserForm - Control.png
Affichages : 1051
Taille : 11,3 Ko
    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

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2013
    Messages : 111
    Par défaut
    Bonsoir,

    Merci à tous les deux pour votre aide, j'ai fait un mixte et cela semble bien fonctionner.
    A présent, j'éprouve encore des difficultés pour exploiter mes objets.
    Je connais à présent le nom de mes textbox mais comment y faire référence ?

    Ici, j'ajoute des TextBox1, TextBox2 et TextBox3 :

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Dim TxBox1() As Control, TxBox1Nb As Integer
    Dim TxBox2() As Control, TxBox2Nb As Integer
    Dim TxBox3() As Control, TxBox3Nb As Integer
     
    Public Sub AjoutT_Click()
     
    Dim ctrl As Control
    Dim i As Byte
    Dim j As Byte
     
    ReDim Preserve TxBox1(TxBox1Nb)
    i = TxBox1Nb
    Set TxBox1(TxBox1Nb) = UserForm1.Controls.Add("Forms.Textbox.1", "T" & i, True)
        With TxBox1(TxBox1Nb)
            .Name = "TextBox1_" & i
            .Top = (7 * i) + 29
            .Left = 370
            .Width = 30
        End With
     
    ReDim Preserve TxBox2(TxBox2Nb)
    Set TxBox2(TxBox2Nb) = UserForm1.Controls.Add("Forms.Textbox.1", "P" & i, True)
        With TxBox2(TxBox2Nb)
            .Name = "TextBox2_" & i
            .Top = (7 * i) + 29
            .Left = 404
            .Width = 55
        End With
     
    ReDim Preserve TxBox3(TxBox3Nb)
    Set TxBox3(TxBox3Nb) = UserForm1.Controls.Add("Forms.Textbox.1", "R" & i, True)
        With TxBox3(TxBox3Nb)
            .Name = "TextBox3_" & i
            .Top = (7 * i) + 29
            .Left = 463
            .Width = 45
            'If TxBox3.Top > 305 Then
            '    UserForm1.Height = TxBox3.Top + TxBox3.Height + 65
            'End If
        End With
     
    UserForm1.FondText.Top = TxBox1(TxBox1Nb).Top + 25
    UserForm1.FondR.Top = TxBox1(TxBox1Nb).Top + 25
    UserForm1.FondP.Top = TxBox1(TxBox1Nb).Top + 25
    TxBox1Nb = TxBox1Nb + 1
    TxBox2Nb = TxBox2Nb + 1
    TxBox3Nb = TxBox3Nb + 1
     
    End Sub
    Ensuite, et c'est ici que je cale :

    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
    Sub CommandButton2_Click()
     
    Dim ctrl As Control
    Dim i As Long
     
    For Each ctrl In UserForm1.Controls
       Debug.Print ctrl.Name & " (" & TypeName(ctrl) & ")"
    Next
     
    i = 1
     
    'ci-après j'aimerais récupérer le contenu de mon TextBox :
    If TypeName(ctrl) = "TextBox1_" & i Then MsgBox ctrl.Object.Value
     
    'ou alors pousser une valeur dans mon TextBox :
    If TypeName(ctrl) = "TextBox2_" & i Then ctrl.Object.Value = "123"
     
    End Sub
    Merci encore pour votre aide précieuse et belle soirée

  9. #9
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 576
    Par défaut
    bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub CommandButton2_Click() 
    Dim ctrl As Control 
    For Each ctrl In TxBox1
       Debug.Print ctrl
    Next
    End Sub

  10. #10
    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,
    Avez-vous bien regardé le code que j'ai publié ainsi que la liste renvoyée dans le chapitre "Résultat dans la fenêtre d'exécution" et surtout ce que renvoie TypeName, ce qui se trouve entre parenthèse ?

    Qu'un TextBox se nomme TextBox1, TextBox2, txtName ou encore Toto, la fonction TypeName renverra toujours TextBox

    [EDIT]

    Au lieu de TypeName, vous pouvez utiliser également la fonction TypeOf

    Voici l'exemple d'une procédure affichant le nom des contrôles TextBox du Userform nommé mUsf_ImprovedDataValidation (Le même que celui du fil #7)

    Code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub ReadControl()
      Dim ctrl As Control
      For Each ctrl In mUsf_ImprovedDataValidation.Controls
         If TypeOf ctrl Is MSForms.TextBox Then
            Debug.Print ctrl.Name
         End If
      Next
    End Sub
    Résultat dans la fenêtre d'exécution
    txtFindValue
    TextBox1
    TextBox2
    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

  11. #11
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 576
    Par défaut
    bonjour,
    dans la mesure ou tu as défini des tableaux de contrôles tu n'as plus à rechercher leurs type ni leur nom!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub CommandButton2_Click()
    Dim i As Long
    For i = 0 To UBound(TxBox1)
       Debug.Print TxBox1(i).Name & " =  " & TxBox1(i).text, TxBox2(i).Name & " = " & TxBox2(i).text, TxBox3(i).Name & " =  " & TxBox3(i).text
    Next
     
    End Sub

  12. #12
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2013
    Messages : 111
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Merci Philippe,

    J'avais bien lu et suivi tes conseils mais je pense que je m'étais mal exprimé.
    J'ai bien réussi à retrouver le nom de mes objets mais l'idée n'était pas de les avoir tous mais bien ceux de certains types pour pouvoir in fine les gérer indépendamment les uns des autres, ou pouvoir les classer.
    En l'occurrence, ce que je voulais, c'était de pouvoir ne sélectionner que les TexBox dont la structure du nom était par exemple "TxBox1_" & i.

    Avec ta méthode, sauf erreur, il me sortait les noms de tous.

    Voir ma réponse à Thumb down ci-après ;-)

    Encore un grand merci pour ton aide !

    Citation Envoyé par Thumb down Voir le message
    Merci Thumb numb pour le coup de pouce, c'est ce qu'il me fallait.

    A présent, je vais devoir essayer de maîtriser un peu mieux ces tableaux car un peu plus abstraits actuellement.

    Pour que l'objet de ma demande soit un peu plus concret, l'idée est à présent de remplir certaines de mes textbox (par exemple les TxBox1) avec les données issues d'un range.
    Je vais donc devoir créer mes TexBox de manière dynamique par rapport au nombre de mes cellules contenues dans mon range.

    Je vais m'y atteler et au besoin j'ouvrirai un autre sujet.

    Merci à tous les 2 ;-)

  13. #13
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 576
    Par défaut
    Bonjour,
    à adapter à ta sauce!
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    Dim TxBox1() As Control, TxBox2() As Control, TxBox3() As Control, Nb As Integer
     
    Public Sub AjoutT(r As Range)
    ReDim Preserve TxBox1(Nb)
    Set TxBox1(Nb) = Me.Controls.Add("Forms.Textbox.1", r(1).Address, True)
        With TxBox1(Nb)
           ' .Name = "TextBox1_" & i
            .Text = r(1).Value
            .Top = (.Height * Nb) + 29
            .Left = 370
            .Width = 30
        End With
     
    ReDim Preserve TxBox2(Nb)
    Set TxBox2(Nb) = Me.Controls.Add("Forms.Textbox.1", r(2).Address, True)
        With TxBox2(Nb)
       Debug.Print .Name
           .Text = r(2).Value
            .Top = (.Height * Nb) + 29
            .Left = 404
            .Width = 55
        End With
     
    ReDim Preserve TxBox3(Nb)
    Set TxBox3(Nb) = Me.Controls.Add("Forms.Textbox.1", r(3).Address, True)
        With TxBox3(Nb)
           ' .Name = "TextBox3_" & i
           .Text = r(3).Value
            .Top = (.Height * Nb) + 29
            .Left = 463
            .Width = 45
            'If TxBox3.Top > 305 Then
               Me.Height = .Top + .Height + 65
               Me.Width = .Left + .Width + 65
            'End If
        End With
     
    'me.FondText.Top = TxBox1(TxBox1Nb).Top + 25
    'me.FondR.Top = TxBox1(TxBox1Nb).Top + 25
    'me.FondP.Top = TxBox1(TxBox1Nb).Top + 25
    Nb = Nb + 1
     
    End Sub
     
     
    Private Sub CommandButton1_Click()
    Dim i As Integer
    For i = 0 To UBound(TxBox1)
        With Sheets("Data")
            .Range(TxBox1(i).Name) = TxBox1(i).Text
            .Range(TxBox2(i).Name) = TxBox2(i).Text
            .Range(TxBox3(i).Name) = TxBox3(i).Text
        End With
    Next
    End Sub
     
     
     
     
    Private Sub UserForm_Initialize()
    Dim r As Range
    Set r = Sheets("Data").Range("A1").CurrentRegion
    For i = 1 To r.Rows.Count
        AjoutT r.Range(r(i, 1), r(i, 3))
    Next
    End Sub
    Fichiers attachés Fichiers attachés

  14. #14
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2013
    Messages : 111
    Par défaut
    C'est exactement ça qu'il me faut, un grand merci une nouvelle fois ;-)

    Cette fois je peux marquer ce fil comme résolu.

    A+

  15. #15
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2013
    Messages : 111
    Par défaut
    Citation Envoyé par Thumb down Voir le message
    Bonjour,
    à adapter à ta sauce!
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    Dim TxBox1() As Control, TxBox2() As Control, TxBox3() As Control, Nb As Integer
     
    Public Sub AjoutT(r As Range)
    ReDim Preserve TxBox1(Nb)
    Set TxBox1(Nb) = Me.Controls.Add("Forms.Textbox.1", r(1).Address, True)
        With TxBox1(Nb)
           ' .Name = "TextBox1_" & i
            .Text = r(1).Value
            .Top = (.Height * Nb) + 29
            .Left = 370
            .Width = 30
        End With
     
    ReDim Preserve TxBox2(Nb)
    Set TxBox2(Nb) = Me.Controls.Add("Forms.Textbox.1", r(2).Address, True)
        With TxBox2(Nb)
       Debug.Print .Name
           .Text = r(2).Value
            .Top = (.Height * Nb) + 29
            .Left = 404
            .Width = 55
        End With
     
    ReDim Preserve TxBox3(Nb)
    Set TxBox3(Nb) = Me.Controls.Add("Forms.Textbox.1", r(3).Address, True)
        With TxBox3(Nb)
           ' .Name = "TextBox3_" & i
           .Text = r(3).Value
            .Top = (.Height * Nb) + 29
            .Left = 463
            .Width = 45
            'If TxBox3.Top > 305 Then
               Me.Height = .Top + .Height + 65
               Me.Width = .Left + .Width + 65
            'End If
        End With
     
    'me.FondText.Top = TxBox1(TxBox1Nb).Top + 25
    'me.FondR.Top = TxBox1(TxBox1Nb).Top + 25
    'me.FondP.Top = TxBox1(TxBox1Nb).Top + 25
    Nb = Nb + 1
     
    End Sub
     
     
    Private Sub CommandButton1_Click()
    Dim i As Integer
    For i = 0 To UBound(TxBox1)
        With Sheets("Data")
            .Range(TxBox1(i).Name) = TxBox1(i).Text
            .Range(TxBox2(i).Name) = TxBox2(i).Text
            .Range(TxBox3(i).Name) = TxBox3(i).Text
        End With
    Next
    End Sub
     
     
     
     
    Private Sub UserForm_Initialize()
    Dim r As Range
    Set r = Sheets("Data").Range("A1").CurrentRegion
    For i = 1 To r.Rows.Count
        AjoutT r.Range(r(i, 1), r(i, 3))
    Next
    End Sub
    Bonjour Thumb Down,

    Encore besoin de ton inspiration svp.
    Ton code marche à merveille mais j'ai du mal à le déchiffrer.
    En l'occurrence, dans mon cas, j'essaie de l'adapter pour pouvoir cible un Range ou tout au moins la première cellule.


    J'ai beau le retourner dans tous les sens, je n'obtiens pas ce que je souhaite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub UserForm_Initialize()
    Dim r As Range
    Dim i As Integer
     
    Set r = Sheets("Graph").Range("B3").CurrentRegion
    For i = 1 To r.Rows.Count
        AjoutTamis r.Range(r(i, 1), r(i, 3))
    Next
    End Sub
    Pour l'exemple, comment ferais-tu pour exploiter les données reprises dans un range dont la première cellule serait "B3" et non "A1" comme dans ton exemple.
    J'ai bien compris que la fonction CurrentRegion n'était dans ce cas pas appropriée mais même en fixant un range comme ("B3:B15"), cela ne tourne pas comme je l'entends.

    Merci pour ton retour ;-)

  16. #16
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 576
    Par défaut
    Bonjour,
    Currentregion prend toutes les cellules contiguës ?

    Ça veut dire que si tu as dès valeur en colonne A,B,C,D la plage sera de A à D donc range(i,1) correspond à la colonne A!

    Je te suggère !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AjoutTamis r.Range(r(i, "B"), r(i, "D"))
    Tu peux également définir un plage B1: D20 par exemple et là mon code fonctionne en l'état.

    Pour bien comprendre ce que fait currentregion positionnés toi en B3 et appuyés simultanément sur [CTRL] +[*]

  17. #17
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2013
    Messages : 111
    Par défaut
    le problème est qu'il compte le nombre de ligne sur la colonne A.
    Donc si je n'ai que 6 cellules remplies sur la colonne A, il enregistre 6 dans r.rows.count alors que si j'en ai 25 dans la colonne "V" par exemple, il ne le saura pas..

    ci-joint ton fichier avec un tableau en couleur que je souhaiterais exploiter, ce sera plus simple avec du concret me semble-t-il..

    Forms.Textbox.1.xlsm

    merci pour ton avis

  18. #18
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 576
    Par défaut
    voila,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub UserForm_Initialize()
    Dim r As Range
    Set r = Sheets("Data").UsedRange
    For i = 1 To r.Rows.Count
        AjoutT r.Range(r(i, "B"), r(i, "D"))
    Next
    End Sub

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

Discussions similaires

  1. [AC-2010] Compter l'apparition d'expressions spécifiques dans des enregistrements
    Par Nianiania3 dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 02/06/2017, 14h54
  2. [XL-2007] Compter les cellules d'une même couleur avec SUMPRODUCT en VBA
    Par apt dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/10/2012, 21h25
  3. Réponses: 7
    Dernier message: 26/02/2012, 21h12
  4. [XL-2007] ListBox vers TextBox d'un autre USF
    Par apdf1 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/10/2011, 18h31
  5. [C#] Compter le nombre de TEXTBOX sur une page ASPX
    Par alain_27 dans le forum ASP.NET
    Réponses: 9
    Dernier message: 27/05/2005, 14h19

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