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 :

Validation de TextBox dans un UserForm


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Points : 1 124
    Points
    1 124
    Par défaut Validation de TextBox dans un UserForm
    Bonjour,
    J'ai intégré dans une macro un Userform, renommé Milestone_Edit, qui contient 2 lignes de 8 Textbox , un bouton "Edit", un bouton "Next" et un bouton "Close".
    Dans la ligne supérieure je vais rechercher les valeurs de données situées sur une feuille Excel, certaines TextBox ne contiennent pas de valeurs et ce ne sont pas toujours les mêmes.
    J'interdit la saisie dans les TextBox du Haut.
    Si une texte Box de la ligne supérieure est vide j'interdit la saisie de donnée la TextBox correspondante de la ligne du bas et lui affecte une couleur grise.

    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
    For i = 0 To 16
                If Equipment_Edit.ComboBox1.Value = BL.Offset(i, 0) Then
                Milestone_Edit.Label13.Caption = Equipment_Edit.ComboBox1.Value
     
                Milestone_Edit.TextBox9.Value = ""
                Milestone_Edit.TextBox9.Value = BL.Offset(i, 3)
                Milestone_Edit.TextBox9.Enabled = False
                    If Milestone_Edit.TextBox9.Value = "" Then
                    Milestone_Edit.TextBox1.Enabled = False
                    Milestone_Edit.TextBox9.BackColor = &H80000016
                    Milestone_Edit.TextBox1.BackColor = &H80000016
                    Else
                    Milestone_Edit.TextBox1.Enabled = True
                    Milestone_Edit.TextBox9.BackColor = &H80000005
                    Milestone_Edit.TextBox1.BackColor = &H80000005
                    End If
               .....
     
                Milestone_Edit.TextBox16.Value = ""
                Milestone_Edit.TextBox16.Value = BL.Offset(i, 10)
                Milestone_Edit.TextBox16.Enabled = False
                    If Milestone_Edit.TextBox16.Value = "" Then
                    Milestone_Edit.TextBox8.Enabled = False
                    Milestone_Edit.TextBox8.BackColor = &H80000016
                    Milestone_Edit.TextBox16.BackColor = &H80000016
                    Else
                    Milestone_Edit.TextBox8.Enabled = True
                    Milestone_Edit.TextBox16.BackColor = &H80000005
                    Milestone_Edit.TextBox8.BackColor = &H80000005
                    End If
     
               End If
            Next i
    Après avoir corrigé le code dont le grisage ne fonctionnait pas comme souhaité ( Philippe Tulliez ), j'ai essayé de le simplifier, par curiosité et pour m'améliorer, en utilisant le code suivant mais cela ne fonctionne pas et me renvoie une erreur "Propriété ou Méthode non gérée par cet objet"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim y As OLEObject
               For Each y In Milestone_Edit
                   If y.Value = "" Then
                   y.Object.BackColor = vbGray
                  End If
               Next y
    Merci pour votre aide et vos conseils
    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  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
    12 755
    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 : 12 755
    Points : 28 606
    Points
    28 606
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Avant tout évite d'utiliser le nom du UserForm dans ton code, privilégie le mot clé ME qui représente le UserForm dans son module.
    A lire Utiliser les contrôles dans un UserForm, en VBA Excel et tout particulièrement le chapitre I-B. Boucler sur les contrôles contenus dans la Forme
    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 émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour Éric, Philippe, bonjour le forum,

    Peut-être comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim CTRL As Control 'déclare la variable CTRL (ConTRôLe)
     
    For Each CTRL In Me.Controls 'boucle sur tous les contrôles CTRL de l'UserForm
        If TypeOf CTRL Is MSForms.TextBox Then 'condition : si le contrôle est une TextBox
            If CTRL.Value = "" Then CTRL.BackColor = vbGray 'si le controle est vide, modifie la couleur du contrôle
        End If 'fin de la condition
    Next CTRL 'prochain contrôle de la boucle
    À plus,

    Thauthème

    Je suis Charlie

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 755
    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 : 12 755
    Points : 28 606
    Points
    28 606
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Attention que la constante vbGray n'existe pas (il y a sept constantes de couleur vbBlack, vbBlue, vbCyan, vbMagenta, vbRed, vbWhite, vbYellow)
    Le code avec une constante cGray et le test de la valeur du TextBox pour modifier la propriété Enabled
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     Const cGray = &H80000016 ' Constante couleur grise
     Dim CTRL As Control
     For Each CTRL In Me.Controls ' Boucle sur l'ensemble des contrôles du UserForm
      If TypeOf CTRL Is MSForms.TextBox Then ' Modif de propriétés si TextBox
       With CTRL
       .Enabled = .Value <> vbNullString ' Faux si Vide/Vrai si rempli
       .BackColor = IIf(.Enabled, vbWhite, cGray) ' Couleur suivant valeur de propriété Enabled
       End With
      End If
     Next
    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

  5. #5
    Membre éprouvé
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Points : 1 124
    Points
    1 124
    Par défaut
    Bonjour,
    Voici le code que j'ai rédigé.
    J'ai un premier code pour lancer le second , les deux codes se trouvent dans deux UserForm

    Premier code lancé sur le Clic d'un bouton d'une fenêtre qui apparaît sous condition d'une autre macro placée dans un module classique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Ok_Button_Click()
    Me.Hide
    Test_Ctrl
    End Sub
    Deuxième code lancé par le premier

    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 Test_Ctrl()
    Dim i As Integer
    Dim j As Integer
    Dim Ctrl As Control
    Dim BL As Range
    Set Base = ActiveWorkbook.Sheets("Baseline")
    Set BL = Base.Range("C9")
    BL = BL.Offset(0)
    i = 0
    j = 0
     
        For i = 0 To 16
                If Equipment_Edit.ComboBox1.Value = BL.Offset(i, 0) Then
                Milestone_Edit.Label13.Caption = Equipment_Edit.ComboBox1.Value
                    For Each Ctrl In Controls
                    If TypeName(Ctrl) = "TextBox" Then
                     Ctrl&(j + 9).Value = ""
                     Ctrl&(j + 9).Value = BL.Offset(i, 3)
                     Ctrl&(j + 9).Enabled = False
                        If Ctrl&(j + 9) = "" Then
                            Ctrl&(j).Enabled = False
                            Ctrl&(j + 9).BackColor = &H80000016
                            Ctrl&(j).BackColor = &H80000016
                        End If
                    End If
                    j = j + 1
                    Next Ctrl
                End If
         Next i
        Milestone_Edit.Show
    End Sub
    A l'activation de la première macro ci-dessus j'ai une erreur de compilation "Sub ou fonction non définie".
    Aurai-je oublié quelque chose ou fais une erreur?
    J'avais dans un premier temps nommé le second Code "Sub Test_Ctrl()" puis comme l'erreur est apparue je l'ai renommé "Private Sub Test_Ctrl()" en pensant que c’était necessaire car le code est placé dans un UserForm, mais cela n'a eu aucun effet.
    Si je place ces deux codes dans un module classique, ne devrais-je pas définir d'autres paramètres?

    Merci pour votre aide et vos conseils
    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 755
    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 : 12 755
    Points : 28 606
    Points
    28 606
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    A l'activation de la première macro ci-dessus j'ai une erreur de compilation "Sub ou fonction non définie".
    A quel n° de ligne ?

    Je viens de voir cette ligne de code Milestone_Edit.Show à la dernière ligne de ton code
    On appelle un UserForm depuis une module (Feuille ou Standard ou même depuis un autre UserForm) et on initialise de préférence les propriétés des contrôles du UserForm depuis la procédure événementielle UserForm_Initialize

    Je te conseille vivement la lecture de ce tutoriel Utiliser les UserForm en VBA Excel, suivi de celui que je t'avais déjà conseillé de lire Utiliser les contrôles dans un UserForm, en VBA Excel. Parce-que tu t'attaques à un code difficile alors que tu ne maîtrises pas la base.
    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

  7. #7
    Membre éprouvé
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Points : 1 124
    Points
    1 124
    Par défaut
    Bonjour Philippe,
    L'erreur se produit à la ligne 3 du premier code , à l'appel du code Test_Ctrl.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Ok_Button_Click()
    Me.Hide
    Test_Ctrl
    End Sub
    Milestone_Edit.Show est l'UserForm dans lequel apparaissent mes données, c'est dans cet UserForm qu'a été placé le second code.
    Initialement le code était dans un module, avant que j'apporte la simplification.
    Maintenant que l'emplacement du code a été changé ce n'est peut-être pas la bonne méthode pour faire apparaitre un UserForm avec son propre code (je vais lire la doc que tu m'as proposée).

    Voici ce que j'avais
    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
    For i = 0 To 16
                If Equipment_Edit.ComboBox1.Value = BL.Offset(i, 0) Then
                Milestone_Edit.Label13.Caption = Equipment_Edit.ComboBox1.Value
     
                Milestone_Edit.TextBox9.Value = ""
                Milestone_Edit.TextBox9.Value = BL.Offset(i, 3)
                Milestone_Edit.TextBox9.Enabled = False
                    If Milestone_Edit.TextBox9.Value = "" Then
                    Milestone_Edit.TextBox1.Enabled = False
                    Milestone_Edit.TextBox9.BackColor = &H80000016
                    Milestone_Edit.TextBox1.BackColor = &H80000016
                    Else
                    Milestone_Edit.TextBox1.Enabled = True
                    Milestone_Edit.TextBox9.BackColor = &H80000005
                    Milestone_Edit.TextBox1.BackColor = &H80000005
                    End If
               .....
     
                Milestone_Edit.TextBox16.Value = ""
                Milestone_Edit.TextBox16.Value = BL.Offset(i, 10)
                Milestone_Edit.TextBox16.Enabled = False
                    If Milestone_Edit.TextBox16.Value = "" Then
                    Milestone_Edit.TextBox8.Enabled = False
                    Milestone_Edit.TextBox8.BackColor = &H80000016
                    Milestone_Edit.TextBox16.BackColor = &H80000016
                    Else
                    Milestone_Edit.TextBox8.Enabled = True
                    Milestone_Edit.TextBox16.BackColor = &H80000005
                    Milestone_Edit.TextBox8.BackColor = &H80000005
                    End If
     
               End If
            Next i
    je souhaites donc simplifier ce code et utiliser vos conseils même si effectivement je ne maîtrise pas encore toutes les bases pour les UserForm.

    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

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

    Informations professionnelles :
    Activité : salarié

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

    Tot à fait d'accord avec les remarques de Philippe...
    Tu ne précises pas si les deux UserForms sont chargées, fermées. Ça reste vague.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Ok_Button_Click()
    Me.Hide
    Test_Ctrl
    End Sub

    Me = Equipment_Edit ? Me = Milestone_Edit ?
    On ne pourra t'aider que si tu es précis et que tu détailles bien tout !
    À plus,

    Thauthème

    Je suis Charlie

  9. #9
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 755
    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 : 12 755
    Points : 28 606
    Points
    28 606
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'ajouterais encore que tu prends des risques à la ligne 6 de ton deuxième code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Base = ActiveWorkbook.Sheets("Baseline")
    En effet, ActiveWorkbook est le classeur actif donc ni ThisWorkbook (classeur où se trouve le code VBA) ni un classeur précis, Exemple Workbooks("NomClasseur").
    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

  10. #10
    Membre éprouvé
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Points : 1 124
    Points
    1 124
    Par défaut
    Bonjour Thautheme,
    Me s'applique à l'UserForm dans lequel est placé le bouton Ok

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Ok_Button_Click()
    Me.Hide
    Test_Ctrl
    End Sub
    En fait ma macro est assez complexe, la partie sur laquelle je travaille servira à l’utilisateur final pour entrer des données (Dates de réalisation effectives d'étapes d'un projet (Milestones)) dans l'userform afin d'alimenter une feuille excel qui sera utilisée pour les comparer avec les dates prévisionnelles de réalisation de ces dites étapes et générer des alertes en cas de retard ainsi que des courbes d'avancement.

    La partie traitement des données, comparaison et génération des courbes est terminée, j'en suis à l'étape UserForm.

    Si cela intéresse quelqu'un je peux envoyer mon fichier en pièce jointe sur une adresse privée, le fichier est en cours de réalisation et n'a pas encore été nettoyé de tous les différents test de code (mis en commentaires) et des nombreux .Select qui me servent lors de la vérification en mode pas à pas.

    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  11. #11
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 755
    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 : 12 755
    Points : 28 606
    Points
    28 606
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je vois d'autres problèmes aux lignes 17 à 23 du deuxième code (Ctrl&(j + 9)). Ctrl est une variable objet représentant un contrôle. Que vient faire cette dimension ?
    De plus, comme l'esperluette est contre la variable objet Ctrl& celle-ci est interprétée comme étant une variable de type long et pas comme un opérateur de concaténation qui de toute manière renverrait également dans ce cas précis une erreur.

    Je te conseille vivement également de déclarer toutes tes variables et placer en tête de module Option Explicit cela t'aidera dans le débogage
    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

  12. #12
    Membre éprouvé
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Points : 1 124
    Points
    1 124
    Par défaut
    Philippe,
    Dans ces lignes 17 à 23 j'ai essayé d'appliquer la leçon du chapitre "I-B. Boucler sur les contrôles contenus dans la Forme" de SilkyRoad (dernier exemple du chapitre).
    J'ai supprimé l'espace entre Ctrl et &.
    Pour ce que j'ai compris Ctrl & ( i + 9 ) représente TextBox9, lorsque i=0, car j'ai défini Ctrl comme un Control et j'ai posé la condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If TypeName(Ctrl) = "TextBox" Then
    C'est une interprétation du contenu du chapitre, celui-ci propose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 To 10
        Cells(i, 1) = Me.Controls("TextBox" & i)
        Next i
    Mais mon interprétation est peut-être erronée.

    Je vais également ajouter Option Explicit afin de faciliter le déboguage.

    Pour ce qui est de ActiveWorkBook, tu as raison c'est une source potentielle d'erreur, je vais donc remplacer par ThisWorkBook.

    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  13. #13
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 755
    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 : 12 755
    Points : 28 606
    Points
    28 606
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    C'est un petit peu mélanger les pommes et les poires
    Dans ces lignes de codes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 To 10
    Cells(i, 1) = Me.Controls("TextBox" & i)
    Next i
    on boucle sur les 10 contrôles TextBox nommés TextBox1, TextBox2, ..., TextBox10
    Alors que dans celles-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Dim ctrl As Control
     For Each ctrl In Me.Controls
      If TypeName(ctrl) = "TextBox" Then Debug.Print ctrl.Name
     Next
    on parcoure la collection de tous les contrôles du UserForm (Me) et dans la boucle on affiche le nom du contrôle si c'est un TextBox
    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

  14. #14
    Membre éprouvé
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Points : 1 124
    Points
    1 124
    Par défaut
    Et les poires en ce moment...

    Blague à part, je ne saurais pas si mon interprétation est bonne ou mauvaise si la macro ne se lance pas, cf mon problème avec la ligne 3 du code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Ok_Button_Click()
    Me.Hide
    Test_Ctrl
    End Sub
    Test_Ctrl étant le nom de ma macro.
    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  15. #15
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 755
    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 : 12 755
    Points : 28 606
    Points
    28 606
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Les explications que je t'ai donné avait pour but de te faire comprendre la différence entre boucler sur des noms de contrôles et la boucle sur une collection afin de corriger les lignes en erreur.
    Il me semble donc avoir soulevé pas mal de problème dans cette procédure nommée Test_Ctrl ainsi que quelques recommandations.
    Apporte déjà les modifications et utilise le débogage au pas à pas à l'aide de la touche F8 pour voir si le bug persiste.
    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

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

Discussions similaires

  1. [XL-2003] tableau de MSForms.TextBox dans un UserForm - Impossible d'accedere à la Valeur
    Par langeard dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/06/2011, 17h29
  2. [XL-2010] Textbox dans un UserForm : les évènements ne se déclenchent pas
    Par St-Jean dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 20/10/2010, 23h43
  3. Réponses: 7
    Dernier message: 23/08/2010, 22h26
  4. faire apparaitre des textbox dans un userform
    Par petiteabeille64 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/03/2008, 17h00
  5. TextBox dans une Userform
    Par jepac dans le forum VBA Word
    Réponses: 3
    Dernier message: 23/01/2008, 00h05

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