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 :

Balayage des contrôles d'un formulaire - Erreur Argument invalide [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut Balayage des contrôles d'un formulaire - Erreur Argument invalide
    Bonjour à tous,

    Afin de définir une propriété d'un formulaire, je souhaiterais balayer ses contrôles.
    Dans une procédure d'essai, j'ai codé

    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
    Sub essaiCtrl()
     
    Dim Wb As Workbook, uf As Object
    Const MonUserForm As String = "Usf_Monusf"
     
    Set Wb = ThisWorkbook
     
    Set uf = Wb.VBProject.VBComponents.Item(MonUserForm)
     
    Dim i As Byte
     
    With uf.Designer
            Debug.Print .Controls.Count
            For i = 1 To .Controls.Count
                    Debug.Print .Controls(i).Top
                    Debug.Print TypeName(.Controls(i))
                    Debug.Print .Controls(i).Name
            Next i
    End With
     
    Set uf =Nothing
     
    Set Wb = Nothing
     
    End Sub
    Lors de l'exécution de cette procédure survient l'erreur
    Erreur d'Exécution - argument non valide
    Cette erreur survient au dernier contrôle
    Si le nombre de contrôles est 50, alors l'erreur survient lorsque i = 50.
    Elle concerne chacune des 3 caractéristiques (Top....)
    Autrement dit, le code ne supporte pas .

    Pourquoi? Quel est ce dernier contrôle?

    Par avance, merci.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,

    Tes indices iraient-ils de 0 à 49 ?

    Autre approche, au lieu de passer par un indice, passe par une boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for each ctl in .Controls
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Je procède ainsi pour balayer les contrôles

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub essaiCtrl()
    Dim Wb As Workbook, Ctrl As Control, uf As Object
    Const MonUserForm As String = "Usf_Monusf"
        Set Wb = ThisWorkbook
        Set uf = Wb.VBProject.VBComponents.Item(MonUserForm)
            For Each Ctrl In uf.designer.Controls
                Debug.Print Ctrl.Top & "||" & TypeName(Ctrl) & "||" & Ctrl.Name
            Next Ctrl
        Set uf = Nothing
        Set Wb = Nothing
    End Sub
    Les contrôles sont indexés en base 0, faut commencer à 0 et finir à .Count - 1

  4. #4
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Merci à vous deux

    Jean-Philippe,

    C'est la raison pour laquelle j'utilise le nombre de contrôles.
    Au passage, je considère rarement des bornes supérieures fixes. Je préfère Count, Ubound...

    J'ai besoin de cet indice car, plutôt que d'utiliser l'instruction Exit For, dans mon développment, j'envisage une boucle Do While ....Loop.
    (D'ailleurs, Tonton Pierre, the big chief, il n'aime pas les Exit. )

    Joe,

    En effet.
    Et ce bien que j'aie considéré en entête de module.
    Merci à toi.
    Discussion résolue.

    Bonne journée à tous.

  5. #5
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Option Base 1 n'affecte que les array il me semble ? Et pas les index d'objets

    Un peu comme Option Base 0 qui ne fonctionnerait pas en transférant une plage dans un array ?

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

Discussions similaires

  1. [AC-2013] Module de classe pour gérer événements des contrôles d'un Formulaire
    Par kmaillet dans le forum VBA Access
    Réponses: 8
    Dernier message: 31/08/2023, 09h26
  2. [AC-2013] Parcourir une partie des contrôles d'un formulaire access
    Par tgodefroid dans le forum VBA Access
    Réponses: 2
    Dernier message: 27/12/2017, 13h56
  3. [AC-2010] Créer des contrôles sur un formulaire existant
    Par gilweb dans le forum IHM
    Réponses: 4
    Dernier message: 11/10/2012, 19h57
  4. [AC-2003] Insérer des contrôles dans un formulaire dynamiquement
    Par autkioer dans le forum VBA Access
    Réponses: 3
    Dernier message: 29/12/2010, 16h32
  5. réaliser des contrôles sur le formulaire
    Par gentil dans le forum Struts 1
    Réponses: 30
    Dernier message: 28/03/2007, 17h04

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